this,static,final关键字,block代码块,封装,GC,导包,权限修饰符 详解

目录

关键知识点和补充 

this关键字

静态的 static

final 最终的

block 块 {}

封装

System.gc()

类的上面进行导包

权限修饰符:  定义对象中内容的可访问范围            

例题

代码块问题的一个例题:

垃圾回收机制

导包问题



关键知识点和补充 

  • this有俩种用法,第一种:调用本类的构造器,必须放在第一行使用,第二种:this总指向调用方法的对象,可以避免重名,其实在所有的方法中,都会默认传递一个this,所以所有的对象的属性其实都是this.属性,但是this都省略了!
  • 不能用this关键字进行构造器之间的相互调用(会成一个死循环)
  • 静态的是属于类的,成员属于对象的,好好品味
  • 类的所有对象公用类中静态的内容,静态的内容是独一份的,在类第一次加载就初始化
  • 被final修饰的           变量为常量  注意基本数据类型不可以更改,引用类型是地址不可修改,值可以修改,                                                                    方法 不可以被继承,也就更别说重写了!                                                                                                                                        类     为  太监类  ,也就是说不可以被继承  
  • block代码块注意几点:  
    • 一般:静态代码块>main方法>{}>构造器   !!!!有特殊!!!
    • static{}和main方法的优先级是看谁被加载,当main方法的类有static{}则先执行静态代码块,反之必定执行main
    • static{}代码块是当类在被加载的时候只被初始化一次, 
    • 注意!!虽然在new一个对象的时候{}优先于构造器,但是他是将其放在构造器里面去执行的,所以会有种this必须放在第一行的情况,看例题的运行结果!
  • 私有是封装,但是封装不只是私有!!!!
  • System.gc()程序员可以通知他运行,但是是否回收怎么回收无权干涉
  • 一定会被垃圾回收机制清理的是(GC回收的都是堆中new出来的对象): 1.匿名类  2.对象无引用状态
    • 匿名类是没有名字的对象,匿名对象只能在当前行使用一次!
    • 对象无引用状态指的是
  •  import 关键字  标识当前所使用的这个类的位置
               1 .   这个包下的所有的类,如果有使用都可以引用
                      会降低编译效率,不会降低运行效率
               2 .   静态导入:  只导入静态的内容
               3 .   如果不使用import可以在使用的位置指明类的位置,包名+类名
      注意:不要与jdk的 包名,类名出现相同情况,不然会出现java中帮你定义的类无法使用
  • 权限修饰符: 都只能修饰成员,不能修饰局部                                                                                                                             成员是在创建对象的时候才产生,局部变量在调用方法时候才会产生,方法结束时局部变量结束
  • 能够修饰类的只有  default|public 
    • protected:1.同包类,本类中直接使用        2.不同同包下的子类,必须通过继承关系才能使用

this关键字

 *     this指代当前new的对象
 * 
 *     this使用在构造器中,调用本类中的其他构造器
 *         this(参数列表)
 *         必须在构造器的第一行使用
 * 
 *  this使用在成员方法中|构造器中,区分同名变量问题(局部和成员同名问题)
 *      this指代当前对象|当前调用方法的对象
 *      如果出现同名的成员和局部变量的问题,如果想要指代成员,必须使用this
 *      如果没有出现同名问题,只有成员变量,相当于省略的this
 *  
 *  注意:
 *      1.不能使用this关键字进行构造器之间的相互调用
 *      2.this和static不能同时使用


静态的 static

 *     static修饰变量: 静态变量|类变量
 *         只能修饰成员,不能修饰局部,static是成员修饰符
 * 
 *  static修饰方法: 静态方法|类方法
 *  
 *  使用方式:
 *          1.类名.属性名|方法名();
 *          2.对象.属性名|方法名();
 *  
 *  静态的是属于类的,成员属于对象的
 *  类的所有对象公用类中静态的内容
 *  静态的内容是独一份的,在类第一次加载就初始化
 *  在静态的内容中,可以直接使用静态的内容,不能直接使用非静态的内容,可以跟随对象使用
 *  在非静态的内容中,可以直接使用静态的内容,可以直接使用非静态的内容


final 最终的

 *      1.被final修饰的变量为常量
 *          变量的数据类型如果是基本数据类型: 存储的数据值不能改变
 *          变量的数据类型如果是引用数据类型: 存储对象的地址不能改变,但是对象内存中的属性值可以改变
 *      2.被final修饰的方法不能被重写
 *      3.被final修饰的类不能被继承(太监类) 


 

