markdown Java知识总结#Java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown 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设计思想](https://www.cnblogs.com/happyPawpaw/articles/2536249.html)

[MVC设计思想和优缺点](https://blog.csdn.net/daijin888888/article/details/51169156)

>**equals与==的区别**

[equals和==的区别小结](https://www.cnblogs.com/Eason-S/p/5524837.html)


## 集合

>**List、Set、Map 区别**

[List、Set、Map 区别](https://www.cnblogs.com/IvesHe/p/6108933.html)

[Set,List,Map的区别](https://www.cnblogs.com/leigang1314/p/5577637.html)

>**Arraylist 与 LinkedList 区别**

[ArrayList和LinkedList的区别](https://www.cnblogs.com/shanheyongmu/p/6439202.html)

>**ArrayList 与 Vector 区别**

[ArrayList、LinkedList、Vector的区别](https://www.cnblogs.com/yw-ah/p/5841327.html)

以上是关于markdown Java知识总结#Java的主要内容,如果未能解决你的问题,请参考以下文章

java复习预科知识-Markdown学习

markdown图标分享

Java基础知识总结

Java最强最新知识体系总结(2021版)

Java知识总结——基础知识

markdown Javascript基础知识总结我