目录
1.类
1.1类的初步认识
个人对于类的初步理解,类是对一种对象的描述,描述其属性和功能
像是:一个类为‘猫’,猫的毛色,眼睛的颜色,毛发长度,姓名,性别就是其属性,吃,跑,跳是一种行为(功能)。这些被一个类所包含在内
1.2类的定义格式
// 创建类
class ClassName{
field; // 字段(属性) 或者 成员变量 定义在类内,方法外
method; // 行为 或者 成员方法
}
class为类的关键字
创建举例:
class Cat{
//类的属性
String hairColor;
String name;
int age;
String breed;
//类的成员方法
public void eat(){
System.out.println(name + " is eating.");
}
}
注意事项:
- 一般一个文件当中只定义一个类
- main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
- public修饰的类必须要和文件名相同
1.3类的实例化
当我们定义一个类后,就相当于创建了一个类型,像是int类型,int[]类型。我们同样的可以去使用这个类来定义”对象“。
用类创建一个对象的过程,就称为类的实例化。
像定义一个数组,
int[] arr = new int[5]; //就创建了一个长度为5的数组
我们也可以使用new关键字来搭配,通过相应的类来创建对象。
class Cat{
//类的属性
String hairColor;
String name;
int age;
String breed;
//类的成员方法
public void eat(){
System.out.println(name + " is eating.");
}
}
public class Test{
public static void main(String[] args){
Cat cat = new Cat();
cat.hairColor = "white";
cat.name = "dudu";
cat.age = 1;
cat.breed = "Chinese garden cat";
cat.eat();
}
}
注意事项:
- 我们可以用new关键字来创建一个对象
- 通过‘.’来引用对象中的属性或方法
- 可以通过一个类来创建多个对象(即猫只是一个统称,却有许许多多不同的猫咪)
1.4类和对象的说明
我们创建出的类,像是一种类型。较为抽象的,但一当实例化创建出一个对象就会实际占用存储空间。
2.this
2.1什么是this
this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。
2.2为什么要使用this
请看下面一段代码
class Cat{
//类的属性
String hairColor;
String name;
int age;
String breed;
//类的成员方法
public void eat(){
System.out.println(name + " is eating.");
}
public void setAge(int age){ //注意看这
age = age;
}
}
public class Test {
public static void main(String[] args){
Cat cat = new Cat();
cat.hairColor = "white";
cat.name = "dudu";
//cat.age = 1;
cat.breed = "Chinese garden cat";
cat.eat();
cat.setAge(1);
System.out.println(cat.age); //还有这
}
}
age打印结果却是0(对象没初始化的默认值),因为在下面一段代码中
public void setAge(int age){
age = age;
}
他只给和成员变量名相同的形参赋值了,并不是对象中的属性赋值,这样就会导致赋值失败。
2.3this的实例运用
public void setAge(int age){
this.age = age;
}
当我们使用this, 规定age是实例化过程中当前对象的成员变量,即指定一定明确要的是对象中的age变量不是其他的乱七八糟。此时我们可以发现可以成功赋值了。
2.4this引用的特性
- this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
- this只能在"成员方法"中使用
- 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
3.对象的构造及初始化
当我们在使用java的时候,方法内部定义一个局部变量的时候需要初始化,不然会编译出错。在上面提到过,初始化一个对象是以下的代码,但他们到底是怎么实现的呢?
Cat cat = new Cat();
3.1构造方法
构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
可能有人会想,既然要用到构造方法才能够初始化对象,但我们之前写一个类的时候并没有写上他的构造方法,那到底是怎么实现初始化的呢?
其实,如果在一个类中,用户没有自主的定义一个构造方法的话编译器会自动的生成一个不带参数的构造方法,这就是上面问题的原因。
class Cat{
//类的属性
String hairColor;
String name;
int age;
String breed;
//类的成员方法
public void eat(){
System.out.println(name + " is eating.");
}
//不带参数的构造方法 如果用户不写,则自动生成以下构造方法
public Cat(){
this.hairColor = null;
this.name = null;
this.age = 0;
this.breed = null;
}
//带参数的构造方法,在new的时候输入参数可以实现初始化
public Cat(String hairColor, String name, int aeg, String breed){
this.hairColor = hairColor;
this.name = name;
this.age = age;
this.breed = breed;
}
}
其实初始化对象就是初始化对象中的成员,会给他们默认的初始值。
但只要用户写了构成方法,编译器就不会自动生成一个默认的构造方法。即,你写了一个带参数的构造方法,那么目前这个类中仅有唯一一个用户写的构造方法,如果你还想要一个不带参数的构造方法只能自己去实现了。
构造方法也可以实现方法的重载噢。
3.2构造方法的特性
- 名字必须与类名相同
- 没有返回值类型,设置为void也不行
- 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
- 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法