六、面向对象
设计对象并使用
类和对象
类(设计图):是对象共同的特征表述
对象:是真实存在的具体东西
在Java中必须先设计类,才能获得对象
类的定义:
public class 类名 {
成员变量;
成员方法;
构造器;
代码块;
内部类;
}
public class Phone{
//属性(成员变量)
String color;
double price;
//行为(方法)
public void call(){
}
public void play(){
}
}
创建对象:
类名 对象名 = new 类名();
Phone phone = new Phone();
对象的操作:
对象.成员变量;
phone.color;
对象.成员方法(...);
phone.call();
补充:用来描述一类事物的类,专业叫做:Javabean 类;
在Javabean类中,是不写main方法的。
注:
类名首字母建议大写,需要见名知意,驼峰模式
一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件定义一个class类
成员变量的完整定义格式:修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值。
封装
封装
如何正确设计对象的属性和方法
对象代表什么,就得封装对应的数据,并提供数据对应的行为
理解封装思想的好处
让编程变得简单,有事么事,找什么对象,调方法就行。
降低我们的学习成本,可以少学,少记,不需要记对象有哪些方法,有需要时去找就行
private关键字
使一个修饰符,可修饰成员变量和成员方法,被private修饰的成员只能在本类中草能访问
set与get:
set:给成员变量进行赋值
get:对外提供属性
get:
public String get(){
return ;
}
set:
public void set(String s){
sex = s;
}
this关键字
成员变量与局部变量
成员变量:定义在方法体外部
局部变量:定义在方法体内部
就近原则:谁离我更近,就使用谁
为了避免就近原则带来的问题,引出this关键字 解决
this的内存原理
本质:所在方法调用者的地址值
构造方法
构造方法
构造方法也叫构造器、构造函数
作用:在创建对象的时候给成员变量进行初始化的
格式:
public class Student{
修饰符 类名(参数){
方法体;
}
}
空参构造:
//如果我们没有写任何的构造方法,虚拟机会自动生成一个空参构造
public Student(){}
带参构造:
public Student(String name , int age){
this.name=name;
this.age=age;
}
执行时机:创建对象的时候由虚拟机调用,不能手动调用构造方法
没创建一次对象,就会调用一次构造方法
特点:方法名与类名相同,大小写也要一致
没有返回值类型,连void都没有
没有具体的返回值(不能return带回结果数据)
标准JavaBean
标准JavaBean
规范:
类名需要见名知意
成员变量使用private修饰
至少提供两个构造方法(无参构造,全参构造)
成员方法(get与set)
插件:ptg 一键生成标准Javabean
对象内存图
对象内存图
- 加载class文件
- 声明局部变量
- 在堆内存中开辟一个空间
- 默认初始化
- 显示初始化
- 构造方法初始化
- 将堆内存中的地址值赋值给左边的变量
study()方法执行完后出栈,随后main()方法执行完毕后出栈
两个引用指向同一个对象
指向的是该对象在堆内存中的地址
成员变量、局部变量的区别
基本数据类型:数据值是存在自己的空间中
引用数据类型:数据值是存储在其他空间中,自己空间中存储的是地址值
成员变量、局部变量的区别
[外链图片转存中…(img-k8kxrNHt-1711023732243)]
study()方法执行完后出栈,随后main()方法执行完毕后出栈
两个引用指向同一个对象
指向的是该对象在堆内存中的地址
成员变量、局部变量的区别
基本数据类型:数据值是存在自己的空间中
引用数据类型:数据值是存储在其他空间中,自己空间中存储的是地址值
成员变量、局部变量的区别