面向对象编程02:对象的创建与初始化、构造器(构造方法/构造函数)、创建对象内存分析、类与对象复习提纲
对象的创建与初始化
- 使用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();
-
类:
静态的属性: 属性
动态的行为: 方法
-
继承、封装、多态