fengwei23
5/4/2018 - 1:44 AM

Java知识总结 #Java

Java知识总结 #Java

基础知识

面向对象的特征

抽象

忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面.(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口).抽象并不打算了解全部问题,而是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一个数据抽象,而是过程抽象.

数据抽象 -->表示世界中一类事物的特征,就是对象的属性.比如鸟有翅膀,羽毛等(类的属性)

过程抽象 -->表示世界中一类事物的行为,就是对象的行为.比如鸟会飞,会叫(类的方法)

封装

封装就是把过程和数据包围起来,对数据的访问只能通过特定的界面.如私有变量,用set,get方法获取

继承

一种联结类的层次模型,并且允许和鼓励类的重用,提供一种明确表达共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),原始类称为新类的基类(父类).派生类可以从它的父类哪里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要.因此可以说,继承为了重用父类代码,同时为实现多态性作准备.

多态

多态是指允许不同类的对象对同一消息做出响应.多态性包括参数化多态性和包含多态性.多态性语言具有灵活/抽象/行为共享/代码共享的优势,很好的解决了应用程序函数同名问题.总的来说,方法的重写,重载与动态链接构成多态性.java引入多态的概念原因之一就是弥补类的单继承带来的功能不足.

动态链接 -->对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将调用子类中的这个方法,这就是动态链接.

注意继承与重载:子类与父类的关系,重载方法的调用问题

子类对象可以直接当成父类对象用,但是反过来就不行.比如:人是父类,学生是人的子类,所以学生对象一定具备人对象的属性,但是人对象就未必具有学生对象的特性.但是子类对象当做父类来用,将失去子类所有特性,只保留与父类同名的属性和方法,此时可以对父类方法进行重写.

一个类中如果定义了重载的方法,则系统在调用方法时,会根据参数的类型自动选择调用合适的方法

final, finally, finalize 的区别

final关键字可以用于类,方法,变量前,用来表示该关键字修饰的类,方法,变量具有不可变的特性。

  1. final关键字用于基本数据类型前:这时表明该关键字修饰的变量是一个常量,在定义后该变量的值就不能被修改。
  2. final关键字用于方法声明前:这时意味着该方法时最终方法,只能被调用,不能被覆盖,但是可以被重载。
  3. final关键字用于类名前:此时该类被称为最终类,该类不能被其他类继承。
  4. final关键字修饰class对象、集合对象,之后不能被重新new,但是可以改变其中属性或集合的值。

finalize

finalize方法来自于java.lang.Object,用于回收资源。 可以为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用。 在实际应用中,不要依赖使用该方法回收任何短缺的资源,这是因为很难知道这个方法什么时候被调用。

finally

当代码抛出一个异常时,就会终止方法中剩余代码的处理,并退出这个方法的执行。假如我们打开了一个文件,但在处理文件过程中发生异常,这时文件还没有被关闭,此时就会产生资源回收问题。对此,java提供了一种好的解决方案,那就是finally子句,finally子句中的语句是一定会被执行的,所以我们只要把前面说的文件关闭的语句放在finally子句中无论在读写文件中是否遇到异常退出,文件关闭语句都会执行,保证了资源的合理回收。

int 和 Integer 有什么区别

int是java提供的8种原始数据类型之。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是临时的,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0。另外,Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。

重载和重写的区别

override(重写)

1.方法名、参数、返回值相同。

2.子类方法不能缩小父类方法的访问权限。

3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

4.存在于父类和子类之间。

5.方法被定义为final不能被重写。

overload(重载)

1.参数类型、个数、顺序至少有一个不相同。

2.不能重载只有返回值不同的方法名。

3.存在于父类和子类、同类中。

抽象类和接口有什么区别

抽象类是用来捕捉子类的通用特性的。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板

接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情

参数抽象类接口
默认的方法实现可以有默认实现不存在方法实现
实现子类需要实现一样方法都得实现
构造器可以有构造器没有构造器
与正常java类区别不能实例化接口不是同一种类型
访问修饰符与正常的一样默认是public
多继承只能单继承可以实现多个接口
速度比接口快比抽象方法慢

什么时候使用抽象类和接口

  • 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
  • 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
  • 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

Oracle已经开始尝试向接口中引入默认方法和静态方法,以此来减少抽象类和接口之间的差异

说说反射的用途及实现

Java反射机制主要提供了以下功能:在运行时构造一个类的对象;判断一个类所具有的成员变量和方法;调用一个对象的方法;生成动态代理。反射最大的应用就是框架

主要用途是:通过传递一个字符串值 去调用某一个类的方法

Java反射的主要功能:

  • 确定一个对象的类
  • 取出类的modifiers,数据成员,方法,构造器,和超类.
  • 找出某个接口里定义的常量和方法说明.
  • 创建一个类实例,这个实例在运行时刻才有名字(运行时间才生成的对象).
  • 取得和设定对象数据成员的值,如果数据成员名是运行时刻确定的也能做到.
  • 在运行时刻调用动态对象的方法.
  • 创建数组,数组大小和类型在运行时刻才确定,也能更改数组成员的值.

说说自定义注解的场景及实现

不知道,需要学习

HTTP请求的GET与POST方式的区别

1.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,在URL中可以看到。

2.post是通过HTTPPOST机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

3.get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

4.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

5.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

所以综上建议: 1.包含机密信息的话,建议用Post数据提交方式;

2.在做数据查询时,可以使用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

session与cookie区别

不知道,需要学习

MVC设计思想

MVC设计思想

MVC设计思想和优缺点

equals与==的区别

equals和==的区别小结

集合

List、Set、Map 区别

List、Set、Map 区别

Set,List,Map的区别

Arraylist 与 LinkedList 区别

ArrayList和LinkedList的区别

ArrayList 与 Vector 区别

ArrayList、LinkedList、Vector的区别