类内方法、成员、代码块的执行顺序
- 用static修饰的方法
- 静态方法是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法。
- 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。
- 而实例方法只有后面这种方式。
类方法和实例方法
- 类方法中不能引用对象变量;
- 类方法中不能调用类的对象方法,可以间接通过生成对象来调用;
- 在类方法中不能使用super、this关键字。
- 类方法不能被覆盖。
- 对象方法中可以引用对象变量,也可以引用类变量;
- 对象方法中可以调用类方法;
- 对象方法中可以使用super、this关键字。
对象的初始化方式:
方法在其他类中调用
多态成员访问特点(父类子类问题)
成员变量:编译看左边,运行看左边静态变量:编译看左边,运行看左边
成员方法:编译看左边,运行看右边
静态方法:编译看左边,运行看左边
抛出异常
都可抛出异常首先,是使用的位置,throws 只能跟在方法名和括号的后面,而 throw 只能出现在方法体内。其次,throws 是一个声明(它声明这里可能出现异常,但未必一定出现),而 throw 是一个动作(它抛出也可以说它产生一个异常出现,只要执行到了这个关键字,异常必定出现)。
try语句
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
举例:
情况1:try{} catch(){}finally{} return;显然程序按顺序执行。
情况2:try{ return; }catch(){} finally{} return;程序执行try块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,最后执行try中return;
finally块之后的语句return,因为程序在try中已经return所以不再执行。
情况3:try{ } catch(){return;} finally{} return;程序先执行try,如果遇到异常执行catch块,
有异常:则执行catch中return之前(包括return语句中的表达式运算)代码,再执行finally语句中全部代码,
最后执行catch块中return. finally之后也就是4处的代码不再执行。
无异常:执行完try再finally再return.
情况4:try{ return; }catch(){} finally{return;}程序执行try块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,因为finally块中有return所以提前退出。
情况5:try{} catch(){return;}finally{return;}程序执行catch块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,因为finally块中有return所以提前退出。
情况6:try{ return;}catch(){return;} finally{return;}程序执行try块中return之前(包括return语句中的表达式运算)代码;
有异常:执行catch块中return之前(包括return语句中的表达式运算)代码;
则再执行finally块,因为finally块中有return所以提前退出。
无异常:则再执行finally块,因为finally块中有return所以提前退出。
最终结论:任何执行try 或者catch中的return语句之前,都会先执行finally语句,如果finally存在的话。
如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,
equals和==的区别
Java异常
加载驱动
访问控制修饰符
接口和抽象类的异同
接口和抽象类对实体类进行更高层次的抽象,仅定义公共行为和特征。
语法维度 | 抽象类 | 接口 |
成员变量 | 无特殊要求 | 默认 public static final 常量 |
构造方法 | 有构造方法,不能实例化 | 没有构造方法,不能实例化 |
方法 | 抽象类可以没有抽象方法,但有抽象方法一定是抽象类 | 默认 public abstract,JDK8 支持默认/静态方法(可以有方法体),JDK9 支持私有方法(解决代码重复问题) |
继承 | 单继承 | 多继承 |
抽象类、接口的修饰符
2、接口是一种特殊的抽象类,接口中的方法不全是抽象方法(但其前的abstract可以省略),jdk1.8可以使用static修饰接口中的方法,而且static修饰的是实函数,所以接口中不能用的访问修饰符为private、protected、synchronized、native,因为接口可以让所有的类去实现(非继承),不只是其子类,但是要用public去修饰。接口可以去继承一个已有的接口。
类、方法、成员变量和局部变量的可用修饰符
修饰符 | 类 | 成员访求 | 构造方法 | 成员变量 | 局部变量 | |
abstract(抽象的) | √ | √ | - | - | - | |
static (静态的) | - | √ | - | √ | - | |
public(公共的) | √ | √ | √ | √ | - | |
protected(受保护的) | √ | √ | √ | - | ||
private(私有的) | - | √ | √ | √ | - | |
synchronized(同步的) | - | √ | - | - | - | |
native(本地的) | - | √ | - | - | - | |
transient(暂时的) | - | - | - | √ | - | |
volatie(易失的) | - | - | - | √ | - | |
final(不要改变的) | √ | √ | - | √ | √ |
关键字
线程方法
注解
Servlet
HttpServlet容器响应Web客户请求流程如下:1)Web客户向Servlet容器发出Http请求;
2)Servlet容器解析Web客户的Http请求;
3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
4)Servlet容器创建一个HttpResponse对象;
5)Servlet容器调用HttpServlet的service方法,这个方法中会根据request的Method来判断具体是执行doGet还是doPost,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
7)HttpServlet调用HttpResponse的有关方法,生成响应数据;
doGet() 或 doPost() 是创建HttpServlet时需要覆盖的方法.
字节流、字符流
类加载器
jvm classLoader architecture :
Bootstrap ClassLoader/启动类加载器
主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作.
Extension ClassLoader/扩展类加载器
主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作
System ClassLoader/系统类加载器
主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作.
User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)