且将新火试新茶,诗酒趁年华
学习内容 构造器详解
//这里是Application.java
package com.joker_yue.javalearn.OOP;
public class Application {
public static void main(String[] args) {
//new 实例化了一个对象
//此时,在Person.java中只声明了Person类但是什么也没写
//一个类即使什么都不写,也会存在一个方法
//无参
Person person = new Person();
System.out.println(person.name);
//有参
Person xiaoMing = new Person("小明");
System.out.println(xiaoMing.name);
}
}
//这里是Person.java
package com.joker_yue.javalearn.OOP;
public class Person {
//一个类即使什么都不写,也会存在一个方法
String name;
//实例化初始值
// 显式的定义构造器
//作用:
//1. 使用new关键字,本质是在调用构造器
//2. 用来初始化值
public Person(){
this.name = "Joker_Yue";
}
//有参构造:一旦定义了有参构造,无参构造必须显式定义(写出来)
public Person(String name){
this.name = name;
}
}
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化 以及对 类中构造器的调用
类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
1. 必须与类的名字相同 2. 必须没有返回类型,也不能写void
创建对象内存分析
//这里是Application.java
package com.joker_yue.javalearn.OOP;
public class Application {
public static void main(String[] args) {
Pet dog = new Pet();
dog.name = "旺财";
dog.age = 3;
dog.shut();
}
}
//这里是Pet.java
package com.joker_yue.javalearn.OOP;
public class Pet {
String name;
int age;
//无参构造
public void shut(){
System.out.println("你在狗叫什么!");
}
}
-
加载Application类
main()
常量池:旺财
-
main()方法执行
加载Pet类模板(都是默认值):name,age,shut() -
生成Dog对象(引用或者对象名)
new了一个对象为Dog,其实先在堆上开辟空间,再用引用指向Dog变量(对象)
创建dog后,系统会先对属性初始化,赋予初始值,然后后面才是用户自己调用函数来修改这些属性的值。
总结:new方法,先在堆上开辟空间,再用引用指向。随后加载调用类,将调用类的方法引入,引入的类中的方法都没有进行赋值,类生成的实例对象名(引用)放在栈中,真正生成对象各个赋值变量位于堆中
类与对象小结
-
类与对象
类是一个模板:抽象
对象是一个具体的实例
-
方法
定义、调用!
-
对应的引用
引用类型: 基本类型
对象是通过引用来操作的:栈–>堆
-
属性
字段Field 成员变量
默认初始化:
- 数字:0;0.0
- char:‘u0000’
- boolean:false
- 引用:null
修饰符 属性类型 属性名 = 属性值!
-
对象的创建和使用
-
必须使用new关键字创造对象,构造器 Person jk= new Person();
-
对像的使用:jk.name;
-
对象的方法: jk.sleep();
-
类
静态的属性 属性
动态的行为 方法
封装、继承、多态