block 块 {}

 *     {} 定义在方法中-->局部代码块|普通语句块       执行时机:方法调用时
 *     {} 定义在类中方法外 --> 构造块                        执行时机:创建对象的时候
 *     static{} 定义在类中方法外--> 静态块                 执行时机: 类第一次加载时
 *  
 *  {} 就是一个作用域
 *  构造块中代码先于构造器代码执行,如果有多个构造块,从上倒下以此执行
 *  static只执行一次,在类第一次加载后执行,如果存在多个静态块,从上到下依次执行
 *  顺序(大体,有特殊的看第一大部分的补充):
 *  static  main  构造块     构造器


封装

 *     安全隐患-->介绍一个关键字 private 私有的
 *  private 修饰的内容,只能在当前类|本类中使用
 *  需要为私有的字段提供一对公共的访问方式  设置器setter  获取器getter
 *  私有的属性需要配合公共的访问方式->方法
 *  
 *  私有的属性并且提供公共的访问方式-->面向对象中封装特性的体现
 *  私有是封装
 *  不能说封装是私有,封装不仅仅表示为私有
 *  
 *  封装:
 *      隐藏内部的实现细节,对外提供公共的访问方式
 *  
 *  优点:
 *      提高代码的复用性,安全性
 *  
 *  模板类|javabean|bean...规范:
 *      1.修饰类的public
 *      2.至少提供一个空构造
 *      3.属性私有化
 *      4.对外提供公共的访问方式


System.gc()

 * System.gc()通知垃圾回收机制回收垃圾,但是是否回收,什么时候回收,程序员无权控制垃圾回收机制,
 * 一定会调用finalize方法的情况:
 *                         1.匿名对象
 *                         2.对象无引用状态
 * finalize() 回收垃圾第一步会调用的方法

类的上面进行导包

 *     import 关键字  标识当前所使用的这个类的位置
 *           1 .   这个包下的所有的类,如果有使用都可以引用
 *              会降低编译效率,不会降低运行效率
 *           2 .   静态导入:  只导入静态的内容
 *  
 *           3 .   如果不使用import可以在使用的位置指明类的位置,包名+类名
 *  
 *  注意:不要与jdk的 包名,类名出现相同情况,不然会出现java中帮你定义的类无法使用

权限修饰符:  定义对象中内容的可访问范围            

 *                              自己            自己家                私生子(非名正言顺的)            陌生人
 *                             本类            同包类                 不同包子类                             不同包其他类
 *     public                   Y                Y                          Y                                            Y
 *     protected             Y                Y                          Y
 *    default(默认)         Y                Y
 *    private                  Y
 *  
 *  以上权限修饰符: 都只能修饰成员,不能修饰局部
 *  能够修饰类的只有  default|public 
 *  
 *  protected:
 *              1.同包类,本类中直接使用
 *              2.不同同包下的子类,必须通过继承关系才能使用


例题

代码块问题的一个例题:

public class BlockTest02 {
    public static int a = 0;
    {
        a = 10;
        System.out.println("2、非静态代码块执行a=" + a); //10
    }
    static {
        a = 6;
        System.out.println("1、静态代码块执行a=" + a); //6
    }
    public BlockTest02() { 
        this(a); //6  调用其他构造器
        System.out.println("5、"+a);  //5,10  
        System.out.println("6、无参构造方法执行a=" + a); //6.10
    }
    public BlockTest02(int n) { 
        System.out.println("3、"+n); //3,6
        System.out.println("4、"+a);//4,10
    }    
    public static void main(String[] args) {
        System.out.println("main"); //main
        BlockTest02 tsc = new BlockTest02();    
    }
}

执行结果:

1、静态代码块执行a=6
main
2、非静态代码块执行a=10
3、6
4、10
5、10
6、无参构造方法执行a=10

注意!!!!!!3.6这个,就是关键知识点和补充的block注意点的第四点,按理说应该是10,但是结果为6,可以通过反编译工具看,反编译工具可以评论区问我要呦.

垃圾回收机制

public class GCDemo01 {
    public static void main(String[] args) {
        //匿名对象 :没有名字的对象
        //只能在当前行使用一次
        new GCDemo01().haha();
        System.gc(); //通知
        System.out.println("123");
        /*第二种对象无引用状态,本来a和b指向自己的,
        但是a把自己的地址给了b,所以b new出来的对象就没有存在的意义了,所以需要回收
        */
        GCDemo01 a = new GCDemo01();
        GCDemo01 b = new GCDemo01();
        b = a;
    }
    
    public void haha(){
        System.out.println("哈哈哈哈,最近还是先吃火锅~~~");
    }
    
    @Override
    protected void finalize() throws Throwable {
        System.out.println("over....");
    }
}

运行结果:

哈哈哈哈,最近还是先吃火锅~~~
123
over....

导包问题

import static java.lang.Math.PI;
import static java.lang.Math.sqrt;
import java.util.*;
public class ImportDemo06 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        Random ran=new Random(); 
        System.out.println(PI);
        System.out.println(PI);
        System.out.println(sqrt(4));
    }
}

 


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值