对象与类
一、类
类是一种抽象的数据类型,它是对某一事物整体描述/定义,但是不能具体代表某一个具体的事物。对象是抽象概念的具体实例。
类的构造方法
构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的,构造方法分为有参构造方法和无参构造方法,区别就在于有没有参数。具体如下:
public class Demo01 {
public Demo01() { // 定义无参构造方法
System.out.println("无参构造方法");
}
public Demo01(String name) { // 定义有参构造方法
System.out.println("有参构造方法");
}
}
注意事项:
-
构造方法是一种特殊的方法。
-
每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。
-
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
-
没有返回类型,甚至连void也没有。
-
构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。
-
不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。
this关键字
this可以访问类中的成员变量,用来区分成员变量和局部变量(重名问题)。语法如下:
this.成员变量名称;
例:
public class Demo02 {
public String name; //定义成员变量name;
public Demo02() {}
public Demo02(String name) {
this.name = name; //第一个name指的是成员变量;第二个name指的是参数名称
}
}
this可以访问本类中的成员方法。语法如下:
this.方法名;
例:
public class Demo03 {
//定义一个方法a
public void a(){
System.out.println("hello");
}
//定义一个方法b
public void b(){
this.a(); //通过this调用方法a
}
public static void main(String[] args) {
Demo03 c = new Demo03(); //创建对象
c.b(); //调用方法b
}
}
this可以访问本类的构造方法。语法如下:
this();
注意:
- ()中可以有参数的 如果有参数 就是调用指定的有参构造
- this() 不能使用在普通方法中 只能写在构造方法中
- 必须是构造方法中的第一条语句
例:
public class Demo04 {
public String name;
public int age;
public Demo04() { // 定义无参构造方法
System.out.println("你好");
}
public Demo04(String name) { // 定义有参构造方法
this(); //调用本来的无参构造方法
this.name = name;
}
public Demo04(String name, int age) {
this(name); //调用本来的有参构造方法
this.age = age;
}
public static void main(String[] args){
//调用构造器,得到该类的实例对象
Demo04 s = new Demo04("Tom",20);
System.out.println(s.name + s.age);
}
}
二、对象
对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字 new 来创建一个对象。
- 初始化:使用 new 创建对象时,会调用构造方法初始化对象。
具体语法如下:
Test test = new Test();
Test test = new Test("abc");
实例如下:
public class Demo02 {
public String name;
public Demo02() {} // 定义无参构造方法
public Demo02(String name) { // 定义有参构造方法
this.name = name;
}
public static void main(String[] args){
//调用构造器,得到该类的实例对象
Demo02 s = new Demo02("good");
System.out.println(s.name);
}
}
当用户使用new操作符创建一个对象后,可以使用“对象.类成员”来获取对象的属性和行为。语法如下:
对象.方法名(); //调用方法对象.变量名; //调用变量
代码如下:
public class Demo05 {
public int i = 1314; //成员变量,即属性
public String j;
public Demo05() {} // 定义无参构造方法
public void say(){ //方法
System.out.print("祝你");
}
public static void main(String[] args){
//调用构造器,得到该类的实例对象
Demo05 s = new Demo05(); //创建对象
//调用方法
s.say();
//调用变量
System.out.println(s.i);
}
}
原理
程序调用构造器时,系统会先为该对象分配内存空间,并为这个对象执行默认初始化,这个对象就产生了。只是此时还不能被外部程序访问。当构造器的执行体执行结束后,这个对象作为构造器的返回值被返回,通常还会赋值给另一个引用类型的变量,从而让外部程序可以访问该对象。