从零开始学Java-Day07
构造函数
构造函数的最大作用:创建对象时完成初始化,当我们在new一个对象并传入参数的时候,会自动调用构造函数并完成参数的初始化。
package cn.tedu.oop;
//本类用于测试构造方法
public class TestConstructor {
public static void main(String[] args) {
Comic comic = new Comic("从零开始");
Comic comic2 = new Comic();
Comic comic3 = new Comic("青春","高木同学",24);
System.out.println(comic3.name);
}
}
/*默认存在一个无参的构造方法,当new Comic()创建对象时,会自动出发该类的无参构造方法*/
/*每次实例化创建对象时,都会自动调用构造方法*/
/*构造方法存在重载的现象*/
/*如果添加了含参构造方法,会覆盖无参构造,所以要手动添加无参构造*/
/*全参构造可以给所有的参数赋值*/
class Comic{
String type;
String name;
int series;
public Comic(){
System.out.println("这是一个构造方法");
}
public Comic(String a){
System.out.println("这是一个带参数的构造方法" + a);
}
public Comic(String type, String name, int series) {
this.type = type;
this.name = name;
this.series = series;
System.out.println("我时全参构造方法" + " " + type + " " + name + " " + series);
}
public void fans(){
System.out.println("亿万粉丝");
}
}
概念
构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法
构造方法的主要功能就是完成对象创建或者初始化
当类创建对象(实例化)时,就会自动调用构造方法
构造方法与普通方法一样也可以重载.
构造代码块和局部代码块
构造代码块
- 位置: 在类的内部,在方法的外部
- 作用: 用于抽取构造方法中的共性代码
- 执行时机: 每次调用构造方法前都会调用构造代码块
- 注意事项: 构造代码块优先于构造方法加载
局部代码块
- 位置: 在方法里面的代码块
- 作用: 通常用于控制变量的作用范围,出了花括号就失效
- 注意事项: 变量的作用范围越小越好,成员变量会存在线程安全的问题
package cn.tedu.oop;
//本类用于测试代码块的基本知识
public class TestBlock {
public static void main(String[] args) {
Person p = new Person();
Person p2 = new Person("体育");
p.job();
}
}
class Person{
String name;
{
name = "西片先生";
System.out.println("这是构造代码块");
}
public Person(){
System.out.println("无参的构造方法" + name);
}
public Person(String job){
System.out.println(name + "是教" + job + "的");
}
public void job(){
{
int i = 1;
System.out.println("局部变量" + i);
}
System.out.print(name);
System.out.println("他是一名体育老师");
}
}
this
代表本类对象的一个引用对象,用于引用成员变量。
可以实现构造方法间调用
- 必须放在构造函数内的第一行
- 而且只能写在一个构造方法内,不然会递归,无限调用。
package cn.tedu.oop;
//本类用于测试this
public class TestVariableThis1 {
public static void main(String[] args) {
House specialWeek = new House();
specialWeek.name = "specialWeek";
specialWeek.food();
}
}
/*this代表本类,局部变量和成员变量同名。可以用this.xxxx加以区分。*/
class House{
private double speed;
private double size;
private double height;
private double weight;
int food_sum = 10;
String food = "胡萝卜";
String name;
public void food(){
int food_sum = 100;
System.out.println("吃" + food_sum + "份甜点");
System.out.println("吃" + this.food_sum + "胡萝卜汉堡");
}
public void run(){
System.out.println("一马当先,万马无光!");
}
}
package cn.tedu.oop;
//本类用于this关键字测试
public class TestVariableThis2 {
public static void main(String[] args) {
Mumamusimi house = new Mumamusimi();
Mumamusimi house2 = new Mumamusimi("silencesiziha");
}
}
/*规定:想在构造方法中使用this关键字必须在第一行使用*/
class Mumamusimi{
String name;
String mother;
String father;
double speed;
int age;
public Mumamusimi(){
//this("无声铃鹿");
System.out.println("前方的景色绝不退让");
}
public Mumamusimi(String name){
/*在含参构造函数中调用this*/
this();
System.out.println(name + ":前方的景色绝不退让");
}
}
posted on 2021-06-08 18:35 无声specialweek 阅读(34) 评论(0) 编辑 收藏 举报