杨校老师课堂之Java类与对象、封装、构造方法

本篇文章内容如下:


  • 面向对象

  • 类与对象

  • 三大特征——封装

  • 构造方法

教学目标


  • 能够理解面向对象的思想
  • 能够明确类与对象关系
  • 能够掌握类的定义格式
  • 能够掌握创建对象格式,并访问类中的成员
  • 能够完成手机类的练习
  • 能够理解对象的内存图
  • 能够说出成员变量和局部变量的区别
  • 能够理解private关键字的含义
  • 能够说出this关键字可以解决的问题
  • 能够理解构造方法的含义
  • 能够用封装的思想定义一个标准类

第1章 面向对象思想


1.1 面向对象思想概述


概述

Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下, 使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性行为。面 向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算 机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去 操作实现。

举例

洗衣服:

  • 面向过程:把衣服脱下来-->找一个盆-->放点洗衣粉-->加点水-->浸泡10分钟-->揉一揉-->清洗衣服-->拧干-->晾 起来

  • 面向对象:把衣服脱下来-->打开全自动洗衣机-->扔衣服-->按钮-->晾起来

区别:

  • 面向过程:强调步骤。

  • 面向对象:强调对象,这里的对象就是洗衣机。

特点

面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。 面向对象的语言中,包含了三大基本特征,即封装、继承和多态

1.2 类和对象

环顾周围,你会发现很多对象,比如桌子,椅子,同学,老师等。桌椅属于办公用品,师生都是人类。那么什么是 类呢?什么是对象呢?

什么是类

  • 类:是一组相关属性行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该 类事物。

现实中,描述一类事物:

  • 属性:就是该事物的状态信息。

  • 行为:就是该事物能够做什么。

举例:小猫。

属性:名字、体重、年龄、颜色。 行为:走、跑、叫。

类与对象的关系

  • 类是对一类事物的描述,是抽象的

  • 对象是一类事物的实例,是具体的

  • 类是对象的模板,对象是类的实体。

1.3 类的定义


事物与类的对比

现实世界的一类事物: 属性:事物的状态信息。 行为:事物能够做什么。 Java中用class描述事物也是如此: 成员变量:对应事物的属性 成员方法:对应事物的行为

