对象的创建与初始化
- 使用new关键字创建对象
下面看一个使用new关键字创建对象的实例:
this指向本类
//学生类
public class Student {
//属性:字段
String name;
int age;
//方法
public void study( ) {
System.out.println(this.name +"在学习" );//this指向本类中
}
}
//一个项目只能存在一个main方法
public class Application {
public static void main(String[] args) {
//类:抽象的
Student xp = new Student();
Student xh = new Student();
xp.name = "XiaoPeng";
System.out.println(xp.name);
xp.age = 20;
System.out.println(xp.age);
}
}
输出结果:
XiaoPeng
20
- 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化 以及 对类中构造器的调用。
构造器(构造方法/构造函数)
类中构造器也称构造方法、构造函数,是创建对象时必须要调用的。并且构造器有以下特点:
- 必须和类同名
- 必须没有返回类型,也不能写void
- 创建构造器的语法格式:
- new初始化时先初始化构造器再new对象
//无参构造:
修饰符(如public)类名(){
//不能有return
}
//有参构造:
修饰符(如public)类名(形参列表){
//不能有return
}
-
IDEA中使用
Alt+Enter
可以快捷创建构造器 -
如果编写一个javaBean时没有添加无参构造方法,那么编译器会自动添加无参构造方法;
但是如果编写时添加了有参构造方法而未添加无参构造方法,那么编译器只认有参构造方法而不会默认添加无参构造方法!
所以,如果编写时添加了有参构造方法且仍需要使用无参构造方法时,一定要在类里面显式添加。
下面看Person
类的构造器创建及测试实例:
//.java----->.class
public class Person {
//一个类即使什么都不写,也会存在一个方法
//显式的定义构造器
String name;
int age;
//Alt + Insert 快捷创建构造器
//1.使用new关键字,必须要有构造器。new实例化的本质是在调用构造器
//2.用来初始化值
//无参构造
public Person() {
this.name = "AI";
}
//有参构造:一旦定义了有参构造,无参构造就必须显式定义
public Person(String name) {
this.name = name;
}
}
public class PerssonTest {
public static void main(String[] args) {
//实例化而一个对象
Person person = new Person();
Person person1 = new Person("Bi");
System.out.println(person.name);
System.out.println(person1.name);
}
}
输出结果:
AI
Bi
创建对象内存分析
public class Pet {
public String name;
public int age;
//无参构造
public void shout(){
System.out.println("叫了一声");
}
}
/**
public class Application {
public static void main(String[] args) {
Pet dog =new Pet();
dog.name = "旺财";
dog.age = 2;
dog.shout();
System.out.println(dog.age);
System.out.println(dog.name);
}
}
*
*/
以上代码的内存占用图如下:
类与对象复习提纲
-
类与对象:类是一个模板,对象是一个实例。
-
方法:定义、调用
-
对象的引用:
引用类型、基本类型(8)
对象是通过引用来操作的:栈---->堆
-
属性:字段Field 成员变量
默认初始化:
数字: 0 0.0
char : u0000
boolean: false
引用:null
语法格式:修饰符 属性类型 属性名 = 属性值!
-
对象的创建和引用
- 必须使用new关键字创建对象 Person xiaoming = new Person();
- 构造器
- 对象的属性:xiaoming.name、xiaoming.age
- 对象的方法:xiaoming.sleep();
-
类:
静态的属性: 属性
动态的行为: 方法
-
继承、封装、多态