基础问题记录

1.方法内部的变量(局部变量)必须初始化后才能使用。

@Test

       public void testInnerVariable(){

            int a = 0 ;

            System.out.println("实例变量=="+this.a+"局部变量为"+a );

       }

 

2.数组的形式:

  int[] a = new int[]{1,2,3};{1,2,3}是一个一维数组,{{1,2,3},{2,3,4},{5,6,7}}是一个二维数组。

数组排序:java.util.Arrays.sort(Object o);

 

3.Java 序列化的用途:

 将一个对象的状态写进一个Byte流里,并且可以从其他地方把该byte流里的数据读出来,重新构造一个 相同的对象。

 1.比如有一个类记录用户信息设置等,当你程序退出后下次再运行要保留上次的信息设置,那你就可以把这个类作为配置文件存在磁盘上,每次运行的时候再读取。这样的例子有很多,总之一切需要保留的数据都可以这么做。

 2.比如你做一个云服务,需要把用户数据从服务器端传输给用户,那也可以这么做。

 当然现在序列化用的不是很多,因为有很多替代方法,甚至很多比序列化方便很多,而且通常第二种情况,客户端服务器端也不是完全对称的,所以直接传输并不好。

 

4.访问权限:

      public protected friendly private

 

5.String 被定义为final的,子类不可继承。StringBuffer是线程安全的,可变的,StringBuilder不是线程安全的

 

6.class.forName:

 调用该访问一个以字符串指定类名的类的对象。

 返回字节码(编译后的class文件字):

 1.如果这个字节码没有被加载到虚拟机中,就使用类加载器把加载进来的字节码缓存在虚拟机种,以后就不用在加载。

 2.字节码已经被加载过到虚拟机中直接返回

类加载器:BootStrapClassLoader ExtentionClassLoader appClassLoader 三者来利用委托模型进行搜索和加载。其实程序中分为预先加载和按需加载,预先加载不讨论,说明按需加载(委托模型):就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。层次关系:


先去父类中找,找不到再来子类中找

 

拓展点:

隐式加载是通过new的方式,在类初始化时由JVM根据相应的Class Loader将类载入。

显式加载则是程序员在代码中显式利用某个Class Loader将类载入。

 

JVM自动装载类的算法是这样的:如果Class A的实例引用了Class B的实例,则在默认情况下,JVM会先找到Class A的Class Loader,然后用该Class Loader来装载Class B。

 

可以定义自己的类加载器

 

7.hashcode方法作用:

 在比较 equals 时的顺序:

 1.先比较hashcode 不相等直接不等

 2.hashcode相等然后再比较 equals 方法

 Object 中有toString,equals,hashcode 三个方法,可以覆盖,如果覆盖其equals 和 hashcode 在属 性相同的时候都会相同

 在hash、set存储时都会比较其是否相同

 equals 相同的其hashcode一定相同,hashcode相同的不一定equals相同。

 == 比较的是内存首地址和内存地址,equals 比较的是数据的内容。

 

 

 

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值