Java百题大全-猎羽版
转载请注明链接:http://blog.csdn.net/feather_wch/article/details/78733436
猎羽版Java百题大全,目标是收录Java的22个分类中所有知识点。希望对希望掌握Java的人有一定帮助。因为都是本人一点点积累总结而来,难免会有错误和疏漏,希望能不吝惜赐教,非常感谢!
0-最基本知识点-10题
1、java特点
是一次编译到处运行
2、JDK组成
包括jre(java运行环境),类库(3600多种,常用160多),工具(javac.exe,java.exe)
3、java代码编译到运行流程:
1.编写源文件 2.javac生成字节码文件 3.解释器将其加载到java虚拟机中运行(jvm)
4、下面基本类型是否使用正确
int a = 1.2; ×
int a = (int)1.2; √
float f = 3.4; × 解析:3.4字面为double
float f = 3.4f; √
int a = 3;
int b = a + 3.4; × 解析:a自动转为高精度
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
5、System.exit(-1)是什么?
-1 终止当前运行的java虚拟机
非0 异常中止
6、封装体现在哪里?
- 将具体实现保护在类内部
- 访问控制修饰符
- 包的功能
7、包的功能
- 同名类区分开
- 方便管理
- 控制访问范围-使用方法:
package com.xiaoqiang;
import com.xiaoqiang;
8、继承要点
- 子类最多继承一个父类
- jdk所有类为object子类
- 方法重载:子类不能缩小父类方法的访问范围
9、final 作用:功能(常量)
- 方法不希望被overide
- 变量不希望被改变
- final class不能被继承
10、this
- this用于指明具体的object
- this只能用在非静态方法中。
1-对象导论-4题
1、OOP是什么?
Object-oriented programming(OOP)面向对象编程。
2、 抽象是什么?
例如:汇编语言就是底层机器的抽象,C语言是汇编语言的抽象,C语言的抽象还是需要我们关注计算机的结构,而不是试图解决的问题的结构。C语言就是典型的面向过程编程。OOP使得程序员不局限于具体的问题。
3、 OOP五大基础特性
- Everything is an object.
- Program is abundle of objects,对象通过发送消息告诉彼此应该做什么。
- Each object has its own memory made up of other objects(暂译:每个对象都有自己的内存由其他对象组成):你创造的对象可以由其他对象组成,这样将复杂内容隐藏在简单对象背后,就可以将复杂内容构建进程序中。
- 每个object对象都有一个type类型:每个对象都是一个class(类)的实例(instance)
- 所有的特殊类型对象都可以接受相同的消息(messages)——例如circle对象也是shape对象,因此circle对象一定能接受shape的消息。这种可替换性也是OOP非常有用的概念
4、什么是对象?
一个对象拥有state、behavior和identity(身份)。也就是拥有内部数据、方法和区别于其他任何对象(可以说,每个对象拥有唯一的内存地址)。
2-一切都是对象-11题
1、java和C++的联系
相比于C++,java是更纯的OOP语言。C++和java都是混合语言,但是C++对于混合重视更多,因为C++是向下兼容C语言的,使得一些C++的方面更加复杂。
2、内存有哪几部分?具体作用?
- register寄存器:最快的内存,无法控制。在处理其中,数量非常有限。
- stack:在RAM中,通过栈指针来分配和释放内存。这是仅次于寄存器的最快内存。基本数据类型,对象的引用等程序中所有内容在其生命周期里都位于stack中。
- heap:一般目的的内存池,也位于RAM中。存储了所有对象。不需要程序员控制资源释放,但是它会比stack消耗更多的功夫在资源调度和回收上。
- 常量内存(constant storage):存放常量,有些常量在嵌入式系统中也会被选择性放到ROM中。
- Non-Ram Storage(非RAM内存):存放在程序之外的数据,比如数据库之类。
3、我们使用引用操作对象
4、 原始类型是什么?有什么用?
相比于对象,java提供了原始类型数据,这些数据不通过引用,直接拥有该数据,并且都被存储在
stack
中。因此原始类型是非常高效的。
5、 原始类型数据有哪些?所占大小是多少?
boolean
char 16bits
byte 8bits
short 16bits
int 32bits
long 64bits
float 32bits
double 64bits
void
6、Java中所有的数都是有符号的
7、 Java中需要高精度数的时候,用什么对象?
BigInteger和BigDecimal,可以和int、float结合使用,只是需要使用方法而不是操作符。
8、class由什么组成?
成员变量和成员方法
9、Java中如何处理数组越界
Java会进行范围判定,越界后会抛出异常。
10、static的作用
- 表明特定的成员变量和方法不依赖于具体的对象。也会被称为类数据和类方法(class data\class method)
- static指定的method可以通过object.method()和Class.method()调用,成员变量也相同。
- 静态类方法不能访问非静态方法和变量
- 类的非静态方法不能调用静态方法
11、tags是什么
提供作者、版本、是否废弃等信息
如@author等等
3-操作符-4题
1、!,~作用
!非,~按位取反
2、子面值是什么?内容?
0x2f 十六进制,float
0x2F float
0177 八进制
200L long int
200l long in
200 int
0.1F float
0.1f float
0.1D double
0.1d double
1.39 e-43f = 1.39 x 10-43 //科学计数法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
3、位运算符
& 位与
| 位或
^ 位异或
~ 位取反
- 1
- 2
- 3
- 4
4、位移操作符
<< 补0
>> 补符号位0 or 1
>>> 补0
- 1
- 2
- 3
4-控制执行流程-2题
1、switch可以用于哪些数据类型
仅有五种:byte、short、int、char、enum
2、java中一共有哪些控制执行的方法
if-else
while
do-while
for
return
break
switch
continue
goto: 只是保留字,还没有使用。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
5-初始化与清理
6-访问权限-1题
1、public、private、protected、默认的区别
修饰符 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
默认 | √ | √ | ||
private | √ |
7-复用类
8-多态-3题
1、什么是多态?
一个引用(类型)在不同情况的多种状态
2、抽象类?
形如:abstract class Animal(){};
1. 不一定有抽象方法
2. 不能被实例化
3. 子类必须实现抽象方法
4. 可以有变量
5. 抽象方法不能被实现
3、接口与抽象类区别
- 接口是对继承的一种补充
- 去掉接口不会影响其余代码?
- 接口能继承接口,不能继承类
9-接口-7题
1、接口的作用
- 接口中变量为 static,final int a = 0。常用作全局变量。例如:Usb.a
- 接口可以继承接口
- 体现了多态,以及高内聚低耦合的特点
2、接口和抽象类的区别
- interface所有方法不能实现。是更为抽象的抽象类。
- 类能implements 多个接口,但只能继承一个父类
3、接口是否会继承?
子类会继承父类关于接口的实现
4、 抽象类abstract
- 一个class包含abstract方法,该class也必须为abstract类
- 不能实例化abstract类
- 一个具体类继承抽象类,必须实现抽象类的所有抽象方法
- 抽象类可以继承抽象类,并且可以不实现其中的抽象方法
- 抽象类可以不包含任何抽象方法。
5、 Interface
- 在两个类之间建立一种协议“protocol”
- 能实现多重继承
- 接口可以有成员变量,但是会隐含的加上static和final
- 接口的方法methods必须为public
6、接口作用:
- 解耦
- 多重继承
- 可以用于声明一组常量:接口中成员变量自动加上static和final。(这些数据会存储在静态存储区域)
7、类继承超类并且实现了另一个接口
class继承class和实现interface,之前所有同名的方法,必须要可以通过参数区分,如果仅仅返回值不同,是无法区分会报错的。因此,不同Interface最好method name不同
8、抽象的定义和作用以及实现方法
定义
:将一类事物的共同特征
总结出来并且构造出一类事物的过程(数据抽象
和行为抽象
,不会去关注属性和行为
内部具体的细节)作用
:1-隐藏具体实现
方式 2-提供扩展的能力
实现方式
:抽象类和接口
9、抽象类的特点
抽象类
是类对象的抽象集合
抽象类
用关键字abstract
修饰,不能用final
修饰抽象类
。抽象方法
不能用private、static、final或native
修饰。- 包含
抽象方法
的类一定要是抽象类
抽象类
不一定要有抽象方法
抽象类
不能被实例化
10、接口的特点
接口
是类行为方法的抽象集合
接口
用interface
修饰接口
中所有方法都是抽象且公有的
接口
中的属性都是全局变量
=public static final(不用写)接口
只能继承接口
接口
不能实例化-继承接口的子类
可以实例化
11、接口和抽象类的区别
- 抽象的层次: 1-抽象类抽象整个事务包括属性和方法 2-接口是对行为的抽象
- 抽象类
单继承
;接口多重继承
- 抽象类
方法和属性
可以抽象或者不抽象;接口中的必须抽象- 抽象类的实现类可以改变
其成员变量
,接口的实现类不可以改变属性=常量
12、子类继承父类的访问修饰符只能比父类的更大或者一致
10-内部类-4题
1、内部类和组合(Composition)的区别
2、内部类的作用
- 代码隐藏机制:将class放置于其他class之间。
- 内部类知道如何与周遭的class(surrounding class = 包含内部类的外部类)交流-【可以自由使用外部类的所有变量和方法】
- 通过内部类写的代码是简洁清爽的
3、 内部类的一个特殊实例
如果你想在任何外部类的非静态方法以外的方法中获得内部类的对象,都需要调用
外部类名
+.
点+内部类名。
而且需要在外部类中额外创建一个返回该内部类的方法。
public class Test {
class C{//内部类
}
public C getNewC() {//返回内部类的方法
return new C();
}
public static void main(String[] args) {
Test test = new Test();
Test.C c = test.getNewC(); //在外部类的静态方法中获得对象
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
4、内部类会拥有外部类的链接link(可能会导致内存泄露!)
一个内部类的对象会拥有其外部类的链接/引用/link,这样能用来访问该外部类的对象的成员。
5、内部类和静态内部类的区别
- 使用方法不同
static class Outer {
class Inner {}
static class StaticInner {}
}
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
Outer.StaticInner inner0 = new Outer.StaticInner();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
Oracle说法:一个被称为静态嵌套类,一个被称为内部类。
嵌套就是指两者没太大关系,静态内部类可以完全独立存在,但是就是借用外部类的壳来隐藏自己。静态内部类起到了一种注释的效果。A.B表明B类与A相关。且降低包的深度,方便类的使用
11-集合-7题
1、集合有哪些?
LinkedList、ArrayList、HashMap、HashSet、HashTable、Vector等
2、集合的包
java.util.*
3、集合的区别
Hashtable |
HashMap |
Vector |
ArrayList |
4、要求线程安全用什么?
Vector、hashtable
5、没有线程安全要求用什么?
ArrayList、LinkedList、HashMap
6、有键值对?
HashMap、HashTable
7、数据量很大且要求线程安全
Vector
12-异常-15题
1、Throwable和三大异常子类
Throwable是所有异常和错误的超类。包含三个异常子类。
1. Error
2. Exception
3. RuntimeException:如NullPointerException等异常都自动由java抛出
2、4种finally不会被执行的情况
1.system.exit()
2.线程异常
3.finally异常
4.CPU关闭
3、为什么需要异常处理?
工程师最理想状态是在编译时就能发现所有错误,但是不是所有的错误都可以被找到。这些错误需要在运行时被处理,这就需要异常处理机制。
异常作用:在合适层级修复问题,以完成预期功能,并提高系统的健壮性、安全性。
4、 异常处理的优点
1.提高系统的稳健性。
2.减少处理错误的代码的复杂度。
3.不需要再在方法调用中去处理,而是直接在exception handler去处理。
5、 为什么要throw exception
当前异常的环境无法处理该异常,就需要将问题提交给更高层去处理。
抛出异常也可以看做一种return机制,当抛出异常时,其所处的方法就会退出。
6、抛出异常时的流程
- exception对象会被创建,如同其他java对象被new创建一样,创建在堆heap中。
- 当前异常的路径会停止,并且异常对象的引用会被当前context抛出。
- 此时,异常处理机制(exception-handling mechanism)会接管,并且开始寻找合适的地方去继续执行程序。
- 合适的地方-exception handler,异常处理,会进行问题修复。
7、 try-catch和switch区别
try-catch由上至下匹配异常类型,一旦匹配到就会进入相应的catch进行处理,处理完成后不会继续向下匹配。而switch必须通过break来停止流程。
8、 自定义异常
class SimpleException extends Exception{}
,一般都不需要自己实现内容,直接继承Exception即可。一个异常最重要的部分就是类名。
9、 catch中rethrow异常
catch(exception e){
throw e;
}
- 1
- 2
- 3
这里再次抛出的异常e,本身类型是其初始的类型,而不会变成Exception类型。这种特性被称为-exception chaining,异常链
10、finally作用
- 执行无论异常与否都必须执行的代码。
- 可以用于文件、网络连接等内容的清理工作。
- 在涉及到break和continue的部分,finally也一定会执行(在java中都可以消除goto的需求)
11、 finally和return
- 在finally之前的任何return都不会影响finally块的执行。
12、 finally缺陷:会丢失异常
1.finally中抛出异常可能会导致丢失异常
try {
try {
//抛出异常a
} finally {
//抛出异常b
}
} catch (Exception e) {
//获得异常b, 而异常a丢失
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2.finally中return
try {
throw new RuntimeException();
} finally {
//在finally中return,会导致本该抛出的异常却丢失了
return;
}
- 1
- 2
- 3
- 4
- 5
- 6
13、exception 限制
子类重写的方法,抛出的异常不能比superclass该方法抛出的异常范围大。
子类重写的方法,抛出的异常要在superclass该方法抛出的异常范围之内。
子类构造器中,可以抛出任何范围的异常,而不会受到限制。
14、Constructors(构造器)中产生异常,如何关闭需要清理的资源,如文件?
绝对不能在finally中清理资源。
1. 这样会导致无论异常与否资源都会被清理
2. 而且前面的异常可能会导致需要被清理的资源本质上也没创建。
15、不知道如何处理某些异常:将其转换为系统处理的异常
throw new RuntimeException(e); //不知道如何处理,直接转换为Runtime异常抛出。
13-String-1题
1、String比较
astr.equals(bstr) 比较对象是否相等
== 仅仅是比较首地址
14-类型信息
15-泛型-13题
1、多元组tuple是什么?作用?
将一组对象包装到一个对象中。用于一些methods需要返回多个对象的时候。
2、在同时有需要两个、三个等更多返回对象的时候怎么处理?
实现TwoTuple,然后Three、Four层层继承(类似于装饰者模型)
3、泛型的典型应用:stack、List等数据结构
4、泛型接口的定义和作用
public interface Generator…
泛型接口常被用于各种类的生产器中。
5、泛型方法定义
泛型方法需要将泛型参数列表,放置于返回值前(
public <T> void genericMethod(T a)
)
6、泛型方法和泛型类的区别
- 泛型类需要在实例化时指定参数的类型
- 泛型方法不需要指明,编译器会自动识别。
7、泛型方法可以和可变参数完美配合
8、泛型的边界限制
class Colored<T extends MyColor>
,T必须为MyColor的子类
9、泛型边界限制同时有类和接口
<T extends MyClass & MyInterface>
要先类后接口
10、泛型限制在泛型方法中的使用
public <T extends Number> T showKeyName(Generic<T> container){...}
需要在泛型列表中进行限制,而不能在参数中限制。
11、泛型通配符
?表示是所有类型的超类
12、静态方法与泛型
如果静态方法要使用泛型,则必须将静态方法变成泛型方法。
13、泛型数组:Java终不能创建一个确切的泛型类型的数组
List<String>[] ls = new ArrayList<String>[10]; × 不可以
List<?>[] ls = new ArrayList<?>[10]; √ 可以
List<String>[] ls = new ArrayList[10]; √ 可以
- 1
- 2
- 3
16-数组-2题
1、基本数据类型数组
int a[] = {1,2,3};
int a[] = new int[3];
int []a = new int[3];
- 1
- 2
- 3
2、对象数组定义
对象数组仅仅存放引用,定义数组后还需要给每个元素new一个对象。
17-容器
18-I/O
19-枚举
20-注解-7题
1、注解作用
为源代码文件提供元数据
2、注解原则
注解不能干扰程序的运行,无论增加或者删除注解,代码都能运行。
3、注解的分类:
标准注解(没有元素的注解)
元注解(负责注解其他注解)
4、元注解的作用:
编写文档、代码分析、编译检查
5、提取注解
java.lang.reflect.Field有getDeclaredFields()、field.isAnnotationPresent、field.getAnnotation..等方法能够提取注解(参考下面实例)
6、标准注解有哪些?作用
@Override, 表明一个重载自父类的方法,避免出现方法名错误或者参数写错。
@Deprecated, 当该元素被使用的时候产生警告。
@SuppressWarnings, 镇压/关闭掉不合适的编译器警告。
7、元注解有哪些?作用
@Target 表明该注解用在哪里
@Retention 注解信息持续多久(会被编译器丢弃,还是运行时还存在,等等)
@Documented 在javadocs中包含该注解
@Inherited 允许子类基础父类的注解
21-并发
22-反射-5题
1、Java中识别对象和类信息的两种方法?
传统RTTI(它假定我们在编译时已经知道了所有的类型信息);反射机制(它允许我们在运行时发现和使用类的信息)
2、RTTI(RunTime Type Information)是什么?
允许你在程序运行的时候发现和使用类型信息。会在所有类第一次使用的时候,将class对象(保存在.class文件)动态及再到JVM。都必须在编译时已知。
3、 反射机制实现方法
class类和reflect类库对反射进行了支持,通过里面的Field、Method和Constructor等类,能够确定对象信息,而在编译时不需要知道类的任何事情。但是反射的.class文件在运行的时候也必须是已知的,.class文件可以在本地也可以通过网络获得。
4、 反射和RTTI的本质区别
RTTI:编译器在编译时打开和检查.class文件
反射:运行时打开和检查.class文件
5、JVM加载对象的方法
类的信息会存在方法区,类加载器会通过方法区的类信息,在堆Heap上创建一个类对象(Class对象),这个类对象是唯一的,后续的New等操作都是通过这个唯一的类对象作为模板去进行new等操作。