面试题知识点

equals()与hashCode()

1.equals()相等的两个对象他们的hashCode()肯定相等,也就是用equals()对比是绝对可靠的。

2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。

Java 类的初始化加载顺序通常遵循以下顺序:

父类静态成员变量 父类静态代码块 子类静态成员变量 子类静态代码块 父类非静态成员变量,父类非静态代码块,父类构造函数,子类非静态成员变量,子类非静态代码块,子类构造函数

Java的跨平台特性是指它的源代码可以在多个平台运行。()

  • 正确
  • 错误

Java的跨平台特性是因为JVM的存在, 它可以执行.class字节码文件,而不是.java源代码

复制的效率System.arraycopy>clone>Arrays.copyOf>for

Object类中的方法

关于抽象类

JDK 1.8以前,抽象类的方法默认访问权限为protected

JDK 1.8时,抽象类的方法默认访问权限变为default

关于接口

JDK 1.8以前,接口中的方法必须是public的

JDK 1.8时,接口中的方法可以是public的,也可以是default的

JDK 1.9时,接口中的方法可以是private的

下面代码的运行结果为:()

链接:https://www.nowcoder.com/questionTerminal/66eb5b79d0584d09b86d8b5d07593cc6
来源:牛客网

import java.io.*;
import java.util.*;
public class foo{
    public static void main (String[] args){
        String s;
        System.out.println("s=" + s);
    }
}
  • 代码得到编译,并输出“s=”
  • 代码得到编译,并输出“s=null”
  • 由于String s没有初始化,代码不能编译通过
  • 代码得到编译,但捕获到 NullPointException异常

局部变量可以先申明不用必须初始化,但使用到了一定要先初始化



都是Throwable的子类:


1.Exception(异常) :是程序本身可以处理的异常。

2.Error(错误): 是程序无法处理的错误。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,一般不需要程序处理。

3.检查异常(编译器要求必须处置的异常) :  除了Error,RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

4.非检查异常(编译器不要求处置的异常): 包括运行时异常(RuntimeException与其子类)和错误(Error)。

for循环的执行顺序用如下表达式:

for(expression1;expression2;expression3){

expression4;

}

执行的顺序应该是:

1)第一次循环,即初始化循环。

首先执行表达式expression1(一般为初始化语句);再执行expression2(一般为条件判断语句),判断expression1是否符合expression2的条件;如果符合,则执行expression4,否则,停止执行;最后执行expression3。

2)第N(N>=2)次循环

首先执行expression2,判断在expression3是否符合在expression2要求;如果符合,则继续执行在expression4,否则,停止执行。最后执行在expression3。如此往复,直至expression3不满足在expression2条件是为止。

总结:

总的来说,执行的顺序是一致的。先条件判断(expression2),再函数体执行(expression4),最后for执行(expression3)。往复......区别在于,条件判断的对象。第一次判断时,对象为初始化语句(expression1),后续的判断对象为执行后的结果(expression3)。

jre 判断程序是否执行结束的标准是()

  • 所有的前台线程执行完毕

Java只支持单继承,实现多重继承三种方式:

(1)直接实现多个接口

(2)扩展(extends)一个类然后实现一个或多个接口  

(3)通过内部类去继承其他类

静态变量会默认赋初值,局部变量和final声明的变量必须手动赋初值

interface中的方法默认为public abstract 的 ,变量默认为public static final 

抽象类中的方法默认权限是default


把你看得懂的转换为看不懂的,就是序列化。 
把你看不懂的转换为看得懂的,就是反序列化。 

1.构造方法作用:

(1).构造出来一个类的实例

(2).对构造出来个一个类的实例(对象)初始化。

2.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。 

抽象类和接口

抽象类

特点:

1.抽象类中可以构造方法

2.抽象类中可以存在普通属性,方法,静态属性和方法。

3.抽象类中可以存在抽象方法。

4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。

5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。

接口

1.在接口中只有方法的声明,没有方法体。

2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上

public static final 

3.在接口中的方法,永远都被public来修饰。

4.接口中没有构造方法,也不能实例化接口的对象。

5.接口可以实现多继承

6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法

7.则实现类定义为抽象类。

接口可以有default、static方法。

异常

java.lang.NullPoninterException:变量未被初始化、对象未赋值、对象为空(俗称的空指针异常)
java.lang.NumberFormatException:数据格式转换失败(integer的取值范围为:-128~127,超过范围都会访问false)
java.lang.RuntimeException:运行时异常
java.lang.ArrayindexOutOfBoundsException:数组下标越界

线程私有:java虚拟机栈,程序计数器,本地方法栈

线程共享:java堆,方法区

Vector & ArrayList 的主要区别


1) 同步性:Vector是线程安全的,也就是说是同步的 ,而ArrayList 是线程序不安全的,不是同步的 数2。
2)数据增长:当需要增长时,Vector默认增长为原来一倍 ,而ArrayList却是原来的50%  ,这样,ArrayList就有利于节约内存空间。

 

Java运行

  • 编译器将Java源代码编译成字节码class文件
  • 类加载到JVM里面后,执行引擎把字节码转为可执行代码
  • 执行的过程,再把可执行代码转为机器码,由底层的操作系统完成执行。

抛InterruptedException的代表方法有:

  • java.lang.Object 类的 wait 方法

  • java.lang.Thread 类的 sleep 方法

  • java.lang.Thread 类的 join 方法

关于Java程序初始化顺序:

  1. 父类的静态代码块

  2. 子类的静态代码块

  3. 父类的普通代码块

  4. 父类的构造方法

  5. 子类的普通代码块

  6. 子类的构造方法

JVM内存

方法区和堆内存是线程共享的。

程序计数器、虚拟机栈是线程隔离的。

使用mvc模式设计的web应用程序具有以下优点,除了?

A

可维护行强

B

可扩展性强

C

代码重复少

D

大大减少代码量

方法内定义的变量没有初始值,必须要进行初始化。 类中定义的变量可以不需要赋予初始值,默认初始值为0。

内存回收

加载驱动方法

1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

2. DriverManager.registerDriver(new com.mysql.jdbc.Driver());

3.System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");

 

常用ASCII码值:空格为32;数字0为48;“A”为65;“a”值为97。

在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错
 

Java集合框架

javac编译。javah生成c++头文档。javadoc生成解释API文档。jar,打包

java,exe是java虚拟机

javadoc.exe用来制作java文档

jdb.exe是java的调试器

javaprof,exe是剖析工具

定义在类中的变量是类的成员变量,可以不进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型例如int则会默认初始化为0

局部变量是定义在方法中的变量,必须要进行初始化,否则不同通过编译

Servlet生命周期分成3个阶段:

1)初始化阶段:调用init方法

2)响应客户请求:调用service

3)终止:调用destory方法


每天更新遇到的小知识点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值