007—JAVA中的赋值方式

本文详细介绍了Java中对象的初始化方式,包括默认值、显示赋值、构造器赋值以及代码块的使用。强调了构造代码块和静态代码块的作用、执行顺序以及注意事项。通过实例展示了如何在类中定义和调用这些代码块,并探讨了权限修饰符`protected`在不同包下的可见性规则。
摘要由CSDN通过智能技术生成

1.默认值
2.显示赋值
3.构造器赋值
4.对象名.属性名/对象名.方法名()
5.代码块赋值
  {}
  成员代码块/构造代码块
  静态代码块

构造代码块/ 成员代码块:

   位置: 类中方法外
   作用: 给成员变量赋值
   声明方式: {}
   执行顺序: 先从上到下依次执行代码块 执行完毕再执行 构造器
              一个类中可以存在多个代码块(先代码块后构造器)

   注意:
    1.创建几次对象 构造代码块就会执行几次

    2.代码块有作用域限制 在代码块内声明的变量 只能在代码块内部使用

    3.成员代码块可以使用静态资源

 

 Debug调试

public class Person {
    String name = "张三";
    {
//        name = "李四";
        System.out.println("构造代码块1");
    }

    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }

    public void show(){
        System.out.println("name =" + name);
    }


    {
        System.out.println("构造代码块2");
    }
}
public class Test {
    public static void main(String[] args) {

        Person person = new Person("李四");
        System.out.println(person.name);

    }
}

静态代码块:
    位置: 类中方法外
    声明: static {}
    作用:给静态成员变量赋值

注意:
    1.无论创建多少次对象  静态代码块只会执行一次

    2.有作用域限制

    3.静态代码块只能直接使用静态资源

 

public class Person {

    static String country = "中国";

    int age = 30;

    static {


        country = "china";

        System.out.println("静态代码块   1");

        int m = 20;

        System.out.println("m = " + m);
    }

    public Person() {

        System.out.println("无参");
    }

    public static void show() {
        System.out.println(country);
    }

    static {
        System.out.println("静态代码块   2");


    }

}
public static void main(String[] args) {


        //Person.show();

        new Person();

        System.out.println("-----");

        new Person();

    }

 protected权限修饰符,意思是不同包下的子类可见,但是并不代表不同包下的子对象可见

package com.atguigu.protected1;

public class Person {

    protected String name = "Person";

}
package com.atguigu.review;

public class TestStudent {
    public static void main(String[] args) {
        Student s1 = new Student();
//        System.out.println(s1.name);
        s1.show();
//        s1.name
    }
}
package com.atguigu.review;

import com.atguigu.protected1.Person;

public class Student extends Person {
 /*
    protected 不同包下子类可见
     */
//    String name = "梨花";
    public void show(){

        System.out.println(name);
    }
}
package com.atguigu.protected1;

import com.atguigu.review.Student;

public class Test {
    public static void main(String[] args) {
        Person p = new Person();

        System.out.println("p.name = " + p.name);

        Student student = new Student();
//        System.out.println(student.name);
    }
}

测试的话 需要注意包名,person和student是位于两个不同的包下的。在测试类中new一个student对象是看不到父类中的name的,但是在student类中的方法中可以看到父类中的属性name。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值