- 在Java中,创建对象的格式为:
类名 对象名 = new 类名();
如:
1 JFrame jf = new JFrame();
- 一个对象被创建出来时,经常要先做一些事这个对象才能正常使用,也可以说是准备工作,比如给这个对象赋些初始值,或者先运行一些别的方法。这时候就需要一个“构造器”用于:
- 构造对象
- 初始化属性
这样,把那些在创建时要做的事写在构造方法里,每次创建就会被执行一遍。
- 我们常见的一种Java格式:
- public 返回类型 方法名(参数){ }
- 如:
1 public void study(){}
- 这在Java中称为“方法”。
- 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。
- Java中“构造器”,在C语言中一般称之为“构造函数/构造方法”。
- 其定义格式:
- public 类名 () { }
- 文件名:Teacher.java
-
1 public class Teacher { 2 String name; 3 4 //构造方法,构造对象的时候执行 5 public Teacher(){ 6 System.out.println("执行了老师类的构造方法"); 7 } 8 public Teacher(String n){ 9 name = n; 10 } 11 12 //方法重载 13 public void teach(int a){ 14 System.out.println("执行教学方法1"); 15 } 16 public void teach(){ 17 System.out.println("执行教学方法2"); 18 } 19 public void teach(String n){ 20 System.out.println("执行教学方法3"); 21 } 22 public void teach(String n,int a){ 23 System.out.println("执行教学方法4"); 24 } 25 public void teach(int a,String n){ 26 System.out.println("执行教学方法2"); 27 } 28 }
- 文件名:Test.java
-
1 import javax.swing.JFrame; 2 3 public class Test { 4 public static void main(String[] args) { 5 //创建对象,调用构造方法 6 Teacher tea = new Teacher("李四"); 7 8 9 Teacher tea1 = new Teacher(); 10 tea.name = "张三"; 11 tea1.name = "李四"; 12 tea = tea1; 13 tea1.name = "王五"; 14 15 System.out.println(tea.name); 16 System.out.println(tea1.name); 17 18 } 19 }
- 虽然是以“public 类名 (){ } ”的形式存在构造器中,不像创建对象有返回值类型(比如“void”),但其将返回一个内存地址。
- 在内存中,存储数据分为栈和堆。
- 栈存储变量,堆存储对象,其都有相应的内存地址。在执行构造器时,对数据进行初始化属性,相当于把对象的各项数据(所有的)存储到内存单元中,变量(如“tea”、“张三” )存到栈中,对象(如“name”、“Teach” )存到堆中。
- 上文“Test.java”的运行结果是输出:tea存入栈,name“张三”存入堆,都有自己的内存地址。
- “王五
- 王五”
- 执行 “tea = tea1”时,相当于把tea1的内存地址复制给tea,tea指向的内容将全部变成tea所指向的内容,所以运行结果是两个“王五”。
- 在“Test.java”中,作为主函数 调用构造方法 “Tecaher”(文件:Teacher.java),在执行一次“ new Teacher(); ”操作时,调用一次构造函数。
-
1 Teacher tea = new Teacher("李四");
-
上面可改写为:
1 Teacher tea; 2 tea = new Teacher("李四");
此处构造器“Teacher ”只调用一次,及“执行了老师类的构造方法”只打印一次。
- 文件名:Student.java
1 public class Student { 2 public String name; 3 public int age; 4 5 public void study(){ 6 System.out.println("学生学习"); 7 } 8 9 }
- 文件名:UnStudent.java
1 package com.huaxin.lesson0304; 2 3 public class UnStudent extends Student{ 4 5 }
- 如上,称为类的继承。
- 定义:子类继承父类的所有的非私有属性和方法
- 格式 : public class 子类名 extends 父类名{ }
- “UnStudent.java”大学生继承“Student.java”学生的非私有性属性。
- 即凡是Student学生所有的公共的,大学生都具备。