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

- 引用数据类型


-
当传递基本数据类型时,将数据 创建了一个副本,传递到方法中,形参修改不会影响到实参;
- 对象存放在堆中,拿到的只是这个对象的引用,通过对象的引用操作对象,对象引用传递给方法时,其实是创建了一个引用副本,实参和形参都指向了同一个对象,

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

- 基本数据类型
-
线程的wait方法 可能会导致线程中断或停止运行;
- Integer.valueOf()把字符串类型转换成Integer类型;
- Daemon线程:守护线程,不是不可或缺的线程,为其他非守护线程提供支持,当其他非守护线程终止时,就会杀死所有的守护线程,
- jvm中的垃圾回收线程就是一个守护线程;当jvm中没有守护线程时,jvm就会退出;
- 用户也可以将自己的线程设置为守护线程,通过Thread.setDaemon()方法实现。该设置必须在启动线程前就进行,否则会抛出异常;
- URL网址格式正确,就不会抛出异常,格式不正确就会抛出异常,URL u =new URL(“网址”);
- LinkedList实现了List接口;
- Java的跨平台特性是因为JVM的存在, 它可以执行.class字节码文件,而不是.java源代码;
- 打印计算结果中有字符串,字符串前面的按原来的格式相加;
- 编译看左边,运行看右边。 父类型引用指向子类型对象,如果编译时,前面父类的变量调用了子类特有的方法,就会发生编译错误;即:向上转型; 会屏蔽掉子类特有的(共同的方法,会用子类的)方法,
- 数据库恢复的基础是利用转储的冗余数据。这些转储的冗余数据包括日志文件、数据库后备副本;
- JDK 1.8以前,抽象类的方法默认访问权限为protected,JDK 1.8时,抽象类的方法默认访问权限变为default,
- JDK 1.8以前,接口中的方法必须是public的,JDK 1.8时,接口中的方法可以是public的,也可以是default的,JDK 1.9时,接口中的方法可以是private的;
- 在为Integer赋值的时候,java编译器会将其翻译成调用valueOf()方法。比如Integer i=127翻译为Integer i=Integer.valueOf(127),对于-128到127之间的数,Java会对其进行缓存。而超出这个范围则新建一个对象。
- java.lang包是java语言的核心包,lang是language的缩写 java.lang包定义了一些基本的类型,包括Integer,String之类的,是java程序必备的包,有解释器自动引入,无需手动导入;
- 数据结构:A[m,n]的地址为X,A[i,j]的地址则为 :X + ((i - m)* 列数 + (j - n)),其中(i>m,但是 j 不一定大于 n)以列存放;
- slice和concat方法均返回新数组,而splice方法的主要作用就是对原数组进行增删改操作,返回值为截取删除掉的子数组;
- char b[][3]={0};数组个数可以缺省,数组长度不能缺省;
- static不能修饰局部变量;
- SQL 语言中,条件“年龄 BETWEEN 20 AND 30”表示年龄在 20 至 30 之间,且包括 20 岁和 30 岁;
- java中this指当前对象只能在实际方法和构造函数中调用;
-
线程中断或停止运行的原因可能有很多,以下是一些常见的情况:
- 程序错误:如果线程中的代码存在错误,如空指针访问、数组越界等,可能会导致线程崩溃。
- 资源不足:如果线程所需的资源(如内存、文件句柄等)不足,可能会导致线程阻塞或异常。
- 外部干预:如果线程被外部因素干预,如用户手动停止程序运行、操作系统强制结束进程等,可能会导致线程提前结束。
- 长时间运行:如果线程中的任务需要长时间运行,并且没有合适的退出条件或超时机制,可能会导致线程一直运行下去,占用系统资源。
- 死循环:如果线程中的代码进入了死循环,无法正常退出,也可能会导致线程一直运行下去。
- 线程优先级:在多线程编程中,如果其他高优先级线程占用了CPU资源,可能导致低优先级线程得不到运行,从而被挂起或延迟执行。
- 异常处理:如果线程中的异常没有被正确处理,如未捕获的异常导致线程中断。
- 并发问题:如果多线程程序中存在并发问题,如数据竞争、死锁等,可能会导致线程阻塞或异常。
- 操作系统调度:在多任务操作系统中,如果操作系统调度器将CPU资源分配给其他进程或线程,可能会导致当前线程暂时停止运行。
- 外部输入:如果线程依赖于外部输入(如网络数据、用户输入等),并且这些输入没有及时到达或发生异常,可能会导致线程阻塞或异常。
- java中length得到的是字符,不是字节;
- java中lambda表达式是dir.listFiles((File f)->f.getName().endsWith(“.Java”));
- java中synchronized判断是否锁住同一个对象,修饰非静态方法 锁的是this 对象;修饰静态方法 锁的是class对象;
- java中super.getClass().getName(),返回的是包名+类名。
- 如果try,finally语句里均有return,忽略try的return,而使用finally的return.;
- instance是java的二元运算符,用来判断他左边的对象是否为右面类(接口,抽象类,父类)的实例;
- mvc模式设计一般会增加代码量;
- 客户端通过new Socket()方法创建通信的Socket对象; 服务器端通过new ServerSocket()创建TCP连接对象 accept接纳客户端请求;
- File类不能够读写文件,能够读写文件的是数据流(OutputStream和InputStream);
- 没有重新.equals,.equals和==是一样的,字符串常量被创建后会放到常量池中,test.name和testB.name指向的都是常量池的"abc";
- wait/notify/notifyAll是Object类中的方法,Condition.await/signal/signalAll也能实现线程间通知和唤醒;
- 修饰interface的只有public;
- String str一旦被定义不能重新赋值,重新写str=“123”相当于新建了一个新变量;
- 数据库第一范式无重复的域;
- string字符串常量池:

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

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

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

-
封装类型的初始值是null,基本数据类型的默认值是0;
浙公网安备 33010602011771号