这里是引用
**Java基础
基础语法
关键字
final关键字用法
修饰变量:是常量,不能被二次赋值
修饰方法:不能被重写
修饰类:不能被继承
super关键字用法
super表示父类对象
super.成员:super.成员变量 super.方法
super(参数...):super(参数...)
this 的用法?
this表示当前对象
this.成员:this.成员变量 this.方法
this(参数...):this(参数...)
自己总结的规律:this:访问变量-看代码在哪个类中,访问方法-看new的是哪个对象。
访问修饰符public,private,protected,以及不写(默认)时的区别?
public:任意位置
private:本类可以用
protected:同包:都可以,不同包:子类可以访问
默认:同包下可用
Java有没有goto
有,在Java中goto是保留字
关键字:public void static class 被赋予特殊含义的单词
保留字:还没被赋予特殊含义的单词,但是保留起来,以后可能会被赋予 goto const
阐述final、finally、finalize的区别
final
修饰变量:是常量,不能被二次赋值
修饰方法:不能被重写
修饰类:不能被继承
finally:
是异常处理机制的一部分,表示一定会被执行的部分
finalize:
是Object中的方法,当垃圾回收器回收垃圾的时候,会自动调用finalize()方法进行垃圾回收
类间关系
抽象类与接口的区别
类、抽象类、接口解释,三者之间的关系
什么是类:是一类事物共同特点的抽取
什么抽象类:被abstract修饰的类,如果有需要子类去实现的方法,可以定义抽象类
什么是接口:主要用来定义规范,接口没有实现的方法
类继承抽象类,实现接口。
抽象类可以实现接口
接口只能继承接口
方法重写?方法重载?
重写:子类重写父类方法,方法名相同、参数列表相同、返回值类型要求相同,
重载:本类中方法有相同方法名,参数列表不一样,和返回值类型无关。
面向对象的特征有哪些方面?
封装:封装是一种思想,类可以是封装,把共同的特性进行封装,方法:对一个功能的封装
继承:子类继承父类,可以对父类功能进行增强
多态:多中形态,必须有继承或实现关系,可以提高代码的灵活性
构造器(constructor)是否可被重写(override)?
不能:构造器不能被继承
抽象的(abstract)方法是否可同时是静态的(static)
不能:static:修饰方法,表示这个是静态方法(类方法),会在类加载的时候被加载金内存
abstract:抽象的,修饰方法表示抽象方法,需要子类去重写。
基本数据类型
数据类型有几种
基本数据类型:byte short int long float double boolean char
引用数据类型:除了基本数据类型就是引用数据类型
什么是自动装箱和拆箱
装箱:把基本数据类型赋值给对应的包装类
int a = 10;
Integer b = a;
拆箱:把包装类型的值赋值给基本数据类型
Character c = 'c';
char d = c;
byte:Byte
short:Short
int:Integer
long:Long
float:Float
double:Double
boolean:Boolean
char:Character
float f=3.4;是否正确?
不对:小数默认是double类型,小数赋值给float类型需要加F/f/强转
short s1 = 1; s1 = s1 + 1;有错吗?
short s1 = 1;会自动隐式转换
s1 = s1 + 1;会报错,因为s1 + 1结果是int类型,int 值赋值给 short需要强制转换。此处会报错。
有错:如果有变量参与运算,会先把类型提升为同一类型,再运算
short s1 = 1; s1 += 1;有错吗?
没有: += 会自动隐式转换
String 转 int 如果转换的值是"s1", 会报什么错?
NumberFormatException
"351516" 转日期会报什么错? DateFormatException
异常的顶层父类:Throwable
引用数据类型
String
字符串String s ="sfds55d676455dfg32434eertre"; 怎么样把非数字全部去除,只保留数字?
String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
没有:因为String是不可变字符串.
String、StringBuilder、StringBuffer的区别?(重点)
String: 不可变字符串。
StringBuilder: 可变长度字符串,线程不安全(效率高)
StringBuffer: 可变长度字符串,线程安全(效率相对StringBuilder低)
描述以下3中情况,变量a的内存区别
1). String a = 123;
编译报错:123是int类型
2). String a = "12"+"3";
在编译时期,"12"+"3"会先进行合并"123"; String a = "123"
当字符串常量进行拼接时候,JVM进行了优化,会先合并操作
3). String b = "12";
String a = b + "3";
String 是最基本的数据类型吗?
不是:是引用数据类型
是否可以继承String类?
不可以:因为string类被final修饰了
String s = new String("xyz");创建了几个字符串对象?
如果字符串常量池之前有"xyz"字符串常量,那么只堆内存中创一个String对象
如果只之前没有,则创建2个对象,一个在堆内存中,一个在字符串常量池
控制语句
switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?(重点)
switch()
char byte short int 枚举,JDK1.5以后可以接收String
switch 使用时的注意事项?
1.接收的数据类型:char byte short int 枚举,JDK1.5以后可以接收String
2.case需要有break;
3.case都不匹配会走default
在Java中,如何跳出当前的多重嵌套循环?
1. break; 结束当前循环
2. continue; 跳过本次循环
3. return; 结束方法
4. 异常 : 结束方法
5. 退出虚拟机:System.exit(0);
JDK
JDK, JRE, JVM 的区别?
JVM:Java虚拟机
JRE:运行环境
JDK:开发环境
什么是GC, 有什么作用?
GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,
忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,
Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,
要请求垃圾收集,可以调用下面的方法之一:System.gc()
集合
List,Set,Map是否实现Collection接口,List, Set, Map的区别
List,Set是实现了Collection接口 :单列集合
list:有序集合,元素可以重复
set: 无序集合,元素不可以重复
Map: 不是,双列集合
key:不能重复
Collection 和 Collections的区别
Collection是集合的接口
Collections是集合的工具类:sort / Max / min /查找 /随机打乱
List
如果一个List中放了十个 Student对象,需要按照年龄排序,如何 实现?
排序:
1. 内部排序:实现Compareable 接口重写 compareTo方法
2. 外部排序:重写Comparetor接口中 compare方法
list三个子类的特点(阐述ArrayList、Vector、LinkedList的存储性能和特性)(重点)
ArrayList : 数组结构,单列集合,有序,能重复,线程不安全的,查询快,增删慢
Vector:数组结构,单列集合,有序,能重复,线程安全的
LinkedList:链表结构,有序,查询慢,增删快
Set
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
先判断hash值:调用hashCode()获取hash值
再判断内容是否一致:调用equals()方法
Map
hashMap和hashTable的区别
异常
常见的异常
NullPointException
IndexOutOfBoundException
NumberFormarException
DateFormatException
...
反射
如何通过反射创建对象:获取class的三种方式
类名.class; Class.forName("全类名");new 对象().getClass();
如何通过反射获取和设置对象私有字段的值
如何通过反射调用对象的方法
**