类的定义格式

     public class ClassName {     //成员变量     //成员方法    }
  • 定义类:就是定义类的成员,包括成员变量成员方法

  • 成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外

  • 成员方法:和以前定义方法几乎是一样的。只不过把static去掉,static的作用在面向对象后面课程中再详细 讲解。

类的定义格式举例:

 public class Student {//成员变量String name;//姓名int age;//年龄//成员方法//学习的方法public void study() {System.out.println("好好学习,天天向上");}//吃饭的方法
     publicvoid eat() {System.out.println("学习饿了要吃饭");}}

1.4 对象的使用


对象的使用格式

创建对象:

类名 对象名 = new 类名();

使用对象访问类中的成员:

对象名.成员变量;对象名.成员方法();

对象的使用格式举例:

 package cn.javabs;/***注意开发规范:*  包名~全部小写 |类名称~单词首字母大写 | 方法名称或变量名称~第一个单词小写、多个单词时,从第二个单词开始首字母代写|常量~全部大写**开发命名规范:*  包名~倒域名+项目名称+包名:举个栗子: cn.javabs.demo.entity; |cn.javabs:这是我的网站域名倒着写的 | .demo:是演示项目名称 | entity:实体包*  类名、接口名称、方法名称、变量名称 要做到 见名知意**@author:Mryang**/ public class TestStudent {public static void main(String[] args) {// 1. 创建对象格式:类名 对象名 = new 类名();Student s = new Student();System.out.println("对象的哈希值是:"+s); //cn.javabs.Student@100989 | s 是一个对象// 2. 直接输出成员变量值System.out.println("姓名:"+s.name); //null | s是一个对象 | s.name 表示的是 对象s中的name属性是什么?System.out.println("年龄:"+s.age); //0 | s是一个对象 | s.age 表示的是 对象s中的age属性是什么?System.out.println("‐‐‐‐‐‐‐‐‐‐");// 3. 给成员变量赋值 | 将数据封装到对象中去  s.name = "旺财";//  s.name= "旺财"  表示的是 对象s中的name属性是旺财  | 需注意 name属性是一个字符串类型 、因此旺财需要引号引起来s.age = 8;//  s.age= 8  表示的是 对象s中的age属性是8  | 需注意 age属性是一个整数类型 、因此只需要写数字即可//--------至此  对象s中有的两个属性都已经有了相对性的值--------// 4. 再次输出成员变量的值System.out.println("姓名:"+s.name); //旺财System.out.println("年龄:"+s.age); //8System.out.println("‐‐‐‐‐‐‐‐‐‐");// 5. 调用成员方法 | study 是行为  | 可以理解为是s对象的功能 | 比如:学生有学习功能...s.study(); // "好好学习,天天向上"s.eat(); // "学习饿了要吃饭"
     }}

成员变量的默认值

  数据类型 默认值
基本类型 整数(byte,short,int,long) 0
  浮点数(float,double) 0.0
  字符(char) '\u0000'
  布尔(boolean) false
引用类型 数组,类,接口 null

1.5 类与对象的练习


定义手机类:

public class Phone {/**成员变量*/String brand; //品牌double price; //价格String color; //颜色/**成员方法*//***打电话*@Param name 人名*/public void call(String name) {System.out.println("给"+name+"打电话");}/***发短信*/public void sendMessage() {System.out.println("群发短信");}
}

定义测试类:

public class TestPhone {public static void main(String[] args) {// 1. 创建对象Phone p = new Phone();// 2. 输出成员变量值 | 对象中属性初始化值System.out.println("品牌:"+p.brand);//nullSystem.out.println("价格:"+p.price);//0.0System.out.println("颜色:"+p.color);//nullSystem.out.println("‐‐‐‐‐‐‐‐‐‐‐‐");// 3. 给成员变量赋值 p.brand = "华为";p.price = 2699.88;p.color = "曜石黑";// 4. 再次输出成员变量值System.out.println("品牌:"+p.brand);//华为System.out.println("价格:"+p.price);//2699.88System.out.println("颜色:"+p.color);//曜石黑System.out.println("‐‐‐‐‐‐‐‐‐‐‐‐");// 5. 调用成员方法p.call("小强");p.sendMessage();}}

1.6 对象内存图


一个对象,调用一个方法内存图

暂略后补

两个对象,调用同一方法内存图

暂略后补

一个引用,作为参数传递到方法中内存图

暂略后补

1.7 成员变量和局部变量区别


  • 在类中的位置不同 重点

    • 成员变量:类中,方法外

    • 局部变量:方法中或者方法声明上(形式参数)

  • 作用范围不一样 重点

    • 成员变量:类中

    • 局部变量:方法中

  • 初始化值的不同 重点

    • 成员变量:有默认值

    • 局部变量:没有默认值。必须先定义,赋值,最后使用

  • 在内存中的位置不同 了解

    • 成员变量:堆内存

    • 局部变量:栈内存

  • 生命周期不同 了解

    • 成员变量:随着对象的创建而存在,随着对象的消失而消失

    • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

第2章 封装


2.1 封装概述


概述

面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的 方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

原则

属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

2.2 封装的步骤


  1. 使用 private 关键字来修饰成员变量。

  2. 对需要访问的成员变量,提供对应的一对 getXxx 方法 、setXxx 方法。

2.3 封装的操作——private关键字

private的含义

  1. private是一个权限修饰符,代表最小权限。

  1. 可以修饰成员变量和成员方法。

  2. 被private修饰后的成员变量和成员方法,只在本类中才能访问。

private的使用格式

private 数据类型 变量名 ;

  1. 使用private 修饰成员变量,代码如下:

 public class Student {private String name;private int age;}

  1. 提供 getXxx 方法 / setXxx 方法,可以访问成员变量,代码如下:

 package cn.javabs.studentmanager.entity;/*** *@author:Mryang*快捷键-小贴士:* 在 IDEA 开发工具中 可以使用 Alt+Insert 组合键进行生成Getters和Setters方法* 在 Eclipse 开发工具中 可以使用 Alt+Shift+S 组合键进行生成Getters和Setters方法**/public class Student {private String name;private int age;public void setName(String n) {name = n;}public String getName() {return name;}public void setAge(int a) {age = a;}public int getAge() {return age;}}

2.4 封装优化1——this关键字

我们发现 setXxx 方法中的形参名字并不符合见名知意的规定,那么如果修改与成员变量名一致,是否就见名知意 了呢?代码如下:

 
public class Student {private String name;private int age;public void setName(String name) {name = name;}public void setAge(int age) {age = age;}}

经过修改和测试,我们发现新的问题,成员变量赋值失败了。也就是说,在修改了 setXxx() 的形参变量名后,方 法并没有给成员变量赋值!这是由于形参变量名与成员变量名重名,导致成员变量名被隐藏,方法中的变量名,无 法访问到成员变量,从而赋值失败。所以,我们只能使用this关键字,来解决这个重名问题。

this的含义

this.成员变量名;

使用 this 修饰方法中的变量,解决成员变量被隐藏的问题,代码如下:

package cn.javabs.studentmanager.entity;public class Student {private String name;private int age;public void setName(String name) {//name = name;this.name = name;}public String getName() {return name;}public void setAge(int age) {//age = age;this.age = age;}public int getAge() {return age;}
}

小贴士:方法中只有一个变量名时,默认也是使用 this 修饰,可以省略不写。

2.5 封装优化2——构造方法


当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。

小贴士:无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法, 一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效。

构造方法的定义格式

权限修饰符 构造方法名(参数列表){ // 方法体 }

构造方法的写法上,方法名与它所在的类名相同。它没有返回值,所以不需要返回值类型,甚至不需要void。使用 构造方法后,代码如下:

public class Student {private String name;private int age;// 无参数构造方法public Student() {}// 有参数构造方法public Student(String name,int age) {this.name = name;this.age = age;}
}

注意事项

  1. 如果你不提供构造方法,系统会给出无参数构造方法。

  2. 如果你提供了构造方法,系统将不再提供无参数构造方法。

  3. 构造方法是可以重载的,既可以定义参数,也可以不定义参数。

2.6 标准代码——JavaBean

JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无 参数的构造方法,提供用来操作成员变量的 set 和 get 方法。

public class ClassName{//成员变量//构造方法//无参构造方法【必须】//有参构造方法【建议】//成员方法//getXxx()//setXxx()
}

编写符合JavaBean规范的类,以学生类为例,标准代码如下:

public class Student {//成员变量private String name;private int age;//构造方法public Student() {}public Student(String name,int age) {this.name = name;this.age = age;}//成员方法
    publicvoid setName(String name) {this.name = name;}public String getName() {return name;}publicvoid setAge(int age) {this.age = age;}publicint getAge() {return age;}
}

测试类,代码如下:

public class TestStudent {public static void main(String[] args) {// 因为使用了无参构造方法 故而可以这么newStudent s= new Student();s.setName("旺财");s.setAge(8);System.out.println(s.getName()+"‐‐‐"+s.getAge());//因为使用了有参构造方法 故而可以这么newStudent s2= new Student("小强",6);System.out.println(s2.getName()+"‐‐‐"+s2.getAge());}
}

转载于:https://www.cnblogs.com/xiaoxiao5016/p/10994019.html

杨校老师课堂之Java类与对象、封装、构造方法相关推荐

  1. 杨校老师课堂之Java面向对象知识点整理集锦

    目录 第一部分 Java面向对象 1.开发环境搭建及开发工具eclipse使用 2.类和对象 3. 成员变量和局部变量区别 4. 数据类型 5.构造函数 6.函数 7. 成员变量的初始化 8. thi ...

  2. 杨校老师课堂之Java项目部署到云端服务器之安装MySQL、Jdk、Tomcat

    部署项目到公网上去思路剖析 · 公网服务器· 数据库· 下载.安装.配置.远程连接· 使用本地的Navicat去远程连接 操作数据库 · JDK 安装Tomcat的前提 · tomcat ·目录结构· ...

  3. 杨校老师课堂之CSDN博客查找博文汇总-目录

            目录 1.面试 2.JavaWeb文件[图片]上传功能: 3.BaseServlet设计教程 4.富文本编辑器使用教程 5.下载Jar包教程 6.页面原型下载 7.Java连接数据库 ...

  4. 杨校老师课堂之WEB前端HTML

    目录 1. 概念: 2. 快速入门: 2.1 语法: 2.2 代码: 3. 认识标签: 3.1 文件标签:构成html最基本的标签 3.2 文本标签:和文本有关的标签 3.3 图片标签: 3.4 列表 ...

  5. 杨校老师课堂之JavaScript案例之跑马灯左右无缝连接图片自动轮播

    JavaScript案例之跑马灯左右无缝连接 效果图: 思路: 1.先做界面 1.1 制作一个大盒子,进行存放整个图片及按钮区域 1.2 制作两个按钮和中间区域盒子 1.3 中间区域盒子中使用无序列表 ...

  6. 杨校老师课堂之Spring框架面试题【开发工程师面试前必看】

    1.spring 中都用到了哪些设计模式? 2.spring 中有哪些核心模块? 3.说一下你理解的 IOC 是什么? 4.spring 中的 IOC 容器有哪些?有什么区别? 5.那 BeanFac ...

  7. 杨校老师课堂之Web前端JS类库_JQuery案例[效果图与代码齐全]

    JQuery案例 想使用Jquery ,必须要导入Jquery的库文件jquery-1.7.2.min.js: 下载地址: https://blog-static.cnblogs.com/files/ ...

  8. 杨校老师课堂之Maven下载与配置阿里云镜像

    1. 下载 下载地址: https://archive.apache.org/dist/maven/maven-3/ 建议: 不要存放在C盘内: 不要存放在桌面 不要存放在有中文路径中或存放在带有特殊 ...

  9. 杨校老师课堂之JavaScript右下角广告弹框教程

    案例制作思路: 1.先制作界面 添加一个盒子包含一个按钮,使盒子绝对定位在右上角 添加一个大盒子,同理,将盒子居于左下角:其中内部包含一个顶端盒子和底部盒子 顶端盒子因为是属于大盒子内部的存在,所以宽 ...

最新文章

  1. java 调用postgresql 函数_从Java调用PostgreSQL中的存储过程
  2. 并发(concurrency)和并行(parallellism)
  3. Atitit 网络爬虫与数据采集器的原理与实践attilax著 v2
  4. 【漏扫工具】AWVS12使用介绍
  5. unity渲染管线及升级URP
  6. 云课堂让职业院校软件开发教学更简单
  7. c语言的整形变量选择题,C语言选择题 (附答案)
  8. 智慧能源一体化管控平台
  9. DNS - 什么是云解析DNS?
  10. 使用电脑热点和Fiddler对Android app进行抓包
  11. Grafana的介绍与使用
  12. php 照片变成卡通照片,怎么把照片做成q版卡通 照片变q版卡通人物 q版卡通头像制作...
  13. Spark RDD用法
  14. 英语不好怎么自学python_为什么我就是学不好英语啊?我明明很努力,但是为... 我英语一般,但我很想学Python这个编程语言,行不?...
  15. 安卓开发就等同于Java编程么?不懂的进来看看吧
  16. 在阿里(02):阿里入职记
  17. 渣渣一记:)之HTML
  18. 可信计算和可信赖计算的渊源
  19. 如何优化C语言的代码空间
  20. 质数、互质及算法分析

热门文章

  1. linux fedora安装flameshot火焰截图
  2. k8s部署dubbo-admin 2.5.10
  3. Linux shell关系运算
  4. JMM主内存和工作内存运行流程图
  5. scala调用java代码_scala调用java代码
  6. dsc linux 软件安装_linux – 安装dsc21时出错:“dsc21:取决于:cassandra(= 2.1.8),但要安装2.2.0”...
  7. QTcpServer / QTcpSocket 简单示例
  8. Linux 之四 Ubuntu 20.04 WiFi 无法使用、设置无法显示、远程桌面、SSH、Git、PPA、FFmpeg 等各问题记录
  9. 遗传算法求二元函数极值怎么编码_遗传算法求解一元函数二元函数最值
  10. makefile中的@ $ :