最近发现看书实在是非常的枯燥,并且其中的知识点特别容易忘,因此开始刷牛客的专项练习,刚刚开始,大概制定的标准是每天刷一个小时基础专项。
我做一套30题的卷子大概是15-20分钟,所以大概每天刷一百道题+每天一总结+每天一回顾昨天的内容,也在考虑要不要去用艾宾浩斯记忆法,先看一下情况吧。
1.内部类也可以使用四种访问权限
public:同一类、同一包、不同包子类、不同包非子类
protected:同一类、同一包、不同包子类
默认:同一类、同一包
private:同一类
2.关于try中return问题
public class Test{
public int add(int a,int b){
try {
return a+b;
}
catch (Exception e) {
System.out.println("catch语句块");
}
finally{
System.out.println("finally语句块");
}
return 0;
}
public static void main(String argv[]){
Test test =new Test();
System.out.println("和是:"+test.add(9, 34));
}
}
执行结果:
finally语句块
和是:43
主要是由于执行try当中语句时return并不会直接返回,而是先将return的结果放入一个临时栈中,而接着去执行finally语句,最后再返回。
public abstract class Test {
public static void main(String[] args) {
System.out.println(beforeFinally());
}
public static int beforeFinally(){
int a = 0;
try{
a = 1;
return a;
}finally{
a = 2;
}
}
}
/**output:
1
*/
正如这个代码,finally只会覆盖a,但在此之前a已经存入临时栈了,所以并不影响return。
关于finally中return问题,我记得《深入理解Java虚拟机》书中好像说的是不会覆盖try中的return,但Github上的《Java面试突击》好像说的是finally当中的return会覆盖try中的return。
3.数组会进行初始化
4.接口中成员变量默认public static final,方法默认public abstract
5.Thread中的Join方法作用是等待线程结束
比如,在b线程中调用a.join(),那么b线程就要等待a线程结束后才会执行
下列代码执行结果为()
public static void main(String args[])throws InterruptedException{
Thread t=new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.print("2");
}
});
t.start();
t.join();
System.out.print("1");
}
// OutPut:21
6.valueOf方法:返回一个String对象
public class CharToString {
public static void main(String[] args)
{
char myChar = 'g';
String myStr = Character.toString(myChar);
System.out.println("String is: "+myStr);
myStr = String.valueOf(myChar);
System.out.println("String is: "+myStr);
}
}
//Output:
String is g
String is g
7.构造方法不能被继承(但也有说法是子类继承父类的一切,但私有不可访问,辩证的看吧)
8.<<左移,>>带符号右移,>>>无符号右移
9.wait()、notify()和notifyAll()是 Object类 中的方法
Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、 notify(),使用Condition1的await()、signal()这种方式实现线程间协作更加安全和高效。
10.Java异常类
非RuntimeException一般是外部错误,其必须被try{}catch语句块捕获。
RuntimeException,运行时异常,Java编译器不会检查。
11.Collection接口层次
12.JVM内存包括虚拟机栈、本地方法栈、程序计数器、方法区和堆
JVM堆分为:新生代(一般是一个Eden区,两个Survivor区),老年代(old区)
13.Swing
Swing是为了解决AWT存在问题而新开发的包,是一个基于Java的跨平台MVC框架,使用单线程模式,但运行速度比AWT慢,其所有组件都是从javax.swing.JComponet类继承来的。
14.foward和redirect问题
foward:服务器获取跳转页面内容传给用户,用户地址栏不变
redirect:服务器向用户发送转向地址,redirect后地址栏变成新的地址
15.多继承概念
Java中多继承通过三种方式实现:
1.实现多个接口
2.继承一个类,然后实现一个或多个接口
3.通过内部类去继承其它类
16.servlet service
1.不管是post还是get方法都会在service中处理
2.service判断请求类型,如果是post则执行doPost方法,反之执行doGet方法,doPost和doGet是在Httpservlet中实现的。
service方法是在servlet生命周期的服务期
servlet生命周期分为三个阶段:
1.初始化阶段,调用init()方法
2.响应客户请求阶段,调用service()方法
3.终止阶段,调用destroy()方法
servletContext存放共享数据,是一个全局变量,提供一系列方法供Servlet与Web容器交互
servletConfig封装servlet配置信息
17导包只可以导到当前层,不可以再导入包里面包的类
18.
public static void main(String[] args) {
String a = new String("myString");
String b = "myString";
String c = "my" + "String";
String d = c;
System.out.print(a == b);
System.out.print(a == c);
System.out.print(b == c);
System.out.print(b == d);
}
A:a指向堆内存,b指向常量池,因此地址不相等,false
B:java有常量优化机制,c也指向常量池,且与b指向同一个,则a与c地址不相等,false;
C:b与c地址相等,true
D:d是c的副本,地址相同,所以b与d地址相等,true
19.局部变量在语句被执行时创建,而不是方法执行时创建
20.只有new和反射用到了构造方法