当先锋百科网

首页 1 2 3 4 5 6 7

Day_08 构造方法与this关键字

一.构造方法
1.定义:构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的创建或者对象的初始化。当实例化一个对象时会自动调用构造方法。构造方法和其他方法一样可以重载。

二.构造方法创建对象

public class Construct {

	public static void main(String[] args) {
		
		Test t = new Test();
		
		t.eat();
		
		Test t2 = new Test("Yan");
		System.out.println(t2.name);

	}

}

class Test{
	
	String name;
	
	public void eat() {
		
		System.out.println("吃");
		
	}
	
	public Test() {}//无参构造
	
	public Test(String n) {//含参构造
		
		name = n;
		
	}
	
}

三.构造方法赋值

public class Construct_Value {

	public static void main(String[] args) {
		
		Text t1 = new Text();
		System.out.println(t1.name);
		System.out.println(t1.age);
		
		Text t2 = new Text("Yan Dexuan",24);
		System.out.println(t2.name);
        System.out.println(t2.age);
        
	}

}

class Text{
	
	String name;
	int age;
	
	public Text() {}
	
	public Text(String name,int age) {
		
		this.name = name;//局部变量的值赋给成员变量。
		this.age = age;
		
	}
	
}

四.构造代码块
1.位于类的内部,方法的外部。
2.通常用于抽取构造方法中的共性代码。
3.每次调用构造方法前都会调用构造代码块。
4.优先于构造方法加载。

五.局部代码块
1.位于方法中。
2.通常用语控制变量的作用范围,在括号外无效。
3.变量范围越小越好,成员变量会有线程安全问题。
4.执行顺序:构造代码块-局部代码库(顺序执行)

六.代码块加载顺序

public class Construct_Code {

	public static void main(String[] args) {
		
		Student s = new Student();
		
		s.init();
		
		s.init2();

	}

}

class Student{
	
	{
		System.out.println("构造代码块");//构造代码块
	}
	
	public void init() {
		
		System.out.println("局部代码块");//局部代码块
		
	}
	
	{
		System.out.println("第二个构造代码块");
	}
	
	public void init2() {
		
		System.out.println("第二个局部代码块");
		
	}
	
}

七.this关键字
1.定义:this代表本类对象的一个引用对象,在构造函数中,this()必须放在第一行。
2.作用:局部变量的值赋给成员变量。原意是使Student.name = name,写成this.name = name。

八.当局部变量和成员变量相同时

public class Construct_this {

	public static void main(String[] args) {
		
		Animal a = new Animal();
		
		a.run("大黄");
		System.out.println(a.name);
		
	}

}

class Animal{
	
	String name;
	
	public void run(String name) {
		
		this.name = name;//当局部变量的名字和成员变量同名时,通过this调用成员变量。
		                 //将局部变量的值赋给成员变量,再输出成员变量。
		
	}
	
}

九.构造方法之间的调用

public class Construct_Method {

	public static void main(String[] args) {
		
		Animal1 a1 = new Animal1();

	}

}

class Animal1{
	
	String name = "Yan";
	
	public Animal1() {
		
		this("来福");//调用本类中的含参构造。
		System.out.println(name);
		
	}
	
	public Animal1(String name) {//被调用,因此先一步执行。
		
		System.out.println(name);
		
	}

}

十.继承
1.定义:继承是从已有的类中派生出新的类,新的类能够吸收已有的类的数据的属性和行为,并拓展新的能力,Java继承是使用已存在的类的定义作为基础建立新的类的技术。新的类可以增加新的数据或者新的功能,也可以用父类的功能,但是不能选择性的继承父类。

2.优点:这种技术复用以前的代码变得非常容易,能够大大缩短开发周期,降低开发费用。

3.特点
<1>使用extends关键字。
<2>相当于子类把父类的功能复制了一份。
<3>java只支持单继承。
<4>继承可以传递。
<5>不能继承父类的私有成员。
<6>继承多用于功能的修改。

十一.简单继承案例

public class Extend {

	public static void main(String[] args) {
		
		Son s = new Son();
		
		s.speak();
		
		System.out.println(s.skin);
		System.out.println(s.address);

	}

}

class Father{
	
	String skin = "黄种人";
	String address = "成都";
	
	public void speak() {
		
		System.out.println("说话");
		
	}
	
}

class Son extends Father{
	
	//什么都不用写,就能把父亲的内容复制一份出来。
	
}