栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java08--构造方法+构造代码块和局部代码块+this

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java08--构造方法+构造代码块和局部代码块+this

Java08--构造方法+构造代码块和局部代码块+this
  • 1 构造方法
    • 1.1 概念
    • 1.2 形式
    • 1.3 练习1:构造方法创建对象
    • 1.4 练习2:构造方法赋值
  • 2 构造代码块和局部代码块
    • 2.1 构造代码块
    • 2.2 局部代码块
    • 2.3 练习1:代码块加载顺序
  • 3 this 关键字
    • 3.1 概念
    • 3.2 形式
    • 3.3 练习1:当变量名相同时
    • 3.4 练习2:构造方法间的调用

1 构造方法 1.1 概念

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

构造方法和其他方法一样也可以重载。

1.2 形式

可以无参也可以有参

修饰符  类名(【参数】){

       代码……

}
1.3 练习1:构造方法创建对象

创建对象时的两种方法

package day006;
public class Test2_构造方法 {
       String name;
//当存在一个含参的构造方法时,无参构造将不再自动生成...    
//public Test2_构造方法(){}

              //含参构造
       public Test2_构造方法(String n){
              name=n;
       }
       void eat(){
              System.out.println("Test2_构造方法.eat()");
       }
}
class tt{
       public static void main(String[] args) {
//注释掉无参的构造也可以运行,说明系统会自动提供一个无参的构造方法
              Test2_构造方法 t2 = new Test2_构造方法();
              t2.eat();        
//t是引用变量,引用的是对象的地址值。
              //根据地址值找到对象,并获取对象的数据
              Test2_构造方法 t = new Test2_构造方法("张三");
              System.out.println(t.name);
       }
}
1.4 练习2:构造方法赋值
package day006;
public class Test3_成员变量赋值 {
       String name;
       int age;
       //赋值方式1:通过含参构造方法赋值
       public Test3_成员变量赋值(String name,int age){
              this.name=name;
              this.age=age;
       }
       //赋值方式2:通过setXxx()方法赋值
       public void setName(String name){
              this.name=name;
       }
       public void setAge(int age){
              this.age=age;

       }
}

class Test3Demo{

       public static void main(String[] args) {

              //赋值方式1:通过无参构造方法赋值

              Test3_成员变量赋值 t1= new Test3_成员变量赋值();

              System.out.println(t1.name);

              System.out.println(t1.age);
             
              //赋值方式1.1:通过含参构造方法赋值

              Test3_成员变量赋值 t2= new Test3_成员变量赋值("zhangsan",30);

              System.out.println(t2.name);

              System.out.println(t2.age);

              //赋值方式2:通过setXxx()方法赋值

              Test3_成员变量赋值 t3= new Test3_成员变量赋值();

              t3.setName("rose");

              t3.setAge(25);

              System.out.println(t3.name);

              System.out.println(t3.age);

       }

}
2 构造代码块和局部代码块 2.1 构造代码块

1、 在类的内部,方法外部,的代码块。

2、 通常用于抽取构造方法中的共性代码。

3、 每次调用构造方法前都会调用构造代码块

4、 优先于构造方法加载

class c{
       String country;
       {
              country="中国";
       }
       public c() {
              System.out.println("1号选手,来自"+country);
       }
       public c(int a) {
              System.out.println("2号选手,也来自"+country);
       }
}
2.2 局部代码块

1、 在方法里面的代码块

2、 通常用于控制变量的作用范围,出了括号就失效

3、 变量的范围越小越好,成员变量会有线程安全问题

4、 总结:执行顺序:

构造代码块是最优先的,局部代码块顺序执行

2.3 练习1:代码块加载顺序
package day99999;
public class TT {
       public static void main(String[] args) {
              Student s = new Student();
              s.init();
       }
}

class Student{
       {
              System.out.println("构造代码块1");
       }
       public void init(){
              {
                     System.out.println("局部代码块");

              }
       }
       {
              System.out.println("构造代码块2");
       }
}
3 this 关键字 3.1 概念

this代表本类对象的一个引用对象。

构造函数中,this()必须放在第一行。

3.2 形式
//name=name;

//age=age;

其实是想把Student类的局部变量name的值赋值给成员变量,相当于你想操作是这样的:

//Student.name=name;

但是你不能直接写类名,这时候就用代表本类的对象this来完成。代码变成了:

this.name=name;
3.3 练习1:当变量名相同时

当局部变量和成员变量同名时,用于区分。

如果附近有同名变量,会遵从变量的就近原则,那么怎么调用成员变量呢?

package day99999;
public class T {
       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){

//name=name;//变量的就近使用原则,这样用的都是最近的也就是一直在用局部变量的

              this.name=name;//this调用成员变量

       }

}
3.4 练习2:构造方法间的调用
package day99999;
public class T {
       public static void main(String[] args) {
              Animal a = new Animal();

//           Animal a2 = new Animal("旺财");
       
       }
} 
class Animal{
       public Animal(){
              this("来福");//调用本类中的含参构造
              System.out.println(name);
       }

      
       public Animal(String name){
              System.out.println(name);
       }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号