1.JVM,JRE,JDK的作用和关系? *JVM JVM是java虚拟机(Java Virtual Machine),java程序需要运行在虚拟机上,不同平台有各自的虚拟机,java实现跨平台需要依赖 JVM *JRE JRE(Java Runtime Enviroment,java运行环境)包括java虚拟机和java程序所需的核心类库 *JDK JDK(Java Development Kit,java开发工具)包括JRE和开发工具包(编译工具(javac.exe) 打包工具(jar.exe)等) 简单而言:使用JDK开发完成的java程序,交给JRE去运行
2.& 和 &&, | 和 || 区别?
&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
3.switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
switch(表达式) 表达式的取值可以为:基本类型:byte,short,int,char,也可以是引用类型:枚举、String
4.continue和break两个关键字的区别?
break语句和continue语句的区别在于:break语句将终止整个循环语句,而continue语句只结束本次循环。另外break语句能应用于switch语句中,continue不能。
5.方法的重载是什么?如何判断两个方法重载?
*方法重载概述 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同 *方法重载特点 与返回值类型无关,只看方法名和参数列表 在调用时,虚拟机通过参数列表的不同来区分同名方法
6、char型变量中能不能存贮一个中文汉字?为什么? 一个字符占几个字节?
在Java中,char类型占2个字节,而且Java默认采用Unicode编码,以个Unicode码是16位,所以一个Unicode码占两个字节,Java中无论汉子还是英文字母都是用Unicode编码来表示的。所以,在Java中,char类型变量可以存储一个中文汉字。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。
7.this关键字代表什么?
*this:代表所在类的对象引用 方法被哪个对象调用,this就代表那个对象 *什么时候使用this呢 局部变量和成员变量重名
8.Person p = new Person();它在内存中做了哪些事情?
1:将Person.class文件加载到内存中。 2:在堆内存中创建一个对象Person。 3:把Person中的属性进行默认初始化。 4:把Person中的属性进行显示初始化。 5:调用构造代码块(如果没有,不执行这个操作)。 6:调用构造函数进行初始化。 7:在栈内存中声明Person类型的变量P。 8:把堆内存的地址(引用)赋给了栈内存中P。
9.抽象类有哪些特点?
1:一个类如果有了抽象方法,那么这个类必须是抽象类。抽象类里边可以没有抽象方法。 2:抽象类是不能够被实例化的。不能够创建对象的。 3:如果一个类继承抽象类,那么,它要么实现抽象类中的所有抽象方法,要么本身也是抽象类。 4:成员变量:子类可以直接继承抽象类中的成员变量。(抽象类中的成员变量可以和以前是一样的) 5:成员方法:抽象类中分为两种方法,一种是抽象方法,这种方法在子类中必须要被实现。 6:构造方法:抽象类不能被实例化,那么它有构造方法吗?抽象类是class,那么它就有构造方法。它的构造方法有用吗?有,为了让子类实例化的时候使用。
10.接口和抽象类的区别?
共性:不断的抽取,抽取出抽象的概念 区别1:与类的关系 类与接口是实现的关系,而且是多实现,一个类可以实现多个接口 类与抽象类是继承关系,java中的继承是单一继承,一个类只能有一个父类,Java中的继承是多层继承 区别2:成员 成员变量: 抽象类可以有成员变量,也可以有常量 接口只能有常量 成员方法: 抽象类可以有抽象方法,可以有非抽象方法 接口只能有抽象方法,而且方法有默认修饰符 public abstract 构造方法: 抽象类有构造方法的 接口没有构造方法
11.构造器Constructor是否可被override?
Constructor不能被继承,所以Constructor也就不能被override,但可以被重载Overload。每一个类必须有自己的构造函数,负责构造自己这部分的构造。子类不会覆盖父类的构造函数,相反必须负责在一开始调用父类的构造函数。
12.是否可以从一个static方法内部发出对非static方法的调用?
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。
13.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点: 1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果; 2、覆盖的方法的返回值必须和被覆盖的方法的返回一致; 3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类; 4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。 overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点: 1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int)); 2、不能通过访问权限、返回类型、抛出的异常进行重载; 3、方法的异常类型和数目不会对重载造成影响; 4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
14."=="和equals方法究竟有什么区别?
java中的数据类型,可分为两类: 1、基本数据类型(也称原始数据类型):byte,short,char,int,long,float,double,boolean,他们之间的比较,应用双等号(==),比较的是他们的值。 2、引用数据类型(类):当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址。所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。 对于引用数据类型之间进行equals比较,在没有重写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。所以,==比较的是栈里的地址,而equals比较的是栈里面地址所指向的堆里面的内容。
15.String,StringBuilder,StringBuffer三者的区别?
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。 运行速度快慢为:StringBuilder > StringBuffer > String 在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
16.接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?
接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,抽象类可继承具体类也可以继承抽象类。
17.List、Map、Set三个接口存取元素时,各有什么特点?
List以特定索引来存取元素,可以有重复元素。Set不能存放重复元素(用对象的equals()方法来区分元素是否重复)。Map保存键值对(key-value pair)映射,映射关系可以是一对一或多对一。Set和Map容器都有基于哈希存储和排序树的两种实现版本,基于哈希存储的版本理论存取时间复杂度为O(1),而基于排序树版本的实现在插入或删除元素时会按照元素或元素的键(key)构成排序树从而达到排序和去重的效果。
18.Java中有几种类型的流?
字节流和字符流。字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。在java.io 包中还有许多其他的流,主要是为了提高性能和使用方便。关于Java的I/O需要注意的有两点:一是两种对称性(输入和输出的对称性,字节和字符的对称性);二是两种设计模式(适配器模式和装潢模式)。另外Java中的流不同于C#的是它只有一个维度一个方向。
|