类和对象(下)

封装

概念:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

访问限定符:private   protected   public

default(默认,相当于是没有输入任何访问限定符)

private

只能在同包中的同一类中使用

class Test {
    public int a;
    private int b;

    public void show() {
        Test test1 = new Test();
        test1.a = 1;
        test1.b = 2;
    }
}
public class Access {
    public static void main(String[] args) {
        Test test1 = new Test();
        test1.a = 30;
        test1.b = 20;
        System.out.println(test1.a);
    }
}

 如上代码,在Test类中 用public修饰 a 用private 修饰 b 方法show可以调用同类中的a 和 b,在Access类中 只能调用Test类中的 a,而不能调用 b, 因 b 用private修饰,只能在同包中的同一类中使用。

static成员

在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对

象,是所有对象所共享的。

static修饰的成员变量,称为静态成员变量。

静态成员变量特性:

1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中

2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问

3. 类变量存储在方法区当中

4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

如图,在TestStatic类中 ,我们定义了name、age、classRoom 三个变量,但是我们在实例化对象student1的时候输入 “student.” 只自动弹出了age 和 name 并没有弹出classRoom对象,但是如果我们手动输入student1.classRoom的时候,将它输出也是可以的(不建议这样,同特性2)。

建议使用类名+"."+变量名。

运行结果相同 建议使用第二种方式输出。

静态成员方法

Java中,static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。

静态方法特性:

1. 不属于某个具体的对象,是类方法

2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者

3. 不能在静态方法中访问任何非静态成员变量

static成员变量初始化

静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。

就地初始化:

 静态代码块初始化

         往下看

代码块

使用 {} 定义的一段代码称为代码块 。根据代码块定义的位置以及关键字,又可分为以下四种:      普通代码块 、构造块 、静态块 、同步代码块
普通代码块:定义在方法中的代码块
public class TestCode {
    public static void main(String[] args) {
        { //直接用{}定义,普通代码块
            int x = 10;
            System.out.println(x);
        }
        int x = 100;
        System.out.println(x);
    }
}

执行结果

构造代码块:定义在类中的代码块(不加修饰符)。也叫:实例代码块构造代码块一般用于初始化实例成员变量

public class TestCode {
   private String name;
   private int age;

   public TestCode() {
       System.out.println("构造方法");
   }
   //实例代码块
    {
        this.age = 10;
        this.name = "张三";
        System.out.println("实例代码块");
    }

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

    public static void main(String[] args) {
        TestCode testCode = new TestCode();
        testCode.show();

    }
}

 

在如上代码可以看出,在实例化对象的时候 先执行实例化代码块 然后执行构造方法 

静态代码块

使用static 定义的代码块称为静态代码块。一般用于初始化静态成员变量。
public class TestCode {
   private String name;
   private int age;

   public TestCode() {
       System.out.println("构造方法");
   }

    static{
        System.out.println("静态代码块");
    }
   //实例代码块
    {
        this.age = 10;
        this.name = "张三";
        System.out.println("实例代码块");
    }

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

    public static void main(String[] args) {
        TestCode testCode = new TestCode();
        testCode.show();

    }
}

由以上代码可以知道 在实例化对象时,先执行静态代码块,再执行非静态(实例)代码块,最后执行构造方法。

注意:

静态代码块不管生成多少个对象,其只会执行一次
静态成员变量是类的属性,因此是在 JVM 加载类时开辟空间并初始化的
如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行 ( 合并 )
实例代码块只有在创建对象时才会执行、

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值