面向对象的特性
面向对象的三大特性是:封装、继承、多态。
封装
封装就是将一个对象的属性和方法进行封装。同时私有化属性,提供属性对应的get方法和set方法(把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏)。
继承
继承就是将类的属性和方法进行封装成一个抽象类。同时子类继承父类,则拥有父类中的所有的非私有的属性和方法。
多态
同一种行为的不同表现形式(父类引用指向子类对象)。
final,finally,finalize的区别
final
用于声明属性和方法,分别表示属性不可变,变量变常量,方法不可被重写,类不能被继承
finally
是异常处理语句结构的一部分,表示总是执行
finalize
是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等,JVM不保证此方法总是被调用。
int和Integer的区别
int是Java提供的8中原始数据类型之一。Java为每个原始数据类型都提供了包装类,Integer是Java为int提供的包装类。int的默认值为0,而Integer的默认值为null,是引用类型,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,Java中int和Integer的关系如下:
- int是8种基本数据类型之一
- Integer是int的包装类
- int和Integer都可以表示某一个数值
- int和Integer不能够能用,因为他们是不同的数据类型
重写和重载的区别
重载Overload
表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或者类型不同)。
重写Override
表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能不父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。
抽象类和接口的区别
参数 | 抽象类 | 接口 |
---|---|---|
默认的方法实现 | 抽象类中的方法可以有方法体 | 接口中的方法不能有方法体 |
实现 | 子类使用extends关键字来继承抽象类。如果子类不是抽象类,则需要提供抽象类中所有生命的方法的实现 | 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现 |
构造器 | 抽象类可以有构造器 | 接口不能有构造器 |
与正常Java类的区别 | 除了不能实例化抽象类之外,他和普通Java类没有任何区别 | 接口是完全不同的类型 |
访问修饰符 | 抽象方法可以有public、protected、default这些修饰符 | 接口方法默认修饰符是public。不可以使用其他修饰符 |
main方法 | 抽象方法可以有main方法,并且我们可以运行它 | 接口没有main方法,因此我们不能运行它 |
多继承 | 抽象方法可以继承一个类和实现多个接口 | 接口只可以继承一个或多个其他接口 |
速度 | 比接口快 | 接口稍慢,因为需要花时间去寻找在类中实现的方法 |
添加新方法 | 如果往抽象类中添加新的方法,你可以给它提供默认的实现。因此不需要改变你现在的代码 | 如果往接口中添加方法,那么你需要改变实现该接口的类 |
说说反射的用途及实现
反射的用途
Java的放射机制是一个非常强大的功能,在很多项目中,比如Spring,MyBatis中都可以看到反射的身影。通过反射机制,我们可以在运行期间动态获取及调用对象的类型信息。利用这一点我们可以实现工厂模式和代理模式等设计模式,同时也可以解决Java泛型擦除等令人苦恼的问题。
反射的实现
获取一个对象对应的放射类,在java中有下列方法可以获取一个对象的反射类:
- 通过对象.getClass
Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。
Class stuClass = stu1.getClass();//获取Class对象
- Class.forName()
Class stuClass3 = Class.forName("fanshe.Student");//注意此字符串必须是真实路径,就是带包名的类路径,包名.类名
System.out.println(stuClass3 == stuClass2);//判断三种方式是否获取的是同一个Class对象
- 类名.Class
Class stuClass2 = Student.class;
说说自定义注解的场景及实现
登陆、权限拦截、日志处理,以及各种 Java 框架,如 Spring,Hibernate,JUnit 提到注解就不能不说反射,Java 自定义注解是通过运行时靠反射获取注解。实际开发中,例如我们要获取某个方法的调用日志,可以通过 AOP(动态代理机制)给方法添加切面,通过反射来获取方法包含的注解,如果包含日志注解,就进行日志记录。反射的实现在 Java 应用层面上讲,是通过对 Class 对象的操作实现的,Class 对象为我们提供了一系列方法对类进行操作。在 JVM 这个角度来说,Class 文件是一组以 8 位字节为基础单位的二进制流,各个数据项目按严格的顺序紧凑的排列在 Class 文件中,里面包含了类、方法、字段等等相关数据。通过对 Class 数据流的处理我们即可得到字段、方法等数据。
HTTP请求get与post方式的区别
- 根据 HTTP 规范,GET 用于信息获取,而且应该是安全的和幂等的(幂等性:HTTP GET方法用于获取资源,无论获取一次还是多次,获取到的结果都是相等的,所以是幂等的)。
- 根据 HTTP 规范,POST 表示可能修改变服务器上的资源的请求。
- 首先是 "GET 方式提交的数据最多只能是 1024 字节",因为 GET 是通过 URL 提交数据,那么 GET 可提交的数据量就跟 URL 的长度有直接关系了。而实际上,URL 不存在参数上限的问题,HTTP 协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE 对 URL 长度的限制是 2083 字节(2K+35)。对于其他浏览器,如 Netscape、FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。注意这是限制是整个 URL 长度,而不仅仅是你的参数值数据长度。
- POST 是没有大小限制的,HTTP 协议规范也没有进行大小限制
Session 和 Cookie 的区别
- cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
- cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全应当使用 session。
- session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用 cookie。
- 单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。
Session分布式处理
Session复制
Session粘滞
Session集中管理
基于Cookie管理
总结
这四种方式,相对来说,Session 集中管理 更加可靠,使用也是最多的。
网友评论