1,jdk和jre,JVM
jdk简单来说就是开发工具,jre是开发环境
2,字节码
字节码是JVM能够理解,且只面向JVM的代码。其扩展名为.clss
3,hashtable与hashmap
hashtable是线程安全的,hashtable是不安全的,允许键值为空
HashMap ,hashtable都实现了Serializable接口,因此它支持序列化
HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap
hashtable是线程安全的,所以多线程下使用
继承的父类不同: Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口
4,== 和 equal
==判断是这两个对象是否为同一个东西,equal判断的是这两个对象是否相同
5,重载与重写
重写:发生在子类和父类之中,外壳不变,核心重写
重载:发生在同一个类中,参数类型必须不一样
重写与重载之间的区别
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
6,面向对象的三大特性(封装,继承,多态)
https://blog.csdn.net/jianyuerensheng/article/details/51602015
7,抽象类和接口
a.一个类只能继承一个抽象类,而一个类却可以实现多个接口
b.抽象类可以有成员方法具体实现,接口只存在public abstract
c.抽象类可以有静态代码块和静态方法,接口不能
d.抽象类的成员变量可以是多种类型,接口只能是public static final
(
为什么要用static?
至于这个问题,是和Java语言的本身机制有关。我们知道Java不支持多继承,但是一个类可是现实多个接口。我们假设有两个接口A和B,而类C实现了接口A和B。假设,此时,A和B中都有一个变量N,如果N不是static类型的,那么在C中该如何区分N到底是A的还是B的呢?而,如果是static类型的,我们可以通过A.N和B.N来区别调用A或者B中的成员变量N。
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
)
8,线程
a,继承thread
b,实现runable接口
c,应用程序可以使用Executor框架来创建线程池
9,集合
Collection:代表一组对象,每一个对象都是它的子元素
set:无需不重复的collection元素
list:有序可重复的collection
Map:可以把键(key)映射到值(value)的对象,键不能重复
10,Array和ArrayList
a,Array可以包含基本类型和对象类型,ArrayList只包含对象类型
b,Array大小是固定的,ArrayList大小是动态变化的
( ArrayList和LinkedList都实现了List接口,有以下的不同点:
1、ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。
2、相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
3、LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
// 的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候, 他们的执行顺序。
类加载器实例化时进行的操作步骤(加载–>连接->初始化)。
父类静态代变量、
父类静态代码块、
子类静态变量、
子类静态代码块、
父类非静态变量(父类实例成员变量)、
父类构造函数、
子类非静态变量(子类实例成员变量)、
子类构造函数。
————————————————
版权声明:本文为CSDN博主「是华仔呀」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43495390/article/details/86533482)
11,异常处理
43.Java中的两种异常类型是什么?他们有什么区别?
Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。这里有Java异常处理的一些小建议。
12,Exception和Error
Exception和Error都是Throwable的子类。Exception用于用户程序可以捕获的异常情况。Error定义了不期望被用户程序捕获的异常。
13,try,catch,finally执行顺序
首先无论怎样,finally都会被执行
当try中有return时:
try{
a
retrun b;
}catch(exception e){
}finally{
c
}
则执行顺序是:a——c——b
当finally中有return时:
try{
a;
retrun b;
}catch(exception e){
return c;
}
执行顺序是:a——c
是的,这时try里面的return就不会再执行了。
14,string,stringBuffer,stringBuild
string是final修饰的对象,不能被继承和修改大小。String是常量,当创建之后即不能更改。(可以通过StringBuffer和StringBuilder创建String对象(常用的两个字符串操作类)。
stringBuffer是线程安全的,也是被final修饰,不能继承
stringBuild是非线程安全的,同在于toString时,会返回一个新的对象。
15,运行时的异常
我们比较熟悉的RumtimeException子类:
Java.lang.ArithmeticException(算数异常,比如0做了分母)
Java.lang.ArrayStoreExcetpion(数组存储异常,比如将一个错误类型对象存储到一个对象数组)
Java.lang.ClassCastException(
ClassCastException 表示类型转换异常
例如:Pet 宠物类 Dog 狗狗类 (继承Pet) Penguin 企鹅类(继承Pet)
Dog dog = (Dog)pet ; 正确 向下转型
Dog dog = (Dog)penguin ; 错误 向下转型
处理方法:使用 instanceof 进行类型判断,可以避免类型转换异常
Pet pet = new Dog();
例: if(pet instanceof Dog){
Dog dog = (Dog)pet;
}else if(pet instanceof Penguin){
Penguin penguin = (Penguin)pet;
}
)
Java.lang.IndexOutOfBoundsException
Java.lang.NullPointerException
16,实现数组和 List 之间的转换
List转换成为数组:调用ArrayList的toArray方法。
数组转换成为List:调用Arrays的asList方法。
17,多线程如果线程挂住了怎么办。
根据具体情况(sleep,wait,join等),酌情选择notifyAll,notify进行线程唤醒。
反思:我们在审视某个人的时候,应该理解到每个人的所受知识结构不同,是不同“框架”下的产物,应该反思自己是不是也是这样,是否被条条框框所限制,是否值得学习。而不是一开始就由着自己的情绪,肆意妄为。
18,session和cookie
1:cookie数据存放在客户的浏览器上(客户端),session数据放
@1:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie 欺骗,如果主要考虑到安全应当使用session
@2:session会在一定时间内保存在服务器上.当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用cookie
2:单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的cookie不能3K
@3:将登陆信息等重要信息存放为session;其他信息如果需要保留,可以放在 cookie 中
3:session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到.而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的.cookie只能是子路径访问父路径设置的cookie
你以为我会求你?