java面试常用问题的总结
1:JDK,JRE,JVM分别是什么?它们之间有什么关系? jdk是Java开发环境,jre是Java运行环境,jvm是Java虚拟机,jre包含jvm。 2:什么是环境变量?用户变量与系统变量有什么区别? 环境变量相当给系统和用户程序设置参数的,具体起什么作用跟具体的环境变量有关,也可以说环境变量 是给windows命令指路的,让Windows能找到可执行的命令。...
1:JDK,JRE,JVM分别是什么?它们之间有什么关系?
jdk是Java开发环境,jre是Java运行环境,jvm是Java虚拟机,jre包含jvm。
2:什么是环境变量?用户变量与系统变量有什么区别?
环境变量相当给系统和用户程序设置参数的,具体起什么作用跟具体的环境变量有关,也可以说环境变量
是给windows命令指路的,让Windows能找到可执行的命令。
用户变量只对当前用户有效
系统变量对所有用户有效
如果同一个命令在用户变量和系统变量都包含了,则会优先执行系统变量
3:Java中有哪些分支语句?
有if,if...else,if...else if...else ,switch
4:Java中有哪些关键字控制循环,它们有什么区别?
有continue,break,return,
continue是终止本次循环
break是终止循环
return是结束方法
5:数组的特征是什么?
1,数组一旦完成初始化数组的长度就不可以改变
2,数组中的元素类型必须是同一类型
3,数组不仅可以储存基本类型数据也可以储存引用类型的数据
4,数组本身是一种引用类型
6:方法重载的要求?
在同一个类里,方法名相同,参数列表不同(个数,类型,顺序);
7:成员变量与局部变量的区别?
成员变量:有类成员变量(有static修饰)和实例成员变量(无static修饰)两种
局部变量:有代码块局部变量,形参,方法局部变量三种
区别:作用范围不同,成员变量对整个类有效,局部变量只对该方法或代码块有用
定义成员变量是可以不初始化,局部变量除了形参之外,必须初始化
8:Equals与 == 的区别
==既可以比较基本类型,也可以比较引用类型,比较引用类型时,必须是父子关系
equals只能比较引用类型,比较是地址
9:接口与抽象类的区别
区别:
相同点:
1,都不能实例化
2,都有抽象方法
不同点:
1,接口只能定义常量,抽象类既可以定义常量也可以定义变量
2,接口里没有构造器和初始化块,抽象类有构造器和初始化块
3,接口里只有抽象方法,抽象类里有抽象方法和普通方法
4,接口可以实现多个,抽象类的继承只能继承一个
5,接口只能实现接口,不能实现其他类,抽象类即可实现接口,也可继承其他类
6,接口定义用interface,抽象类定义用extends
10:String,Stringbuffer与Stringbuilder的区别
区别:String是不可变得字符序列,Stringbuffer和Stringbuilder是可变字符序列
Stringbuffer是线程安全,Stringbuilder是线程不安全
Stringbuffer比Stringbuilder效率低
11:列出Collection接口常用方法
常用方法:add(),addAll(),remove(),removeAll(),retainAll(),size()
isEmpty(),contains(),containsAll(),toArray(),clear(),iterator()
12:用两种方法遍历集合元素,要求写出详细代码
第一种
List<Integer> list=new ArrayList<>();
for(int temp:list){
System.out.println(temp);
}
第二种
List<Integer> list=new ArrayList<>();
Iterator<Integer> iter=list.iterator();
while(iter.hasNext()){
int value=iter.next();
System.out.println(value);
}
13:述LinkedList与ArrayList的区别
区别:LinkedList是以链表的形式保存元素的,ArrayList是以数组的形式保存元素的
LinkedList增加和删除比ArrayList要快,ArrayList查询比LinkedList要快
14:简述HashMap与Hashtable的区别
区别:HashMap是线程不安全,Hashtable是线程安全
HashMap的key,value可以为null,Hashtable的key,value不能为null
Hashtable是继承Dictionary类,HashMap是继承Map类
15:Calendar对象里add和roll有什么区别
区别:add溢出时,会发生进位,roll溢出时,不会发生进位
16:处理Checked异常的方法
1:当前方法明确知道如何处理异常,程序应用try...catch块来捕捉异常,然后在对应的catch修复该异常
2:当前方法不知道如何处理该异常,应该在定义方法时声明抛出该异常
17:TreeSet的两种排序方法
自然排序:
class User implements Compareable<User>{
@Override
public int compareTo(User o1){
if(o1.getId()==getId()){
return 0;
}else if(o1.getId()>getId()){
return 1;
}
return -1;
}
}
定制排序:
TreeSet<User> tree=new TreeSet<>(new Comparetor<User>(){
@Override
public int compare(User o1,User o2){
if(o1.getId()==o2.getId()){
return 0
}else if(o1.getId()>o2.getId()){
return 1;
}
return -1;
}
});
18:自定义泛型
public class User<T>{
T id;
T name;
}
19:高级语言的分类以及区别
高级语言分为:编译性语言和解释性语言,
编译性语言:是指使用专门的翻译器,针对特定的平台(系统),将某种高级语言一次性翻译成该平台硬件执行的
的机器码,并包装成该平台可识别的程序格式
解释性语言:是指使用专门的解释器对源程序逐行解释成该平台的机器码并立刻执行的语言
区别:解释性语言比编译性语言跨平台性要好
编译性语言效率要比解释性语言高
20:jvm如何实现跨平台的?
jvm是跨平台的关键,只要为不同平台实现了相应的虚拟机,编译后的java字节码就可以在该平台上运行。
显然,相同的字节码程序需要在不同的平台上运行,这几乎是不可能的,只有通过中间的转换器材可以实现
jvm就是这个转换器。
21:Java程序的运行步骤
一,编译java程序,生成class文件
二,运行class文件
22:Java源文件命名规则
1:Java源文件的后缀必须是.java,不能是其他的后缀
2:在通常情况下,Java源文件的主文件可以是任意的,但有一种情况除外,
Java源文件里定义了一个public,那么源文件的主文件名必须和public类的类名相同。
23:程序的三大结构
顺序结构,选择结构(分支结构),循环结构三种结构。
选择结构又分为:if和switch,其中if有if(单选),if...else (双选),if...else if ...else(多选)。
循环结构又分为:for,foreach,while,do...while。
24:switch支持的类型以及注意的地方
支持的类型:int,char,short,byte,枚举,String(Java1.7)
注意的地方:case后的break不能省略,一旦省略,就会往满足后的条件和条件后面的代码执行
25:类和对象的定义以及他们的关系
类:是指具有相同特征的一类事物的总称
对象:是一个具体存在的实体
类是有多个对象组成的。
26:面向对象的三个特征
封装:将对象的实现细节隐藏起来,通过一些公用的方法,把它的功能暴露出来
继承:继承是面向对象实现软件复用的重要手段,子类继承父类,子类作为一个特殊的父类,
将直接继承父类的属性和方法。
多态:是指子类对象可以直接赋给父类变量,但运行时依然表现为子类的行为特征,
这意味着同一个类型的对象,调用同一个方法,呈现出多种行为特征
27:有那些分隔符以及他们的作用
有分号(;),圆括号(()),方括号([]),花括号({}),圆点(.),空格
分号:作为一行语句的结束
圆括号:定义形参和传入实参
方括号:访问数组的元素
圆点:用来类和对象访问它的成员
花括号:定义一段代码块
空格:分割一条语句的不同部分,合理缩进Java代码
28:标识符的规则
1,标识符可以包含数字,字母,下划线,美元符,但数字不能打头
2,标识符不能是关键字和保留字,但可以包含关键字和保留字
3,标识符不能有空格
4,标识符只能包含美元符,但不能是其他的特殊符号
29:什么是保留字和关键字?
保留字:是指Java现在还没有把它作为关键字,但在以后的版本中可能会把它当做关键字
关键字:是指具有特殊用途的单词
30:八大基本类型以及字节数
byte 1个字节
short 2个字节
int 4个字节
long 8个字节
boolean 1位
char 2个字节
float 4个字节
double 8个字节
31:整数常量的表示方法
二进制 用0b开头
八进制 用0开头
十六进制 用0x开头
32:常用的转义字符
\n 换行符
\t 制表符
\r 回车符
\b 退格符
\“ 双引号
\' 单引号
\\ 反斜线
33:浮点数的两种表达方式
十进制数表达示和科学记数法
34:变量的概念和定义以及常量的特点
概念:变量是Java最基本的储存单位,它是用来储存信息的,变量在重新运行中值是可以改变的
定义:一个类型,一个变量名,也可以对其进行初始化
常量:在程序运行中值不可以改变的,用final修饰,常量名一般用大写字母,多个单词需用下划线连接
35:自动转换和强制转换
自动转换:把某个基本类型的数值或变量直接赋给另一个基本类型的变量
强制转换:把范围大的数值或变量赋给范围小的变量
36:有那些运算符?
算术运算符
比较运算符
赋值运算符
逻辑运算符
位运算符
类型相关运算符
37:&和&&的区别
区别:
&是不短路与,if里的第一个条件不成立,后面的会继续执行
&&是短路与,if里的第一个条件不成立,后面的则不会执行
38:数值的特征
1,数值里的元素类型必须一致
2,数组一旦初始化结束,长度就确定下来了
3,数组不仅可以储存基本类型,也可以储存引用类型
4,数组本身也是一种引用类型
39:数组的初始化
数组的初始化分为:静态初始化和动态初始化
静态初始化:由程序员赋值,系统给定长度
动态初始化:程序员给定长度,系统默认初始化
byte,short,int,long系统默认的初始化值为0
double,float系统默认的初始化为0.0
char系统默认的初始化为\u0000
String和其他引用类型为null
boolean系统默认的初始值为false
40:this关键字的作用
this作为对象的默认引用有两种情况:
1,在构造器中引用该构造器正在初始化的对象
2,在方法中引用调用该方法的对象
this最大的作用是该类一个方法里调用该列另一个方法或属性
注意this不能出现在static修饰的方法中,在构造器中用this调用另一个构造器,this必须在第一行
this谁调用它,this就代表谁
41:方法属性的主要体现
1,方法不能独立,只能在类里定义
2,从逻辑上来看,方法要么属于类本身,要么该类的一个对象
3,方法永远不能独立执行,执行方法必须是类或对象作为调用者
42:可变长参数
1,一个方法只能定义一个可变长参数
2,传入的实参可以是一个变量,也可以是一个数组
3,可变长参数只能放在方法形参的最后一个
4,可变长参数只能用数组来接收
43:方法重载
方法重载:如果同一个类中包含了两个或两个以上方法的方法名相同,但形参列表不同,则叫方法重载
形参列表不同是指形参的个数,顺序,类型三个方面不同
注意的是方法重载与方法返回值类型,修饰符等其他部分没有任何关系
44:变量的特点
1,在同一个类里,成员变量对整个类有效,一个类里不能定义两个同名的成员变量,即便一个是类成员,
一个是实例成员也不行
2,一个方法里不能定义两个同名的方法局部变量,形参和方法局部变量也不能同名
3,同一个方法里不同的代码块局部变量可以同名
4,如果先定义代码块局部变量,后定义方法局部变量,那么代码块局部变量和方法局部变量可以同名
5,Java允许成员变量和局部变量可以同名,如果方法局部变量和成员变量同名,那么局部变量会覆盖
成员变量,如果需要被覆盖的成员变量,则可以用this或类来作为调用者
45:变量的使用规则
尽可能的缩小变量的作用范围,能使用局部变量就别使用成员变量,能使用代码块局部变量就别使用方法
局部变量,缩小变量作用范围,使得变量的生命周期变短,使得程序运行的性能更好
使用成员变量的情况:
1,一个属性需要在同一个类里的几个方法里共享
2,用于保存类或对象运行时的状态信息
3,用于描述类和对象固有的信息
46:封装的目的
1,隐藏类的实现细节,通过一些公共方法暴露该类的功能,从而加入一些逻辑控制语句,防止一些不合理的访问
2,便于修改,提高代码的可维护性
3,可进行数据检查,有利于对象信息的完整性
47:访问控制符的分类
default:包访问权限,可以访问同一个类中和同一个包中
private:当前类访问权限,只能在同一个类中访问
protected:子类访问权限,在同一个类中,同一个包中,子类中(不同的包)可以访问
public:公共访问权限,可以访问任意的类和包
48:package的作用以及定义
用于解决类的命名冲突,类文件管理等问题
定义:package必须放在该类的非注释(除了注释)的第一行,一个类里只有一个package
49:编译带包名的类和运行带包名的类
一编译带包名的类
1,类文件和指定的包在同一个目录下
javac 目录/Java文件名+扩展名
2,类文件和指定的包不在同一个目录下
javac -d . Java文件名+扩展名
二运行带包名的类
Java 包名.Java文件名
50:如何访问带包名的类
1,同一个包下可以自由访问
2,不同的包则需要带包名
3,用import导入包名
51:重写父类方法的规则
1,方法名相同
2,方法的形参列表相同
3,子类的返回值类型比父类的返回值类型要小或相等
4,子类声明抛出的异常类要比父类声明抛出的异常类小或相等
5,子类的访问权限要比父类的访问权限要大或相等
注意的是:重写父类的方法,要么两个是实例方法,要么两个是类方法,不能一个是实例方法,一个类方法
52:Field在继承体系中查找的顺序
1,查找该方法是否有该Field的局部变量
2,查找该类中是否有该Field
3,查找该类的直接父类,直接父类没有话,则就会一直上溯,直到Object都没有找到,
系统则会重新编译错误
53:强制类型转换需要注意的地方
1,基本类型之间的转换只能发生在数值类型之间进行
2:引用类型之间的转换只能发生在具有继承关系的两个类型之间
54:静态初始化块,初始化块和构造器的执行顺序
1,最先执行Java.lang.Object类的静态初始化块,然后执行父类的静态初始化块,
最后执行该类的静态初始化块
2,先执行java.lang.Object类的初始化块,然后执行java.lang.Object的构造器
异常向下执行其父类的初始化块,开始执行其父类的构造器,最后执行该类的初始化块和构造器,
最后返回该类的对象。
55:什么是包装类?
为了解决八大基本类型不能当做Object类型使用的问题,Java提供了包装类的概念,分别为其定义了相应的
引用类型,称之为包装类,
56:自动装箱和自动拆箱的概念以及之间的转换
自动装箱:就是把一个基本类型直接赋给相对应的包装类变量,或者赋给Object变量
自动拆箱:就是把包装类变量直接赋给相对应的基本类型变量
基本类型——>包装类:1,构造器 2,自动装箱 3,valueOf
包装类——>基本类型:1,自动拆箱 2,value
57:为什么要重写toString?
因为Object里的toString打印出来的信息是一串看不懂得信息,如果用户需要自定义类实现自己想看到的
信息,就必须重写Object类里toString方法
58:为什么要重写equals方法以及重写equals方法的规则?
因为Object类提供的equals方法没有太大的实际意义,equals方法和==比较引用类型时,
他们的规则是一样的,都是比较两个类型的地址,如果希望采用自定义的相等标准,则可采用
重写equals方法来实现。
规则:
1,自反性:对于任意x,x.equals(x)一定返回true
2,对称性:对于任意x和y,x.equal(y)和y.equals(x)返回的结果是一样的
3:一致性:对任意x和y,如果对象中的等价比较的信息没有改变,那么调用x.equals(y)
多少次,返回的结果是一致的
4:对任意不是null的x,x.equals(null)必定返回false
59:final的特点
1,final修饰的类是最终类,不能被继承
2,final修饰的方法是最终方法,不能被覆盖
3,final修饰的变量是常量,只能被赋值一次,常量名需大写,修饰基本类型时,常量值是不可改
变的,修饰引用类型时,不可改变的是地址,值是可以改变的。
4,final修饰的成员变量必须给定初始值,局部变量定义时可以不给定初始值
60:抽象类和接口的区别
相同点:
1,都不能创建实例
2,都有抽象方法
不同点:
1,接口只能定义常量,抽象类里既可定义常量,也可定义变量
2,接口只能定义抽象方法,抽象类既可定义抽象方法,也可定义普通方法
3,接口里没有构造器和初始化块,抽象类既有构造器,也有初始化块
4,接口使用的是interface来定义,抽象类使用的abstract class来定义
5,接口只能实现接口,不能实现其他类,抽象类可以继承其他类,也可以实现接口
6,接口可以实现多个接口,抽象类的继承只能是单继承
7,接口用implement来实现,抽象类用extends来继承
61:抽象类的规则
1,抽象类必须用abstract来修饰,抽象方法也必须用abstract来修饰,抽象方法不能有方法体
2,抽象类不能被实例化,无法使用new来调用抽象类的构造器来创建抽象类的实例
3,抽象类包含构造器,初始化块,属性,方法,枚举,内部类六种成分,抽象类的构造器主要
是让子类来调用的
4,含有抽象方法的类只能被定义为抽象类
62:抽象类和接口需要注意的地方
1,abstract和final不能同时使用,abstract修饰的方法和类都必须被继承,而final修饰的类和方法
是不能被继承和覆盖的
2,abstract不能修饰属性,局部变量和构造方法
3,abstract不能和static同时使用,static修饰的方法,是属于类本身,类可以直接调用,如果再用
abstract修饰的话,那么类调用没有方法体的方法,则会出错。
4,abstract不能和private同时使用,private修饰的方法是不能被继承的,而abstract修饰的方法则
是需要被继承的,所以两者不能同时使用
63:内部类的作用
内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他的类访问该类
64:成员内部类的语法
1,成员内部类可以是private,protected,public等任意修饰符
2,包含内部类在内的类文件编译生成N(内部类的个数)+1个class文件,
成员内部类class文件的形式总是为:外部类$内部类.class
3,非静态内部类可以访问外部类的任意成员
4,静态外部类不能访问非静态内部类
5,在非静态内部类方法查找某个变量的顺序:内部类局部变量——>内部类成员变量——>外部类成员变量
——>无(系统提示找不到)
6,如果外部类成员变量,内部类成员变量,内部类局部变量重名,则可是要this,外部类名.this来区分
7,外部类访问内部类的成员,需内部类创建对象来访问其实例成员
8,外部类的静态成员不能访问非静态内部类
9,非静态内部类不可以有静态初始化块,但可以有普通初始化块
10,非静态内部类可以有静态成员,也可以有非静态成员,静态内部类不能访问外部类的实例成员
但可以访问外部类的类成员
65:枚举类和普通类的区别
1,枚举类可以实现一个到多个接口,使用enum定义的枚举类继承的Java.lang.Enum类,而不是继承Object类
2,使用enum定义,非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类
3,枚举类的构造器只能是private修饰,如果省略了也会默认private修饰
4,枚举类的实例都必须在类的第一行显示列出,否则枚举类就永远不能产生实例,列出这些实例时,
系统会自动添加public static final修饰,无须程序员显示添加
5,所有的枚举类度提供了一个values方法,该方法可以很方便的遍历所有的枚举值
66:如何手动实现枚举类?
1,通过private把构造器隐藏起来
2,把该类的所有实例都用public static final修饰的类变量来保存
3,如果有必要,可以提供一些静态方法,允许其他程序根据特定参数来获取与之匹配的实例
67:Java集合的作用
Java集合是一种特别的有用的工具类,可以储存数量不等的多个对象,并可以实现常规的数据结构,如栈,队列,
列表等,Java集合还可以保存具有映射关系的关联数组
68:Java的分类
set:无序且不可以重复的集合
List:有序且可以重复的集合
Queue:代表一种队列集合
Map:代表具有映射关系的集合
69:Vector和ArrayList的区别
Vector和ArrayList都是以数组实现的
Vector是线程安全,ArrayList是线程不安全
70:Stack常用的方法
peek:获取Stack的第一个元素
pop:删除Stack的第一个元素
push:将元素推进栈
71:HashSet的特点
1:不能保证元素的排序顺序,顺序可能和添加的不一样,可能是发生变化
2:HashSet不是同步的,如果多个线程来访问HashSet的话,需要代码来保证同步
3,集合元素值可以为null
72:TreeSet的额外方法
lower: 返回集合中小于指定元素的最大元素,
higher: 返回集合中大于指定元素的最小元素,
first: 返回集合的第一个元素,
last: 返回集合的最后一个元素,
subSet: 返回集合的set子集,
headSet:返回集合从头开始,到指定位置的set子集,
tailSet:返回集合从指定位置开始到集合最后一个元素的set子集
73:TreeSet需要注意的地方
TreeSet集合里的对象所属类必须实现Java.lang.Comparable接口,否则将引发ClassCaseException异常
TreeSet集合判断两个对象对象是否相等的唯一标准:两个对象通过compareTo方法班级是否返回0
74:Arrays常用的方法
asList:把数组转换为List集合
copyOf:把旧数组复制到新数组里
fill: 把数组的值都赋值为fill指定的元素
sort: 对数组进行排序
75:Queue常用的方法
add:把元素加入队列的尾部
element:获取队列的第一个元素
offer:把元素加入队列的尾部
peek:获取队列的第一个元素
poll:删除队列的第一个元素
remove:删除队列的第一个元素
76:Map常用的方法
clear: 清除Map里的使用key—value对
containsKey: 查找Map里是否包含了指定的key
containsValue:查找Map里是否包含了指定的value
entryKey: 返回Map里key-value对所组成的Set集合
get: 获取Map里指定key下的value值
isEmpty: 判断Map是否为空
keySet: 返回Map里由key组成的Set集合
put: 向Map里增加一个key-value对
putAll: 向Map里增加一个Map集合
remove: 删除Map里的key-value对
size: 返回Map里key-value的个数
values: 返回Map里所有value组成的Collection
77:Collections集合工具类常用的方法
reverse:反转指定List集合的元素顺序
sort: 对List进行自然排序并按升序排列
swap: 对List的指定两个下标元素进行交换
rotate: List里的元素整体向后移动指定个数位置
max: 返回List里的最大的元素
min: 返回List里的最小的元素
fill: 把集合里的所有元素都替换成指定的元素
frequency:统计指定元素出现的次数
replaceAll:用新的元素替换所有包含指定元素的旧元素
indexOfSubList:查找子List在父List首次出现的位置
lastIndexOfSubList:查找子List在父List最后出现的位置
sort对list集合的自定义排序:
Collections.sort(list,new Comparator<Integer>(){
@Override
public int compare(Integer o1,Integer o2){
if(o1==o2){
return 0;
}else if(o1>o2){
return -1;
}
return 1;
}
});
78:Date和Calendar之间的转换
Calendar——>Date
Calendar calendar=Calendar.getInstance();
Date date=calendar.getTime();
Date——>Calendar
Calendar calenar=Calendar.getInstance();
calendar.setTime(new Date());
79:Calendar常用的方法
add:为给定的日历字段增加或减少时间量,当给定字段超过允许的范围时,会发生进位
get:返回给定日历字段的值
roll:为给定的日历字段增加或减少时间量,当给定字段超过允许的范围时,不会发生进位
set:将给定的日历字段设置为指定的值
80:完成国际化的三个步骤
1,获取Locale对象
2,绑定资源文件
3,获取消息
81:国际化涉及的三个类
1,Java.util.ResourceBundle 加载国家,语言资源包
2,java.util.Locale 用于封装特定的国家/区域,语言环境
3,java.util.MessageFormal 用于格式带占位符的字符串
82:国际化资源文件命名的三种形式
1,baseName_langage_country.properties
2,baseName_langage.properties
3,baseNaem.properties
83:NumberFormat对数字进行格式化的四种类型
1,getCurrencyInstance 格式化货币语言环境
2,getIntegerInstance 格式化整数语言环境
3,getNumberInstance 格式化通用数字语言环境
4,getPercentInstance 格式化百分比语言环境
84:泛型的定义
泛型就是指定义类,接口,方法时使用的形参
85:什么时候使用类型通配符?
当我们定义集合形参时并不知道要定义什么类型,所以,为了表示各种泛型List的父类,我们就使用的泛型
通配符上限:只想表示它是某一类泛型List的父类
86:异常的五大关键字
try,catch,finally,throw,throws
87:异常的分类
分为Checked异常和Runtime异常
Checked异常:是在编译阶段出现的异常
Runtime异常:是程序运行中出现的异常
88:Error错误
一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误等,这种错误无法恢复或不可能捕捉,将导致
程序中断
89:捕捉异常常用的几个方法
1,getMessage 返回该异常的详细描述字符串
2,printStackTrace 将该异常的跟踪栈信息输出到标准错误输出
3,printStackTrace(PrintStream s) 将该异常的跟踪栈信息输出到指定输出流
4,getStackTrace 返回该异常的跟踪栈信息
90:异常处理规则
成功的异常处理需要实现4个目标
1,使程序代码混乱最小化
2,捕捉并保留诊断信息
3,通知合适的人员
4,采用合适的方法结束异常活动
达到4个目标的基本准则
1,不要过度使用异常
2,不要使用庞大的try块
3,避免使用catch All语句
4,不要忽略捕捉到的异常
91:File访问文件常用的方法
1,getName 返回File对象的文件名或目录名
2,getPath 返回File对象的文件或目录的路径
3,getAbsoluteFile 返回File对象所对应的绝对路径对应的File对象
4,getAbsolutePath 电话File对象的绝对路径名
5,renameTo 重命名File对象的文件名
6,getParent 返回File对象的上一级的父目录
92:File文件检查常用的方法
1,exist 判断File对象所对应的文件名或目录名是否存在
2,canReader 判断File对象所对应的文件或目录是否可读
3,canWriter 判断File对象所对应的文件或目录是否可写
4,isFile 判断File对象是否为文件,而不是目录
5,isDirectory 判断File对象是否为目录,而不是文件
6,isAbsolute 判断File对象所对应的路径是否是绝对路径
93:什么是节点流,什么是处理流,哪些流是节点流,哪些是处理流?
节点流:从/向一个特定的I/O设备读/写数据的流
处理流:对一个已存在的节点流进行连接和封装,通过封装后的流来实现数据的读/写功能
节点流有:
FileInputStream 访问文件 从文件中以字节的形式把信息读到Java程序中
FileOutputStream 访问文件 从Java程序中把信息以字节的形式写入文件中
ByteArrayInputStream 访问数组 从缓冲数组中以字节的形式把信息读中到Java程序
ByteArrayOutputStream 访问数组 从Java程序中以字节的形式把信息写入缓冲数组里
FileReader 访问文件 从文件中以字符的形式把信息读到Java程序中
FileWriter 访问文件 从Java程序中以字符的形式把信息写入文件中
CharArrayReader 访问数组 从缓冲数组中以字符的形式把信息读中到Java程序
CharArrayWriter 访问数组 从Java程序中以字符的形式把信息写入缓冲数组里
StringReader 访问字符串 把字符串的字符流读到Java程序中
StringWriter 访问字符串 把字符串写入到StringWriter流中
处理流有:
BufferedInputStream 缓冲流 从缓冲区里以字节的形式把信息读到Java程序中
BufferedOutputStream 缓冲流 把Java程序中的信息字节的形式写入缓冲区里
PrintStream 打印流 把Java程序中信息以字节的形式打印到输出台或指定的文件里
PushbackInputStream 推回输入流 把指定的字节重新推回到输入流中
ObjectInputStream 对象流 把文件中的对象信息以字节的形式读入到Java程序中
ObjectOutputStream 对象流 把对象以字节的形式写入到文件中,并以二进制的形式保存在文件里
DataInputStream 特殊流 把文件中保存的八大基本类型和字符串读入到Java程序中
DataOutputSteam 特殊流 把八大基本类型和字符串写入到指定的文件中
BufferedReader 缓冲流 从缓冲区中把信息以字符的形式读入到Java程序中
BufferedWriter 缓冲流 把Java程序中信息以字符的形式写入到文件中
PrintWriter 打印流 把Java程序中的信息以字符的形式打印到输出台或指定的文件中
InputStreamReader 转换流 把文件的字节信息以字符的形式读入到Java程序中
OutputStreamWriter 转换流 从Java程序中把字符以字节的形式写入到指定的文件中
PushbackReader 推回输入流 把指定的字符重新推回到输入流中
94:写出所遇到常见的异常
FileNotFoundException 找不到文件异常
IOException IO异常
NullPointerException 空指针异常
ArrayIndexOutOfBoundsException 数组越界异常
ClassCastException 类型强转异常
ArithmeticException 算术异常
ClassNotFoundException 类找不到异常
95:怎么自定义一个异常类
1,新建一个类文件,并继承Exception或RuntimeException
2,创建两个构造器,一个为空,一个打印信息
3,在方法中用throw抛出该异常类
4,用创建的自定义类类名作为catch的形参来捕捉抛出的异常
96:ArrayList要加入10000条数据,该怎么提高效率?
ArrayList的底层是数组实现的,数组的默认长度为10,如果插入10000条数据,就会要不断的
扩容,这样就会耗时间,所以,我们在创建ArrayList集合时,改变默认的容量,这样效率就提高了
97:Collection和Collections的区别
区别:
Collections是操作List和Set的工具类,
Collection是一个接口,List和Set的父接口
98:比较集合和数组的优缺点
集合是可以储存多个对象的容器,它可以储存不同类型的对象
数组只能储存相同类型的数据,但数组是大多数语言都支持的底层数据结构,性能上是最高的
99:变量和常量的区别
相同点:
都是储存数据的容器
不同点:
常量在运行中是不可以被改变的,变量在运行中是可以被改变的
常量的命名一般是大写,多个单词之间是用下划线来连接的
变量是根据驼峰法来命名的
常量在类型前面必须加上final修饰
常量定义成员变量时,必须初始化,定义局部变量时,可以不初始化
变量定义成员变量时,可以不初始化,定义局部变量时,必须要初始化
100:递归概述
定义:递归就是在方法里自己调用自己
递归的出口:使用return语句
好处:代码更加简洁清晰,可读性更好
坏处:递归太深的话,资源不够,或者直接栈溢出
经常使用的地方:迭代树和迭代链表
101:队列和栈的比较
队列是先进先出(FIFO)
栈是后进先出(LIFO)
102:二叉树的查询
前序查询:中,左,右
中序查询:左,中,右
后序查询:左,右,中
更多推荐
所有评论(0)