类与对象
1.对于面对对象的初步认知
1.1什么是对象
有人可能会想到象棋当中的“一对象”,还有的人可能会想到男女朋友的对象,然而这些都不是究竟对象是什么,让我们在接下来的介绍中去寻找答案吧
1.2什么是面对对象
面对对象指的是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。
1.3面对对象与面对过程
1.传统洗衣服过程
平时我们在洗衣服的过程中都会经历这么几个过程
按照最传统的方式:我们比较注重洗衣服的过程,少一个环节都不行,其实这种就是面对过程的思想
2.现代洗衣服过程
现在洗衣服经历的过程
面对对象的方式来进行处理,不关注洗衣服的过程,其实这种思想就是面对对象的思想
2.类定义和使用
2.1类的定义
class ClassName {
field;// 成员变量
method;// 成员方法
}
class为定义类的关键字,ClassName为类名,{ }中的为主体
例如,现在让我们来定义一个狗(Dog)类:
class Dog {
// 成员属性
public String name;//名字
public int age;
// 成员方法
public void eat() {
System.out.println("吃狗粮");
}
}
注意事项
- 类名要使用大驼峰
- 一般一个文件当中只定义一个类
- main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
- public修饰的类必须要和文件名相同
- 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改
3类的实例化
Dog dog = new Dog();
dog叫做Dog()类实例化出来的对象
注意事项
- new 关键字用于创建一个对象的实例
- 使用 . 来访问对象中的属性和方法
- 同一个类可以创建多个实例
3.1访问成员属性和方法
class Dog {
// 成员属性
public String name;//名字
public int age;
// 成员方法
public void eat() {
System.out.println("吃狗粮");
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
System.out.println(dog.name);
dog.eat();
}
}
4.this引用
public class Date {
public int year;
public int month;
public int day;
public Date() {
this(2022,7,16);
System.out.println("不带参数的构造方法");
}
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
System.out.println("带参数的构造方法");
}
public void PrintDate() {
System.out.println(year+" 年 "+month+" 月 "+day+" 日 ");
}
public static void main(String[] args) {
Date a = new Date();
a.PrintDate();
}
}
this引用的出现就是为了防止,形参名不小心与成员变量名相同
注意
- this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
- this只能在"成员方法"中使用
- 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
5.构造方法
构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次
按住Ctrl进行多选
注意:构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。
5.1无参构造方法
public Dog() {
this.name = "小黑";
this.age = 4;
}
5.2构造方法的特性
- 名字必须与类名相同
- 没有返回值类型,设置为void也不行
- 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
- 构造方法可以重载(可以根据自己的需求去提供不同的构造方法)
上述两个构造方法:名字相同,参数列表不同,因此构成了方法重载。
如果没有定义构造方法,那么编译器会生产一份默认的构造方法,且生成的默认构造方法一定是无参的
public Dog() {
}
5.3默认初始化
在创建成员变量是,编译器就自动为成员变量设置好了初始值,比如:
数据类型 | 默认值 |
---|---|
byte | 0 |
char | ‘\u0000’ |
short | 0 |
int | 0 |
long | 0L |
boolean | false |
float | 0.0f |
double | 0.0 |
reference | null |
5.4就地初始化
在声明成员变量时,就直接给出了初始值。