类和对象
作者:互联网
类与对象
类
类 = 方法 + 属性
类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。
Person类 Car类 这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为。
对象
对象是抽象概念的具体实例
能够体现出特点,展现出功能的是具体的实例,不是一个抽象的概念。
对象是具体的事物,类是抽象的,是对对象的抽象,类是对象的模板。
创建与初始化对象
使用new关键字创建对象
- 使用new关键字创建对象的时候,会给对象分配默认的值和内存空间*。
代码演示
构造器(构造方法)
- 使用new关键字创建对象的时候,还会对类中构造器进行调用(new一个对象,本质是在调用构造器)
构造器也称为构造方法,是在进行创建对象的时候必须要调用的。
构造器(构造方法)有两个特点:
- 必须和类的名字相同(大小写也相同)
- 必须没有返回类型,也不能写void(返回类型为空)
代码演示构造器
第一步
创建一个Person类 ,创建一个启动器类Application类
public class Person{
//public Person(){} 一创建Person类 ,这个Person()构造方法其实就存在了!只不过没显示出来。可以看编译后的class文件。
//Person类中的Person(){}是构造方法
}
/*
* 看完class文件后,得出结论:
* 一个类即使什么都不写,也会存在一个方法(构造方法)。
* 这个构造方法 的名字 跟类的名字一模一样(大小写也一样)
* 这个构造方法 没有返回值,也没有void
* 这个默认存在的Person()构造方法是 无参构造(没有参数)
* */
---------------------------------------------------------------------------------
public class Person{
//我们可以人为让这个默认存在的构造方法显示出来
//
public Person(){
}
}
public class Application{
new Person();
//使用new关键字实例化了一个person对象
Person person = new Person();
/*
//Person类现在是空的,但是还可以new出来一个Person()方法 为什么呢?
原因:Person()方法在Person类中其实是存在的!只不过没显示出来。
正因为Person()方法是存在的,我们才能通过new关键字来实例化类,才能创建对象
(即Person person = new Person();)
*/
}
第二步
public class Person{
//定义一个name属性/字段
String name;
}
public class Application{
new Person();
//使用new关键字实例化了一个person对象
Person person = new Person();
//此时没有使用构造器实例化初始值 输出为null
System.out.println(person.name);//null
}
第三步
public class Person{
//定义一个name属性/字段
String name;
//构造方法作用一:实例化初始值
public Person(){
this.name = "小明";
}
}
public class Application{
new Person();
//使用new关键字实例化了一个person对象
Person person = new Person(); //debug看出 ,进入构造器,构造器走完 其实才生成对象
//此时使用构造器实例化初始值 输出为小明
System.out.println(person.name);//小明
}
第四步(用有参干掉无参)
public class Person{
//定义一个name属性/字段
String name;
//无参构造器
public Person(){
//this.name = "小明";
//定义了有参构造方法之后,要用无参构造的话,无参必须要显示定义,无参默认空着就行。
}
//有参构造器 (一旦定义了有参构造,要用无参构造的话,无参构造必须显示定义)
public Person(String name){
this.name = name;
//this.name中的name代表对象本身的name
//= 右边的name 代表参数传递下来的name!
}
}
定义了有参构造之后,在Application类里若什么都不传值,则还是默认null(String类型默认null)。
public class Application {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);//输出null
}
}
定义了有参构造之后,若在Application类里传递值,则输出值
public class Application {
public static void main(String[] args) {
Person person = new Person("123456");
System.out.println(person.name);//输出123456
}
}
debug可看出,走Person person = new Person("123456");语句时,会跟随参数判断走哪个方法。
(没传参数,就走无参方法,传了参数,就走相应的有参方法(方法重载))
构造器的作用总结
-
使用new关键字,必须要有构造器。new一个对象,本质是在调用构造器
-
有参构造器 (一旦定义了有参构造,无参构造必须显示定义,一般无参构造方法里面默认空着就行)
若没有显示定义无参构造,若用无参构造的话则无效或报错
构造器(构造方法)作用一:new一个对象,本质是在调用构造器
构造器(构造方法)作用二:使用构造器实例化初始值。
IDEA生成构造器快捷键
生成有参构造器的前提时定义了类变量
Alt + Insert 选择Constructor 选择属性(什么都不选就生成无参构造器,选择属性就生成有参构造器)
或者右键 Generate 选择Constructor 选择属性
构造器总结
1.构造器方法名和类名相同
2.没有返回值
作用:1. new本质在调用构造方法
2.初始化对象值
注意点:
-
类创建后,即使什么也不写,也会默认有一个无参构造方法。(没有这个无参构造器,new是new不出阿来的)
-
定义有参构造后,如果想使用无参构造,则显示的定义一个无参构造(不用无参的话,可以不显示定义无参构造)
IDEA生成构造方法快捷键Alt + Insert
标签:无参,name,构造方法,对象,构造,Person,new 来源: https://www.cnblogs.com/intelliyu/p/16056202.html