1.面向对象的初步认知
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人 们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。
面向过程与面向对象
面向过程编程:更关注过程,少了一个环节可能都不行;按照该种方式来写代码,将来扩展或者维护起来会比较麻烦。
面向对象编程:对象之间的交互来完成的。其更关注对象(找对象,创建对象,使用对象)。
2. 类定义和使用
面相对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机。但是洗衣机计算机并不认识,需要 开发人员告诉给计算机什么是洗衣机。
上图左侧就是对洗衣机简单的描述,该过程称为对洗衣机对象(实体)进行抽象(对一个复杂事物的重新认知),但是 这些简化的抽象结果计算机也不能识别,开发人员可以采用某种面相对象的编程语言来进行描述,比如:Java语 言。
2.1 简单认识类
类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干 啥),描述完成后计算机就可以识别了。那在Java语言中,如何对上述的洗衣机类来进行定义呢?
2.2类的定义格式
在java中定义类中,class为定义类的关键字,WashMachine为类的名字,{}中为类的主体。类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类 具有哪些功能,称为类的成员方法。 采用Java语言将洗衣机类在计算机中定义完成,经过javac编译之后形成.class文件,在JVM的基础上计算机就可以 识别了。
注意事项
类名注意采用大驼峰定义
成员前写法统一为public
此处写的方法不带 static 关键
public class WashMachine {
//洗衣机的属性(成员变量)
public String brand;// 品牌
public String type; // 型号
public double weight; // 重量
public double length; // 长
public double width; // 宽
public double height; // 高
public String color;// 颜色
//洗衣机的功能(成员方法)
public void washClothes(){ // 洗衣服
System.out.println("洗衣功能");
}
public void dryClothes(){ // 脱水
System.out.println("脱水功能");
}
public void setTime() { // 定时
System.out.println("定时功能");
}
}
注意事项:
1. 一般一个文件当中只定义一个类。
2. main方法所在的类一般要使用public修饰。
3. public修饰的类必须要和文件名相同。
4. 不要轻易去修改public修饰的类的名称。
3. 类的实例化
3.1 什么是实例化
用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。
Dog dog=new Dog();
class Dog{
public String name;
public int age;
public void dark(){
System.out.println("正在汪汪叫....");
}
}
public class WashMachine {
public static void main(String[] args) {
Dog dog = new Dog();
System.out.println(dog.name);
System.out.println(dog.age);
}
}
让我们的代码跑起来看看...
结果发现我们的对象为空值。为什么呢?原来我们没给对象初始化
接下来我们给对象初始化
跑起来之后的代码为
注意事项
new 关键字用于创建一个对象的实例.
使用 . 来访问对象中的属性和方法.
同一个类可以创建对个实例.
3.2 类和对象的说明
1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.
2. 类是一种自定义的类型,可以用来定义变量.
3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
4. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东 西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空 间
4 . this 引 用
public class Date {
public int year;
public int month;
public int date;
public void setDate(int y,int m,int d){
year=y;
month=m;
date=d;
}
public void Print(){
System.out.println(year+"年"+month+"月"+date+"日");
}
public static void main(String[] args) {
Date date1=new Date();
date1.setDate(2010,1,3);
date1.Print();
Date date2=new Date();
date2.setDate(2011,1,3);
date2.Print();
Date date3=new Date();
date3.setDate(2012,1,3);
date3.Print();
}
}
当我们把setDate方法中的形参和成员变量改为同名时,我们发现其并为赋值,那为什么呢?
原因:在setDate方法内,year,month,date,都是局部变量,此时局部变量优先使用。
那我们该如何解决呢?答:加this关键字
4.1this的特性
1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
2. this只能在"成员方法"中使用
3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法 对象的引用传递给该成员方法,this负责来接收
5. 对象的构造及初始化
5.1 构造方法
5.1.1 概念
构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次。
注意:构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。
5.1.2 构造方法的语法
方法名(形参列表){
方法体;
}
5.3 默认初始化
1. 检测对象对应的类是否加载了,如果没有加载则加载
2. 为对象分配内存空间
3. 处理并发安全问题
4. 初始化所分配的空间 即:对象空间被申请好之后,对象中包含的成员已经设置好了初始值,比如:
5. 设置对象头信息
6. 调用构造方法,给对象中各个成员赋值