面向对象学习的三条主线
1.java类及成员变量;类的成员:属性、方法,构造器、代码块,内部类
2.面向对象的三大特征:封装性、继承性、多态性
3.其他关键字:this super static final abstract interfae package import
一、面向对象:简言之,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做;
1.在Java语言范畴中,我们将功能、结构等封装到类中,通过实例化来调用具体的功能结构;
2.涉及到java与前端语言,后端的数据库交互时,前后端的结构在Java层面交互,都体现为类、对象;
① 面向对象和面向过程的区别: 例如:人把大象装冰箱
面向过程:1.把冰箱门打开 2.抬起大象 3.塞进冰箱 4.关闭冰箱门
面向对象:创建3个类:人、大象 冰箱;
人: 打开和关闭冰箱门 和抬起大象;
大象: 进入冰箱,
冰箱:有打开 和关闭
人{
打开(冰箱门){
冰箱.开开()
}
抬起(大象){
大象.进入(冰箱)
}
关闭(冰箱门){
冰箱。关闭()
}
}
冰箱{
开开(){
}
关闭(){
}
}
大象{
进入(冰箱){
}
}
二、类和对象的区别:
①类:对事物的描述 是抽象的、概念上的定义;比如 人;
②对象:是实际存在的该类事务的每个个体(即 在内存中存在的,占据内存空间) 因而也称为实例(instance) 比如 小明;
1.面向对象程序设计,重点是类的设计
2.设计类,就是设计类的成员
3.如果创建了一个类的多个对象,每个对象独立的拥有类的属性;(非static)意味着,如果修改一个对象的属性a,则不影响另外一个属性a的值
三、 类和对象的使用
1.创建类,设计类的成员
2.创建类的对象
3.通过对象 对象.属性 对象.方法 调用对象的结构
1 //人的一个类 2 class Person{ 3 //属性(成员变量)field 4 String name; 5 int age = 1; 6 boolean isMale; 7 //方法(成员方法)method 8 public void eat() { 9 System.out.println("人可以吃饭"); 10 } 11 12 public void talk(String lanuage) { 13 System.out.println("人可以说话,使用"+lanuage+"语言。"); 14 } 15 }
1 //使用类 创建类的实例化 2 public static void main(String[] args) { 3 //使用类 4 Person person = new Person();//创建对象 5 person.name = "tom";//调用属性 6 person.isMale = true; 7 System.out.println(person.name); 8 person.talk("中文");//方法的调用 9 10 Person person1 = new Person();//创建对象 11 System.out.println(person1.name); 12 13 Person person2 = new Person();//创建对象 14 person2 = person;//将person对象的地址值赋值给了person2; 15 System.out.println(person2.name); 16 person2.age = 10; 17 System.out.println(person.age); 18 19 }
对象的内存解析:
四、 类中属性的使用:
属性(成员变量) vs 局部变量
1.相同点:定义变量的格式;都有对应的作用域;先声明后使用;
2.不同点:
2.1在类中声明的位置不同
2.2属性直接定义在类的一对{}中;局部变量:声明在方法内,方法形参 构造器形参,构造器局部变量
2.3权限修饰符:可以在声明属性时,指明权限修饰符,常用修饰符:private public 缺省 protected 局部变量 不可以使用权限修饰符;
2.4 默认初始化值,类的属性根据其类型都有默认初始化值(整型(byte short int long)默认0;char 默认 0 浮点型 0.0,Boolean false 引用数据类型 (对象 数组 接口):null);局部变量没有默认初始化值;
局部变量没有默认初始化值,必须赋值;形参在调用的时候赋值;
五、类中方法的使用
方法:类应该具有的功能;比如 Math.random();Arrays.sort();....
public void eat() {
System.out.println("人可以吃饭");
}
public void talk(String lanuage) {
System.out.println("人可以说话,使用"+lanuage+"语言。");
}
public String getName(){}
1.1方法的声明:
权限修饰符 返回值类型 方法名(形参列表){
方法体
};
1.1.1 权限修饰符 private public 缺省 protected
1.1.2 返回值类型 有返回值、没有返回值;
①若有返回值,在声明时需要指定返回值类型,在方法中使用return 返回指定类型的变量or常量
②若方法没有返回值,则方法声明时使用void来表示,通常没有返回值的方法中,就不用return返回;如果只用 只能 "return;"表示结束此方法;
1.1.3 我们定义方法该不该有返回值?凭经验;
1.1.4方法名 属于标识符;需要遵循标识符规范;
1.1.5 形参列表:方法可以声明0个 1个或者多个形参;格式:数据类型1 形参1,数据类型2 形参二;
1.1.6 方法体:方法功能的体现;
补充:
编译后生成字节码文件,我们使用jvm中的类的加载器和解释器对生成的字节码文件进行解释运行;意味着,需要将字节码文件对应的类加载到内存中,才涉及到内存解析。
虚拟机栈 即平时说的栈,我们将局部变量存储在栈结构中;堆:我们将new出来的结构存放在堆空间中 比如 数组,对象(这里指的是非static)。
方法区:类的加载信息,常量池,静态域