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{
//什么都不用写,就能把父亲的内容复制一份出来。
}