文章目录
day_07面向对象
1.类和对象
1.1类和对象
什么是对象
在现实世界里面,万物皆对象,客观存在的事物皆对象
面向对象:
你不需要去做某一件事,而是让别人帮你完成
面向过程:
所有的东西都是由你自己来完成
类和对象的关系
现实世界中,类是描述描述一系列具有共同属性以及行为的事物,而对象就是这个描述的具体存在
现实世界里面先有对象,再有类
在Java中,先有类,再有对象;我们在电脑中关注的是事物的信息,然后事物的信息要存在就要先有类型【其实类的先存在是为了开辟内存】
因为类是对象的数据类型
1.2类的定义
什么是类
类是对现实生活中一类具有共同属性和行为的事物描述和抽象
类的特点:
- 类是对象的基本(数据)类型
1.5什么是对象的行为
行为:对象能够执行的操作
1.6类和对象的关系
类:类是对现实生活中一类具有共同属性和行为的事物描述和抽象
对象:能够看得到摸得着的真实存在的实体
1.7类的定义
类的重要性:是Java的基本组成单位
类:对具有共同属性及行为的一系列的事物描述【类是虚的,只是一段描述信息】
属性:其实就是用来形容(描述)这个物体具备的特征(有些什么东西)
行为:能做一些什么东西,具备什么的功能
类的定义步骤:
1.定义类
2.编写类的成员变量
3.编写类的成员方法
类的组成:
属性: 成员变量(变量) 数据类型 变量名;
行为: 成员方法(方法) 把多句代码放在一起,让它具备一定功能
我们现在写的这种类里面没有main方法
一个类中具备属性以及行为是非常多的,我们不可能一一去写,只写我们关注的就行
//JavaBean 封装类
一般方法通用格式:
pubic static 数据类型/void 方法名(数据类型 变量名,数据类型 变量, ){
return 数据;
}
类中方法格式()去掉static:
pubic 数据类型/void 方法名(数据类型 变量名,数据类型 变量, ){
return 数据;
}
1.8对象的使用
我们是在测试类中写main方法,测试类主要的作用就是用来创建对象以及使用对象的属性和方法
创建对象
- 格式:类名 对象名=new 类名();//地址值
- 范例:Phone p = new Phone();
使用对象
1.使用成员变量
格式:对象名.变量名
范例:p.brand
2.使用成员方法
格式:对象名.方法名()
范例:p.call();
2.对象内存图
2.1对象内存图(单个对象)
栈内存:方法运行时的内存 包含局部变量、形参
堆内存:开辟内存,new出来的东西都在这
方法区内存:主要用来加载class文件(解析字节码)
成员变量和局部变量的区别:
区别 | 成员变量 | 局部变量 |
---|---|---|
定义位置 | 类中方法外 | 方法声明上或者方法的内部 |
内存的位置 | 堆内存中 | 栈内存中 |
生命周期 | 随着对象的创建而创建,随着对象的消失而消失 | 随着方法的进栈而创建,随着方法弹栈而消失 |
默认初始化值 | 系统默认 | 需要自定义 |
4.封装
4.1private关键字
- 是一个权限修饰符
- 可以修饰成员
小结:
1.没有private出现的问题?
因为可以直接去给成员变量赋值,所以这个时候我们成员变量是不安全的,因为可以随便赋值
2.private关键字
private修饰的成员只能够在本类中访问,不能在别的类中访问(若没有private,别的类可以p.name="xxx"进行定义)
3.封装的步骤
在封装类中提供get/set方法 用来获取/设置值
get->获取得到
getName
getAge
set->设置
setName
setAge
private的使用格式:
private 数据格式 变量名
注意:
1.成员变量一旦私有(被private修饰)后,其他类就不能直接访问该成员变量,如果要访问,可以通过setXxx来修饰值,getXxx来获取。(Xxx代表变量,首字母大写,如setAge/getAge方法)
2.成员变量私有,然后提供get/set方法是为了提高代码安全性。
3.在开发的时候,我们并不一定在setXxx中做参数的校验
4.成员变量私有和提供配套的getter和setter方法已经成为java设计的一种规范
快捷键:
鼠标右键–>Gennerate–>Getters and Setters–>command+a(全选)–>Enter
4.3this关键字
priviat String name;
private void setName(String name){
//name = name; // 此处两个name均为局部变量,所以无法为成员变量赋值
this.name = name;//用this修饰的变量用于指代成员变量,成功为成员变量赋值
}
this修饰的变量用于指代成员变量
解决局部变量隐藏成员变量
this代表当前调用方法的对象
public class StudentTest {
public static void main(String[] args) {
Student s = new Student();
s.setName("老张");
System.out.println("s-->"+s);
}
}
public class Student {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
System.out.println("this-->"+this);
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private String name;
private int age;
public Student() {
}
}
输出结果:
从运行结果我们可以看出this和s所指向的内存地址哈希值一样。
4.4this内存原理
this被哪一个对象的方法调用,this就代表哪个对象
如果成员变量和局部变量同名时候,使用this可以让成员变量覆盖局部变量
this在测试类中不能使用,能在封装类只使用
4.5封装
1.封装概述
是面向对象三大特征之一(封装、继承、多态)
是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内,外界是无法直接操作的
2.封装原则
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的get/set方法进行访问
3.封装的好处
通过方法来控制成员变量的操作,提高代码的安全性
把代码用方法来封装,提高代码的复用性
5.构造方法
5.1构造方法
构造方法是一种特殊的方法
作用:创建对象,在创建对象的同时,完成成员变量的初始化
格式:
public class 类名{
修饰符 类名(参数){
}
}
有参构造方法可以在创建对象时候给成员变量赋值
5.2构造方法的注意事项
1.构造方法的创建
- 当class中无无参构造方法时,会默认创建一个无参构造方法(编译不会报错)
- 当class中含有构造方法时,不会创建无参构造方法
建议:不管我们有没有写构造泛方法,都把无参和满参都写上
2.构造方法的重写
标准的封装类:
1.私有所有的属性
2.给所有的属性提供对应 get/set方法
3.给这个类提供无参以及满参构造
快捷键:
鼠标右键—>Generate—>Constructor—>select all(无参构造方法)/command+a+enter(全参构造方法)
Memorial Day is 387 days |