JAVA基础篇-类(重点)

1.用static修饰的属性就叫做静态属性

2.静态属性的访问权限和普通属性的权限是一样的

3.静态属性可以通过类名.属性名字调用

4.静态属性类加载的时候就创建好了

5.同一个对象的多个实例化调用的静态属性是同一个

6.JDK 1.8之前静态属性存在在JVM中的方法区中的静态域中,1.8之后存在堆中

7.静态属性和普通属性的区别,普通属性每次new对象都会重新创建一个的,静态属性不会创建新的每次调用的都是同一个

public class A{
    // 静态属性
    public static String name = "";
    // *重点  静态属性的访问权限和普通属性一直
}

public class B{
    // 可以通过对象的实例化调用静态属性
    A a = new A();
    a.name;
    // 也可以通过类名.属性名调用 静态属性
    A.name
}

类方法(静态方法)

1.静态方法的和静态属性差不多,同上一致

2.静态方法中不能使用this ,super

3.静态方法中只能访问静态变量和静态方法(如果要使用非静态方法或者成员只能new一个对象再调用)

4.重点*,类什么时候被加载(类只会被加载一次)

5.当创建一个对象实例的时候,类会被加载(new 对象的时候)

6.创建子类对象实例的时候父类也会被加载

7.使用类的静态成员变量或者静态成员方法的时候,类会被加载(类名.属性名/类名.方法名)

8.代码块

9.代码块分为静态代码块和普通代码块

10.代码块可以减少代码的冗余(将一些重复的代码卸载代码块中)

代码块:

public class A{
    {
        System.out.println("我是普通代码块");
    }
}

class B{
    A a = new A(); //  每次对对象进行实例化的时候(new对象的时候)都会调用普通代码块
}

静态代码块:

public class A{
    static{
        System.out.println("我是静态代码块");
    }
}

class B{
    A a = new A(); // 静态代码块每次类加载的时候才会调用,只会执行一次
    /*
    	类加载的几种情况
    	1. 对象进行实例化的时候进行类加载(也就是new的时候)
    	2. 使用静态成员变量或者静态成员方法的时候类会被加载
    	3. 创建子类对象实例的时候父类也会被加载
    */
}

难点*

public class A{
    static {
        System.out.println("我是父类的静态代码块");
    }
}

class B extends A{
    public static String num = "100";
    
    static{
        System.out.pritln("我是子类的静态代码块");
    }
}

class Test{
    public void static main(String [] args){
        B b = new B();
        /*
        	输出的语句是:
        		我是父类的静态代码块
        		我是子类的静态代码块
        */
        
        // 上面的注释掉使使用类名.属性方式进行类加载
        B.num; // 这里也会调用静态代码块的语句  输出方式也是先父类然后再子类
    }
}

java代码块的使用

1.代码块分为普通代码块(不带static)和静态代码块(带static)两种

2.普通代码块会随着每次对象实例化而调用,静态代码块只会随着类的加载而调用,类加载只会进行一次

3.普通代码块和静态代码块的执行顺序,静态属性、静态代码块优先执行,静态的按照顺序执行,最后执行构造方法

普通代码块

// 普通代码块
public class A{
    
    public String name = "fanfan";
    
    {
        // 这个就是普通代码块
        System.out.println("我是普通代码块!");
    }
}

class B{
    public static void main(String [] args){
        A a = new A();
        System.out.println(a.name);
        // 普通代码块每次对象实例化的时候都会进行调用,也就是每次new对象的时候
        
        // 输出结果
        // 我是普通代码块!  fanfan
    }
}

静态代码块

// 静态代码块
public class A{
    
    public static String name = "fanfan";
    
    static{
        // 这个就是静态代码块
        System.out.println("我是静态代码块!");
    } 
}

class B{
    public static void main(String [] args){
        System.out.println(A.name); // A类的静态属性调用   这里会进行类的加载
        
        // 输出结果    fanfan  我是静态代码块!
    }
}

执行顺序:

1.如果普通方法、静态方法、普通代码块、静态代码块同时存在一个类中,优先执行静态的东西,静态的也按照代码顺序来执行

public class A{
    
    public String name = "fanfan"; // 3
    public static String sex = "女"; //  1
    
    { // 4
        System.out.println("我是普通代码块!");
    }
    
    static{ // 2
        System.out.println("我是静态代码块!");
    }
    
    public A(){ // 5
        System.out.println("我是构造方法!");
    }
}

2.如果存在父子类关系优先加载父类的

3.构造方法里面隐藏了一个super()方法和一个调用普通属性的方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值