一、类的初始化顺序
初始化过程是这样的:
1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;
3.其次,初始化父类的普通成员变量和代码块,再执行父类的构造方法;
4.最后,初始化子类的普通成员变量和代码块,再执行子类的构造方法;
二、运算符优先级
单目 >运算(加减乘除)>移位>比较>按位>逻辑>三目 >赋值 ,其中只有单目、三目、赋值是从右到左的
三、instanceof关键字
instanceof用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。
四、抽象类和最终类
抽象类和最终类(final修饰的类)都可以被声明使用。
这里只是说“声明”,并没有说“实例化”;如果只是声明是可以的,最常见的使用方式就是:
1、父类类型的引用指向子类的对象;
2、接口类型的引用指向该接口的实现类的对象;
以上两种使用方式也就是所谓的“向上转型”。
五、中间件
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。
(简单来说,中间件一般只是负责网络信息的分发处理)
六、内部类
静态内部类才可以声明静态方法
七、继承类与实现接口的顺序
先继承后实现,只能继承一个类,可以实现多个接口
八、类修饰符
1、类只能用public、abstract、final修饰。
2、内部类和成员变量一样可以用所有访问权限修饰符修饰。也可以用static和final修饰
3、局部内部类和局部变量一样不能用访问权限修饰符修饰。
九、不同数据类型的自动转换
自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
低 ---------------------------------------------> 高
byte,short,char-> int -> long -> float -> double
long类型是八个字节,float是四个字节,但是底层实现方式不一样,所以还是long自动转型为float
十、线程安全的集合类
喂,SHE
喂:Vector
S; Stack
H: Hashtable(emmm,应该要加上concurrentHashMap)
E: enumeration
十一、Java中的包
java中的包和操作系统没有任何关系,java的包是用来组织文件的一种虚拟文件系统
十二、Object类含有的方法
Object类含有如下方法:
getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(), wait(), finalize()
十三、方法重写
方法的重写(override)两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。
十四、构造函数能否继承
子类不可以继承父类的构造方法,只可以调用父类的构造方法。如果父类中有无参构造函数,则子类的构造函数会自动调用父类的无参构造函数;如果父类中没有无参构造函数,则在子类构造函数中必须使用super显式的调用父类的有参构造函数。并且super必须在子类构造函数的第一行。
十五、面向对象的五个原则
五个基本原则:
单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
开放封闭原则(Open-Closed Principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。
Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。
依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口
十六、常量的赋值方式
final修饰的成员变量在赋值时可以有三种方式:
1、在声明时直接赋值。
2、在构造器中赋值。
3、在初始代码块中进行赋值。
十七、修饰符范围
十八、JSP九个内置对象
JSP内置对象有:
1.request对象
客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
2.response对象
response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
3.session对象
session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.
4.out对象
out对象是JspWriter类的实例,是向客户端输出内容常用的对象
5.page对象
page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
6.application对象
application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。
7.exception对象
exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
8.pageContext对象
pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。
9.config对象
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)
十九、Java的数据类型
java支持的语言类型分为:基本类型和引用类型。
基本类型包括boolean类型和数值类型,数值类型分为整型和浮点类型,整型包括:byte、short、int、long、char,浮点类型包括float和double。
引用类型包括类、接口和数组
Byte和Float等属于基本类型的包装类型,属于引用类型。
二十、Java导包
导包只可以导到当前层,不能导入包里面的包中的类
二十一、Java标识符规则
Java 标识符有如下命名规则:
由26个英文字母大小写,数字:0-9 符号:_ $ 组成
标识符应以字母、_ 、$开头。
标识符不能是关键字。
Java中严格区分大小写
二十二、多态
java多态有两种情况:重载和覆写。
重载属于编译时多态,是静态的。对于同一个类中的多个同名方法,其参数列表不同,在编译时会根据参数列表选择调用相应的方法。调用同一个方法,参数列表不同,产生的行为就会不同,这是一种多态。
重写是属于运行时多态,是动态的。重写是发生在子类与父类之间的,对于父类的一个方法,不同的子类可以进行不同的重写。当我们定义一个父类的引用时,这个引用可以指向不同的子类的对象(这就是所谓的“向上转型”),也就是说我们只能在运行时才能知道该引用是指向哪个对象的,其指向的对象不同,调用同一个方法就会产生不同的行为,这就是多态。
有一点需要注意,静态方法是特殊的,对于静态方法,哪个类的引用就调用哪个类的方法,这是因为静态方法是属于这个类的,而不是对象的。
二十三、封装和继承
封装隐藏了类的内部实现机制,对外界而言它的内部细节是隐藏的,暴露给外界的只是它的访问方法。可以在不影响使用的情况下改变类的内部结构(也就是说在方法的功能不变的情况下,方法内部的具体实现细节可以改变),同时也保护了数据。
继承是为了重用父类代码,减少重复的代码。
更新中。。。