错题集

  1. String的值是final修饰的,不可变;
  2. 值传递和引用传递:基本数据类型是值传递,引用数据类型(类,接口,数组),java只有值传递
    1. 基本数据类型

    2. 引用数据类型

    3. 当传递基本数据类型时,将数据 创建了一个副本,传递到方法中,形参修改不会影响到实参;

    4. 对象存放在堆中,拿到的只是这个对象的引用,通过对象的引用操作对象,对象引用传递给方法时,其实是创建了一个引用副本,实参和形参都指向了同一个对象,

    5. 当把形参重新赋值的时候,实参是不会受到影响的,此时形参和实参已经指向不同的对象;

  3.  线程的wait方法 可能会导致线程中断或停止运行;

  4. Integer.valueOf()把字符串类型转换成Integer类型;
  5. Daemon线程:守护线程,不是不可或缺的线程,为其他非守护线程提供支持,当其他非守护线程终止时,就会杀死所有的守护线程,
    1. jvm中的垃圾回收线程就是一个守护线程;当jvm中没有守护线程时,jvm就会退出;
    2. 用户也可以将自己的线程设置为守护线程,通过Thread.setDaemon()方法实现。该设置必须在启动线程前就进行,否则会抛出异常;
  6. URL网址格式正确,就不会抛出异常,格式不正确就会抛出异常,URL u =new URL(“网址”);
  7. LinkedList实现了List接口;
  8. Java的跨平台特性是因为JVM的存在, 它可以执行.class字节码文件,而不是.java源代码;
  9. 打印计算结果中有字符串,字符串前面的按原来的格式相加;
  10. 编译看左边,运行看右边。 父类型引用指向子类型对象,如果编译时,前面父类的变量调用了子类特有的方法,就会发生编译错误;即:向上转型;  会屏蔽掉子类特有的(共同的方法,会用子类的)方法,
  11. 数据库恢复的基础是利用转储的冗余数据。这些转储的冗余数据包括日志文件、数据库后备副本;
  12. JDK 1.8以前,抽象类的方法默认访问权限为protected,JDK 1.8时,抽象类的方法默认访问权限变为default,
  13. JDK 1.8以前,接口中的方法必须是public的,JDK 1.8时,接口中的方法可以是public的,也可以是default的,JDK 1.9时,接口中的方法可以是private的;
  14. 在为Integer赋值的时候,java编译器会将其翻译成调用valueOf()方法。比如Integer i=127翻译为Integer i=Integer.valueOf(127),对于-128到127之间的数,Java会对其进行缓存。而超出这个范围则新建一个对象。
  15. java.lang包是java语言的核心包,lang是language的缩写 java.lang包定义了一些基本的类型,包括Integer,String之类的,是java程序必备的包,有解释器自动引入,无需手动导入;
  16. 数据结构:A[m,n]的地址为X,A[i,j]的地址则为 :X + ((i - m)* 列数 + (j - n)),其中(i>m,但是 j 不一定大于 n)以列存放;
  17. slice和concat方法均返回新数组,而splice方法的主要作用就是对原数组进行增删改操作,返回值为截取删除掉的子数组;
  18. char b[][3]={0};数组个数可以缺省,数组长度不能缺省;
  19. static不能修饰局部变量;
  20. SQL 语言中,条件“年龄 BETWEEN 20 AND 30”表示年龄在 20 至 30 之间,且包括 20 岁和 30 岁;
  21. java中this指当前对象只能在实际方法和构造函数中调用;
  22. 线程中断或停止运行的原因可能有很多,以下是一些常见的情况:

    1. 程序错误:如果线程中的代码存在错误,如空指针访问、数组越界等,可能会导致线程崩溃。
    2. 资源不足:如果线程所需的资源(如内存、文件句柄等)不足,可能会导致线程阻塞或异常。
    3. 外部干预:如果线程被外部因素干预,如用户手动停止程序运行、操作系统强制结束进程等,可能会导致线程提前结束。
    4. 长时间运行:如果线程中的任务需要长时间运行,并且没有合适的退出条件或超时机制,可能会导致线程一直运行下去,占用系统资源。
    5. 死循环:如果线程中的代码进入了死循环,无法正常退出,也可能会导致线程一直运行下去。
    6. 线程优先级:在多线程编程中,如果其他高优先级线程占用了CPU资源,可能导致低优先级线程得不到运行,从而被挂起或延迟执行。
    7. 异常处理:如果线程中的异常没有被正确处理,如未捕获的异常导致线程中断。
    8. 并发问题:如果多线程程序中存在并发问题,如数据竞争、死锁等,可能会导致线程阻塞或异常。
    9. 操作系统调度:在多任务操作系统中,如果操作系统调度器将CPU资源分配给其他进程或线程,可能会导致当前线程暂时停止运行。
    10. 外部输入:如果线程依赖于外部输入(如网络数据、用户输入等),并且这些输入没有及时到达或发生异常,可能会导致线程阻塞或异常。
  23. java中length得到的是字符,不是字节;
  24. java中lambda表达式是dir.listFiles((File f)->f.getName().endsWith(“.Java”));
  25. java中synchronized判断是否锁住同一个对象,修饰非静态方法 锁的是this 对象;修饰静态方法 锁的是class对象;
  26. java中super.getClass().getName(),返回的是包名+类名。
  27. 如果try,finally语句里均有return,忽略try的return,而使用finally的return.;
  28. instance是java的二元运算符,用来判断他左边的对象是否为右面类(接口,抽象类,父类)的实例;
  29. mvc模式设计一般会增加代码量;
  30. 客户端通过new Socket()方法创建通信的Socket对象; 服务器端通过new ServerSocket()创建TCP连接对象 accept接纳客户端请求;
  31. File类不能够读写文件,能够读写文件的是数据流(OutputStream和InputStream);
  32. 没有重新.equals,.equals和==是一样的,字符串常量被创建后会放到常量池中,test.name和testB.name指向的都是常量池的"abc";
  33. wait/notify/notifyAll是Object类中的方法,Condition.await/signal/signalAll也能实现线程间通知和唤醒;
  34. 修饰interface的只有public;
  35. String str一旦被定义不能重新赋值,重新写str=“123”相当于新建了一个新变量;
  36. 数据库第一范式无重复的域;
  37. string字符串常量池:

  38. 线程的生命周期中包含五种状态:初始态、就绪态、运行态、阻塞态、死亡状态。

  39. 依赖注入的三种方式是构造器注入,setter注入,接口注入;
  40. 在Web应用程序中,web容器负责将HTTP请求转换为HttpServletRequest对象;
  41. 依赖注入是一种思想,或者说是一种设计模式,在java中是通过反射机制实现,与具体框架无关;
  42. 线程安全的有Vector、Hashtable、Stack、Enumeration、StringBuffer、线程不安全的类,如ArrayList、LinkedList、HashMap等;
  43. java8中接口可以定义静态方法可以有方法体;所以接口中也可以有普通方法;
  44. 抽象类可以有构造方法,接口中不能有构造方法;
  45. 类信息不是存储在java虚拟机栈中,而是存储在方法区中;
  46. 方法区和堆内存是线程共享的。程序计数器、虚拟机栈是线程隔离的。
  47. java堆是被所有线程共享的一块内存区域,而不是每个线程都拥有一块内存区域。
  48. 局部内部类不能用可见性修饰符(如publicprotectedprivate),可以用局部内部类可以使用finalabstract修饰符;
  49. 常见异常结构

     

  50. 如果try语句里有return,那么代码的行为如下:
    1. 如果有返回值,就把返回值保存到局部变量中;
    2. 执行jsr指令跳到finally语句里执行;
    3. 执行完finally语句后,返回之前保存在局部变量表里的值;
    4. 如果try,finally语句里均有return,忽略try的return,而使用finally的return.
  51. java类是单继承的。 java接口可以多继承。
  52. 向上转型,如果子类有特殊的方法,再调用子类特殊的方法会报错;
  53. 释放让线程锁资源的方法wait和join;
  54. 类修饰不使用任何关键字就默认是default;
  55. static不能修饰局部变量;
  56. 在Java中,interface定义的成员变量和方法默认为public访问权限,且只能为public;
  57. for(int i=0;i<10;i++){}循环的执行顺序:
    1.int i=0;初始化这一步只执行一次;
    2.i<10;进行条件判断;执行下面的方法体,条件达成返回true 否则false不往下执行,跳出for循环圈
    3.i++ ;  是最后执行的,当循环体内的代码执行完它才进行赋值。
  58. float []f[] = new float[6][6];也是正确的;
  59. 引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用Java来实现的;
  60. String是引用数据类型,所以用==比较肯定会出错;
  61. 当没有被引用时对象才会被回收;

  62.  封装类型的初始值是null,基本数据类型的默认值是0;

     

posted @ 2024-02-19 10:20  卡皮巴拉  阅读(23)  评论(0)    收藏  举报