Java笔试基础

扫码查看

java 基础知识点
1.面向对象的特性:封装,继承,多态
2.基础数据类型:整形:int、long、short、byte;浮点型:double、folat;字符型:char;布尔型:boolean
3.缓存池:

public class Main_1 {
    public static void main(String[] args) {
        Integer a = 1;
        Integer b = 2;
        Integer c = 3;
        Integer d = 3;
        Integer e = 321;
        Integer f = 321;
        Long g = 3L;
        System.out.println(c == d);//true,缓存池
        System.out.println(e == f);//false,不在缓存池
        System.out.println(c == (a + b));//true
        System.out.println(c.equals(a + b));//true
        System.out.println(g == (a + b));//true
        System.out.println(g.equals(a + b));//false
        System.out.println(g.equals(a + h));//true
    }

4.String:String 被声明为 final,因此它不可被继承。

5.StringBuilder、StringBuffer:StringBuilder 不是线程安全的
StringBuffer 是线程安全的,内部使用 synchronized 进行同步
6.参数传递:Java 的参数是以值传递的形式传入方法中,而不是引用传递。

public class PassByValueExample {
    public static void main(String[] args) {
        Dog dog = new Dog("A");
        System.out.println(dog.getObjectAddress()); // Dog@4554617c
        func(dog);
        System.out.println(dog.getObjectAddress()); // Dog@4554617c
        System.out.println(dog.getName());          // A
    }
    private static void func(Dog dog) {
        System.out.println(dog.getObjectAddress()); // Dog@4554617c
        dog = new Dog("B");
        System.out.println(dog.getObjectAddress()); // Dog@74a14482
        System.out.println(dog.getName());          // B
    }

如果在方法中改变对象的字段值会改变原对象该字段值,因为改变的是同一个地址指向的内容

class PassByValueExample {
    public static void main(String[] args) {
        Dog dog = new Dog("A");
        func(dog);
        System.out.println(dog.getName());          // B
    }

    private static void func(Dog dog) {
        dog.setName("B");
    }

7.访问权限:Java 中有三个访问权限修饰符:private、protected 以及 public,如果不加访问修饰符,表示包级可见。

protected 用于修饰成员,表示在继承体系中成员对于子类可见

8.抽象类与接口:抽象类和普通类区别是抽象类不能被实例化,需要继承抽象类才能实例化其子类。

  一个类可以实现多个接口,但是不能继承多个抽象类,接口的字段只能是 static 和 final 类型的,接口的成员只能是 public 的

9.hashCode:hashCode() 返回散列值,而 equals() 是用来判断两个对象是否等价。等价的两个对象散列值一定相同,但是散列值相同的两个对象不一定等价。

   ==:基本数据类型:比较的是他们的值;引用类型:比较的是他们在内存中的存放地址

   hashCode:如果a=b,则h(a) = h(b);如果a!=b,则h(a)与h(b)可能得到相同的散列值。
    a.hashCode()==b.hashCode() 则 a.equals(b)可真可假;a.hashCode()!= b.hashCode() 则 a.equals(b)为假。

public static void main(String[] args) {
        int int1 = 12;
        int int2 = 12;
        Integer Integer1 = new Integer(12);
        Integer Integer2 = new Integer(12);
        Integer Integer3 = new Integer(127);
        Integer a1 = 127;
        Integer b1 = 127;
        Integer a = 128;
        Integer b = 128;
        String s1 = "str";
        String s2 = "str";
        String str1 = new String("str");
        String str2 = new String("str");
        System.out.println("int1==int2:" + (int1 == int2)); //true
        System.out.println("int1==Integer1:" + (int1 == Integer1)); //true
        System.out.println("Integer1==Integer2:" + (Integer1 == Integer2)); //false
        System.out.println("Integer3==b1:" + (Integer3 == b1)); //false
        System.out.println("a1==b1:" + (a1 == b1)); //true
        System.out.println("a==b:" + (a == b)); //false
        System.out.println("s1==s2:" + (s1 == s2)); //true
        System.out.println("s1==str1:" + (s1 == str1)); //false
        System.out.println("str1==str2:" + (str1 == str2)); //false
    }

10.深拷贝,浅拷贝:拷贝实现:实现Cloneable接口,否则报java.lang.CloneNotSupportedException错误。
  浅拷贝:拷贝对象和原始对象的引用类型引用同一个对象;
  深拷贝:对每一个引用对象重写clone方法或者通过对象序列化实现深拷贝(推荐使用)

11.static:静态变量:又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量
静态方法必须有实现,也就是说它不能是抽象方法(abstract)
初始化顺序:父类(静态变量、静态语句块)=》子类(静态变量、静态语句块)=》父类(实例变量、普通语句块)
=》父类(构造函数)=》子类(实例变量、普通语句块)=》子类(构造函数)

12.反射:
13.异常:NullPointerException 空指针异常
    ArithmeticException 算术异常,比如除数为零
    ClassCastException 类型转换异常
    ConcurrentModificationException同步修改异常,遍历一个集合的时候,删除集合的元素,就会抛出该异常
    IndexOutOfBoundsException 数组下标越界异常
    NegativeArraySizeException 为数组分配的空间是负数异常

  Error和Exception都实现了Throwable接口,Error指的是JVM层面的错误,比如内存不足OutOfMemoryError
  Exception 指的是代码逻辑的异常,比如下标越界OutOfIndexException

14.泛型:

15.&和&&的区别:长路与&:两侧,都会被运算;短路与&&:只要第一个是false,第二个就不进行运算了

16.堆和栈:heap堆是存放对象的;stack栈是存放基本类型(int, float, boolean 等等)、引用(对象地址)、方法调用

17.char:char是16位的,占两个字节汉字通常使用GBK或者UNICODE编码,也是使用两个字节;所以可以存放汉字

18.进程和线程:进程是内存中的一个程序,线程是进程的最小执行单元,一个进程可以有多个线程

19.sleep,wait,join的区别:

  sleep:当前线程将睡眠 n 毫秒,线程进入阻塞状态。当睡眠时间到了,会解除阻塞,进行运行状态,等待 CPU 的到来,不释放对象锁

  wait:线程停止,并释放对象锁,必须使用notify或者notifyAlll或者指定睡眠时间来唤醒当前等待池中的线程

  join:

20.ThreadLocal:

21.内存泄露:
  静态变量的生命周期和应用程序一致,所有的对象Object也不能被释放,因为他们也将一直被Vector等应用着。
  各种连接,数据库连接,网络连接,IO连接等没有显示调用close关闭,不被GC回收导致内存泄露
  监听器的使用,在释放对象的同时没有相应删除监听器的时候也可能导致内存泄露。

22.Java 与 C++ 的区别
  Java 是纯粹的面向对象语言,所有的对象都继承自 java.lang.Object,
  C++ 为了兼容 C 即支持面向对象也支持面向过程。
  Java 通过虚拟机从而实现跨平台特性,但是 C++ 依赖于特定的平台。
  Java 没有指针,它的引用可以理解为安全指针,而 C++ 具有和 C 一样的指针。
  Java 支持自动垃圾回收,而 C++ 需要手动回收。
  Java 不支持多重继承,只能通过实现多个接口来达到相同目的,而 C++ 支持多重继承。
  Java 不支持操作符重载,虽然可以对两个 String 对象支持加法运算,但是这是语言内置支持的操作,不属于操作符重载,而 C++ 可以。
  Java 的 goto 是保留字,但是不可用,C++ 可以使用 goto。
  Java 不支持条件编译,C++ 通过 #ifdef #ifndef 等预处理命令从而实现条件编译。

23.

12-22 11:27
查看更多