文章目录
8种基本数据类型
- 整数型
byte:1个字节、8位、范围-128 ~ 127
short:2个字节、16位、范围-32768 ~ 32767
int:4个字节、32位、范围-2147483648~2147483647
long:8个字节、64位、范围-9223372036854774808~9223372036854774807 - 浮点型
float:4个字节、范围3.402823e+38~1.401298e-45
double:8个字节、范围1.797693e+308~4.9000000e-324 - 字符型
char:2个字节、范围0 ~ 65535 - 布尔型
boolean:范围true 和 false
面相对象的特征
-
封装
给对象提供了隐藏内部特性和行为的能力,对象提供一些能被其他对象访问的方法来改变他内部的数据。提供3种修饰符,public、private、protected,每一种修饰符给位于同一包或者不同包下面对象赋予不同的访问权限。好处:
隐藏对象的属性来保护对象内部的状态
提高代码的可用性和可维护性
禁止对象之间不良交互提高模块化 -
继承
提供了从基类获取字段和方法的能力。 -
多态
编程语言给不同底层数据类型做相同接口展示的一种能力。 -
抽象
把想法从不同实例中分离出来。主要目的是把类的行为和实现细节分开。
transient关键字
将不需要序列化的属性前加关键字transient,序列化对象的时候,这个属性就不会被序列化。生命周期仅存在于内存中而不会写到磁盘。
Java序列化提供两种方式:
1)一种是实现Serializable接口,JVM完全负责序列化(非transient修饰的就序列化,transient修饰的就不序列化)。
2)另一种是实现Exteranlizable接口。 需要重写writeExternal和readExternal方法,它的效率比Serializable高一些,并且可以决定哪些属性需要序列化(即使是transient修饰的),但是对大量对象,或者重复对象,则效率低。
使用场景:
1)些安全性的信息,比如密码等
2)某个字段值能够由其他字段计算出来。比如:圆类,有字段半径和面积,那么知道圆半径,就可以计算出圆面积,故圆面积可用stransient修饰。这样可以节省持久化所占资源空间。
final,finally,finalize的区别
- final修饰符,如果一个类被申明为final,意味着它不能派生出新的子类,不能作为父类被继承。因此一个类不能既被申明为abstract的,又被申明为final的。将变量或方法申明为final,可以保证他们在使用中不被改变。被申明为final的变量必须在申明时给定初值,而在以后得引用中只能读取,不可修改。被申明为final的方法也同样只能使用,不能重载。
- finally在异常处理时提供finally块来执行任何清除操作。finally块每次都会执行,非必须块可以不写。
- finalize方法名,在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
重载和重写的区别
重写override
- 方法名、参数、返回值相同
- 子类方法不能缩小父类方法的访问权限。
- 子类方法不能抛出比父类方法更多的异常(子类方法可以不抛出异常)。
- 存在父类与子类之前。
- 方法被定义为final的不能重写。
重载overload
- 参数类型、个数、顺序至少有一个不同。
- 不能重载只有返回值不同的方法。
- 存在父类和子类、同类中。
抽象类和接口的区别
接口是公开的,里面不能有私有的方法和变量,是用于让别人使用的,而抽象类是可以有私有的方法和变量的;
实现接口的一定要实现接口里面定义的方法,而实现抽象类可以选择重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体的实现类;
接口可以实现多重继承,而一个类只能继承一个超类,可以通过继承多个接口实现多重继承;
接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。
反射的用途及实现
Java反射主要提供一下功能:在运行时构造一个类的对象;判断一个类具有的成员变量和反方;调用一个对象的方法;生成动态代理。反射最大的应用就是框架。
主要功能:
- 确定一个对象的类
- 取出类的modifiers,数据成员,方法,构造器,超类
- 找出某个接口里定义的常量和方法说明
- 创建一个类实例,这个实例在运行时刻才有名字
- 取得和设定对象数据成员的值,如果数据成员名是运行时刻确定的也能做到
- 在运行时调用动态对象的方法
- 创建数组,速度大小和类型在运行时刻才确定,也能更改数组成员的值
反射有个问题,就是性能问题,大量使用反射系统性能大打折扣。
自定义注解的场景及实现
登录、权限拦截、日志处理、以及各种Java框架,Spring、Hibernate、JUnit
注解不就能不说反射,Java自定义注解是通过运行时靠反射获取注解。实际开发中,例如我们要获取某个方法的调用日志,可以通过AOP(动态代理机制)给方法添加切面,通过反射来获取方法包含的注解,如果包含日志注解,就进行日志记录。
HTTP请求的Get与Post方式的区别
Get方法会把名值对加载请求的URL后面,因为URL对字符数目有限制,进而限制了用户在客户端请求的参数值的树木。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。
Post方法通过把请求参数值放在请求体中来克服Get方法的限制,因此,可以发送参数的数目是没有限制的。最后,通过post请求传递的敏感信息对外部客户端是不可见的。
Session与Cookie区别
cookie是web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个web服务器存储区cookie。以后浏览器在给特定的web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。
区别:
无论客户端浏览器怎么设置,session都能正常工作。客户端可以选择禁用cookie,但是session仍然能正常工作的,因为客户端无法禁用服务端的session。
MVC设计思想
M:model 模型
V:view视图
C:controller控制器
模型就是封装业务逻辑和数据的一个一个的模块;控制器就是通过调用这些模块的(java中通常是用servlet来实现,框架的话很多是用stuts2来实现);视图就是你看到的,比如jsp、vue等。
equals与==的区别
值类型(int、char、long、boolean等)都是用==判断相等性。对象引用的话,判断引用所指的对象是否是同一个。equals是Object的成员函数,有些类会覆盖这个方法,用与判断对象的等价性。
例如:String类,两个引用所只想的String都是“abc”,但可能出现他们实际对应的对象并不是同一个,因此用判断他们可能不相等,但是用equals判断一定是相等的。