diff --git "a/Java\347\233\270\345\205\263/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" "b/Java\347\233\270\345\205\263/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" index b17f5d268d19836780bffb991e1670b4fa3536e3..c550feff599d5ea1359bcc7f26a504d5c73bef2a 100644 --- "a/Java\347\233\270\345\205\263/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" +++ "b/Java\347\233\270\345\205\263/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" @@ -21,7 +21,7 @@ - [继承](#继承) - [多态](#多态) - [12. String StringBuffer 和 StringBuilder 的区别是什么 String 为什么是不可变的](#12-string-stringbuffer-和-stringbuilder-的区别是什么-string-为什么是不可变的) -- [13. 自动装箱与拆箱](#13-自动装箱与拆箱) +- [13. 自动装箱与拆箱](#13-自动装箱与拆箱) - [14. 在一个静态方法内调用一个非静态成员为什么是非法的](#14-在一个静态方法内调用一个非静态成员为什么是非法的) - [15. 在 Java 中定义一个不做事且没有参数的构造方法的作用](#15-在-java-中定义一个不做事且没有参数的构造方法的作用) - [16. import java和javax有什么区别](#16-import-java和javax有什么区别) @@ -32,15 +32,15 @@ - [21. 一个类的构造方法的作用是什么 若一个类没有声明构造方法,该程序能正确执行吗 ?为什么?](#21-一个类的构造方法的作用是什么-若一个类没有声明构造方法该程序能正确执行吗-为什么) - [22. 构造方法有哪些特性](#22-构造方法有哪些特性) - [23. 静态方法和实例方法有何不同](#23-静态方法和实例方法有何不同) -- [24. 对象的相等与指向他们的引用相等,两者有什么不同?](#24-对象的相等与指向他们的引用相等,两者有什么不同?) -- [25. 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?](#25-在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是) +- [24. 对象的相等与指向他们的引用相等,两者有什么不同?](#24-对象的相等与指向他们的引用相等两者有什么不同) +- [25. 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?](#25-在调用子类构造方法之前会先调用父类没有参数的构造方法其目的是) - [26. == 与 equals\(重要\)](#26--与-equals重要) -- [27. hashCode 与 equals(重要)](#27-hashcode-与-equals(重要)) +- [27. hashCode 与 equals \(重要\)](#27-hashcode-与-equals-重要) - [hashCode()介绍](#hashcode()介绍) - [为什么要有 hashCode](#为什么要有-hashcode) - [hashCode()与equals()的相关规定](#hashcode()与equals()的相关规定) - [28. 为什么Java中只有值传递](#28-为什么java中只有值传递) -- [29. 简述线程,程序、进程的基本概念。以及他们之间关系是什么](#29-简述线程,程序、进程的基本概念。以及他们之间关系是什么) +- [29. 简述线程,程序、进程的基本概念。以及他们之间关系是什么](#29-简述线程程序进程的基本概念以及他们之间关系是什么) - [30. 线程有哪些基本状态?](#30-线程有哪些基本状态) - [31 关于 final 关键字的一些总结](#31-关于-final-关键字的一些总结) - [32 Java 中的异常处理](#32-java-中的异常处理) @@ -223,7 +223,7 @@ String 中的对象是不可变的,也就可以理解为常量,线程安全 2. 单线程操作字符串缓冲区下操作大量数据 = StringBuilder 3. 多线程操作字符串缓冲区下操作大量数据 = StringBuffer -## 13. 自动装箱与拆箱 +## 13. 自动装箱与拆箱 **装箱**:将基本类型用它们对应的引用类型包装起来; **拆箱**:将包装类型转换为基本数据类型; @@ -241,7 +241,7 @@ String 中的对象是不可变的,也就可以理解为常量,线程安全 所以,实际上java和javax没有区别。这都是一个名字。 -## 17. 接口和抽象类的区别是什么 +## 17. 接口和抽象类的区别是什么 1. 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法 2. 接口中的实例变量默认是 final 类型的,而抽象类中则不一定 @@ -251,7 +251,7 @@ String 中的对象是不可变的,也就可以理解为常量,线程安全 备注:在JDK8中,接口也可以定义静态方法,可以直接用接口名调用。实现类和实现是不可以调用的。如果同时实现两个接口,接口中定义了一样的默认方法,必须重写,不然会报错。(详见issue:[https://github.com/Snailclimb/JavaGuide/issues/146](https://github.com/Snailclimb/JavaGuide/issues/146)) -## 18. 成员变量与局部变量的区别有那些 +## 18. 成员变量与局部变量的区别有那些 1. 从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰; 2. 从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存 @@ -282,15 +282,15 @@ new运算符,new创建对象实例(对象实例在堆内存中),对象 2. 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制. -## 24. 对象的相等与指向他们的引用相等,两者有什么不同? +## 24. 对象的相等与指向他们的引用相等,两者有什么不同? 对象的相等,比的是内存中存放的内容是否相等。而引用相等,比较的是他们指向的内存地址是否相等。 -## 25. 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是? +## 25. 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是? 帮助子类做初始化工作。 -## 26. == 与 equals(重要) +## 26. == 与 equals(重要) **==** : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型==比较的是值,引用数据类型==比较的是内存地址) @@ -327,7 +327,7 @@ public class test1 { -## 27. hashCode 与 equals(重要) +## 27. hashCode 与 equals (重要) 面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” @@ -359,7 +359,7 @@ hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返 [为什么Java中只有值传递?](https://github.com/Snailclimb/Java-Guide/blob/master/%E9%9D%A2%E8%AF%95%E5%BF%85%E5%A4%87/%E6%9C%80%E6%9C%80%E6%9C%80%E5%B8%B8%E8%A7%81%E7%9A%84Java%E9%9D%A2%E8%AF%95%E9%A2%98%E6%80%BB%E7%BB%93/%E7%AC%AC%E4%B8%80%E5%91%A8%EF%BC%882018-8-7%EF%BC%89.md) -## 29. 简述线程,程序、进程的基本概念。以及他们之间关系是什么 +## 29. 简述线程,程序,进程的基本概念.以及他们之间关系是什么? **线程**与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。