java常见面试题(上)

Alt
一、static作用
static可以修饰内部类、方法、变量、代码块。
1、staic修饰的类是静态内部类,当声明一个事物是static时,就意味着这个域的方法不会与任何实例对象关联在一起,不用创建实例对象,就可以调用其static方法或者static域

类名.方法

2、static修饰的方法是静态方法,属于当前类,不属于某个对象,不能被重写,可以直接用类名来调用,不能用super或者this关键字。好处:可以在不创建任何对象的前提下调用。
3、修饰的变量是静态变量或者类变量,能够被所有的实例共享,在内存中只有一份,所有的实例对象的变量都指向它。

package demo;

public class aa {

  public static class aaa{
    static int a=0; 
  }
  public static void main(String[] args) {
    System.out.println(aaa.a);
  }
}

4、修饰的代码块叫静态代码块,整个类加载的过程中只会执行一次。可以优化程序。

二、==和equals的区别
1、==:比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。
2、equals:比较两个对象的内容是否相等。

三、List集合的实现类有哪些?
主要有LinkedList、ArrayList、Vector。
1、ArrayList:底层依赖数组,查询效率高,做插入、删除效率低,线程不安全。
2、LinkedList:底层采用双向循环链表,增删效率高,查询效率低,线程不安全。
3、Vector:底层依赖数组,查询效率高(比ArrayList低,LinkedList高),增删效率低,线程安全。
三者的元素都是有序,可重复,允许null值的。
在这里插入图片描述
四、泛型的作用?
泛型的本质是参数化类型,所操作的数据类型作为一个参数,用在类、接口、方法的创建中。这些泛型类,泛型接口、泛型方法可以看作用指定类型作占位符,从而指定容器要持有什么类型的对象,而且由编译器来保证类型的正确性。这带来的好处:
1、类型安全:编译器可以在编译时验证类型。不符合参数类型的不能编译通过。
2、消除强制类型转换:消除源代码中的许多强制类型转换。增加了可读性。
另外补充一点:泛型方法使得方法能够独立于类而产生变化。通过使用泛型方法取代将整个类泛型化。对于一个static方法,在需要给它泛型化时,我们肯定不能通过给类加泛型实现,因为该静态方法是无法访问泛型类的类型参数,只能在该static方法上加泛型。例如:

public class aa {
  public static <T> void f(T x) {
    System.out.println(x.getClass().getName());
  }
  public static void main(String[] args) {
    aa aa=new aa();
    aa.f("11");//结果:java.lang.String
    aa.f(11);//结果:java.lang.Integer
    aa.f(111.1f);//结果:java.lang.Float
    aa.f(111.1);//结果:java.lang.Double
  }
}

五、String、StringBuffer、StringBuilder的区别:
1、String对象是不可变的,具有只读特性,指向他的任何引用都不可能改变他的值。任何一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,线程安全。
2、StringBuffer对象和StringBuilder对象是可变的,底层用字符数组保存字符变量,每次结果都会对对象本身进行操作,在改变对象引用(无新的对象生成)。
3、后两者有区别,StringBuffer是线程安全的,加了同步锁。部分代码如下:处理数据比StringBuilder慢一点。

public synchronized int capacity() {
          return value.length;
      }

4、StringBuilder是线程不安全的,底层没有加同步锁。
由于以上的区别,对使用提出以下意见:
如果要操作少量的数据用: String
2.单线程操作字符串缓冲区 下操作大量数据 :StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 : StringBuffer
在这里插入图片描述在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卧龙不言

欢迎关注java基础笔记公众号

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值