From c637a1d9586183147b17e68523e640ed4000a264 Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Sun, 2 Sep 2018 17:50:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20final=20=E5=85=B3=E9=94=AE?= =?UTF-8?q?=E5=AD=97=E7=9A=84=E4=B8=80=E4=BA=9B=E6=80=BB=E7=BB=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...72\347\241\200\347\237\245\350\257\206.md" | 94 ++++++++++--------- 1 file changed, 50 insertions(+), 44 deletions(-) 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 8082b093..643550b3 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" @@ -1,53 +1,52 @@ + -- [Java 基础知识30问](#java-基础知识30问) - - [1. 面向对象和面向过程的区别](#1-面向对象和面向过程的区别) - - [面向过程](#面向过程) - - [面向对象](#面向对象) - - [2. Java 语言有哪些特点?](#2-java-语言有哪些特点?) - - [3. 什么是 JDK?什么是 JRE?什么是 JVM?三者之间的联系与区别](#3-什么是-jdk?什么是-jre?什么是-jvm?三者之间的联系与区别) - - [4. 什么是字节码?采用字节码的最大好处是什么?](#4-什么是字节码?采用字节码的最大好处是什么?) - - [先看下 java 中的编译器和解释器:](#先看下-java-中的编译器和解释器:) - - [采用字节码的好处:](#采用字节码的好处:) - - [5. Java和C++的区别](#5-java和c的区别) - - [6. 什么是 Java 程序的主类?应用程序和小程序的主类有何不同?](#6-什么是-java-程序的主类?应用程序和小程序的主类有何不同?) - - [7. Java 应用程序与小程序之间有那些差别?](#7-java-应用程序与小程序之间有那些差别?) - - [8. 字符型常量和字符串常量的区别](#8-字符型常量和字符串常量的区别) - - [9. 构造器 Constructor 是否可被 override](#9-构造器-constructor-是否可被-override) - - [10. 重载和重写的区别](#10-重载和重写的区别) - - [11. Java 面向对象编程三大特性:封装、继承、多态](#11-java-面向对象编程三大特性封装、继承、多态) - - [封装](#封装) - - [继承](#继承) - - [多态](#多态) - - [12. String 和 StringBuffer、StringBuilder 的区别是什么?String 为什么是不可变的?](#12-string-和-stringbuffer、stringbuilder-的区别是什么?string-为什么是不可变的?) - - [13. 自动装箱与拆箱](#13-自动装箱与拆箱) - - [14. 在一个静态方法内调用一个非静态成员为什么是非法的?](#14-在一个静态方法内调用一个非静态成员为什么是非法的?) - - [15. 在 Java 中定义一个不做事且没有参数的构造方法的作用](#15-在-java-中定义一个不做事且没有参数的构造方法的作用) - - [16. import java和javax有什么区别](#16-import-java和javax有什么区别) - - [17. 接口和抽象类的区别是什么?](#17-接口和抽象类的区别是什么?) - - [18. 成员变量与局部变量的区别有那些?](#18-成员变量与局部变量的区别有那些?) - - [19. 创建一个对象用什么运算符?对象实体与对象引用有何不同?](#19-创建一个对象用什么运算符?对象实体与对象引用有何不同?) - - [20. 什么是方法的返回值?返回值在类的方法里的作用是什么?](#20-什么是方法的返回值?返回值在类的方法里的作用是什么?) - - [21. 一个类的构造方法的作用是什么?若一个类没有声明构造方法,改程序能正确执行吗?为什么?](#21-一个类的构造方法的作用是什么?若一个类没有声明构造方法,改程序能正确执行吗?为什么?) - - [22. 构造方法有哪些特性?](#22-构造方法有哪些特性?) - - [23. 静态方法和实例方法有何不同?](#23-静态方法和实例方法有何不同?) - - [24. 对象的相等与指向他们的引用相等,两者有什么不同?](#24-对象的相等与指向他们的引用相等,两者有什么不同?) - - [25. 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?](#25-在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?) - - [26. == 与 equals\(重要\)](#26--与-equals重要) - - [27. hashCode 与 equals(重要)](#27-hashcode-与-equals(重要)) - - [hashCode()介绍](#hashcode()介绍) - - [为什么要有 hashCode](#为什么要有-hashcode) - - [hashCode()与equals()的相关规定](#hashcode()与equals()的相关规定) - - [28. Java中的值传递和引用传递](#28-java中的值传递和引用传递) - - [29. 简述线程,程序、进程的基本概念。以及他们之间关系是什么?](#29-简述线程,程序、进程的基本概念。以及他们之间关系是什么?) - - [30. 线程有哪些基本状态?这些状态是如何定义的?](#30-线程有哪些基本状态?这些状态是如何定义的) +- [1. 面向对象和面向过程的区别](#1-面向对象和面向过程的区别) + - [面向过程](#面向过程) + - [面向对象](#面向对象) +- [2. Java 语言有哪些特点?](#2-java-语言有哪些特点?) +- [3. 什么是 JDK?什么是 JRE?什么是 JVM?三者之间的联系与区别](#3-什么是-jdk?什么是-jre?什么是-jvm?三者之间的联系与区别) +- [4. 什么是字节码?采用字节码的最大好处是什么?](#4-什么是字节码?采用字节码的最大好处是什么?) + - [先看下 java 中的编译器和解释器:](#先看下-java-中的编译器和解释器:) + - [采用字节码的好处:](#采用字节码的好处:) +- [5. Java和C++的区别](#5-java和c的区别) +- [6. 什么是 Java 程序的主类?应用程序和小程序的主类有何不同?](#6-什么是-java-程序的主类?应用程序和小程序的主类有何不同?) +- [7. Java 应用程序与小程序之间有那些差别?](#7-java-应用程序与小程序之间有那些差别?) +- [8. 字符型常量和字符串常量的区别](#8-字符型常量和字符串常量的区别) +- [9. 构造器 Constructor 是否可被 override](#9-构造器-constructor-是否可被-override) +- [10. 重载和重写的区别](#10-重载和重写的区别) +- [11. Java 面向对象编程三大特性:封装、继承、多态](#11-java-面向对象编程三大特性封装、继承、多态) + - [封装](#封装) + - [继承](#继承) + - [多态](#多态) +- [12. String 和 StringBuffer、StringBuilder 的区别是什么?String 为什么是不可变的?](#12-string-和-stringbuffer、stringbuilder-的区别是什么?string-为什么是不可变的?) +- [13. 自动装箱与拆箱](#13-自动装箱与拆箱) +- [14. 在一个静态方法内调用一个非静态成员为什么是非法的?](#14-在一个静态方法内调用一个非静态成员为什么是非法的?) +- [15. 在 Java 中定义一个不做事且没有参数的构造方法的作用](#15-在-java-中定义一个不做事且没有参数的构造方法的作用) +- [16. import java和javax有什么区别](#16-import-java和javax有什么区别) +- [17. 接口和抽象类的区别是什么?](#17-接口和抽象类的区别是什么?) +- [18. 成员变量与局部变量的区别有那些?](#18-成员变量与局部变量的区别有那些?) +- [19. 创建一个对象用什么运算符?对象实体与对象引用有何不同?](#19-创建一个对象用什么运算符?对象实体与对象引用有何不同?) +- [20. 什么是方法的返回值?返回值在类的方法里的作用是什么?](#20-什么是方法的返回值?返回值在类的方法里的作用是什么?) +- [21. 一个类的构造方法的作用是什么?若一个类没有声明构造方法,该程序能正确执行吗?为什么?](#21-一个类的构造方法的作用是什么?若一个类没有声明构造方法,该程序能正确执行吗?为什么?) +- [22. 构造方法有哪些特性?](#22-构造方法有哪些特性?) +- [23. 静态方法和实例方法有何不同?](#23-静态方法和实例方法有何不同?) +- [24. 对象的相等与指向他们的引用相等,两者有什么不同?](#24-对象的相等与指向他们的引用相等,两者有什么不同?) +- [25. 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?](#25-在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?) +- [26. == 与 equals\(重要\)](#26--与-equals重要) +- [27. hashCode 与 equals(重要)](#27-hashcode-与-equals(重要)) + - [hashCode()介绍](#hashcode()介绍) + - [为什么要有 hashCode](#为什么要有-hashcode) + - [hashCode()与equals()的相关规定](#hashcode()与equals()的相关规定) +- [28. Java中的值传递和引用传递](#28-java中的值传递和引用传递) +- [29. 简述线程,程序、进程的基本概念。以及他们之间关系是什么?](#29-简述线程,程序、进程的基本概念。以及他们之间关系是什么?) +- [30. 线程有哪些基本状态?这些状态是如何定义的?](#30-线程有哪些基本状态?这些状态是如何定义的) +- [31 关于 final 关键字的一些总结](#31-关于-final-关键字的一些总结) - [Java基础学习书籍推荐](#java基础学习书籍推荐) - -# Java 基础知识30问 ## 1. 面向对象和面向过程的区别 ### 面向过程 @@ -312,7 +311,7 @@ hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返 5. hashCode() 的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据) -### 28. Java中的值传递和引用传递 +## 28. Java中的值传递和引用传递 **值传递**是指对象被值传递,意味着传递了对象的一个副本,即使副本被改变,也不会影响源对象。(因为值传递的时候,实际上是将实参的值复制一份给形参。) @@ -357,6 +356,13 @@ hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返 到达目的地:Dead +## 31 关于 final 关键字的一些总结 + +final关键字主要用在三个地方:变量、方法、类。 + +1. ①对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。 +2. ②当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。 +3. ③使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的Java版本已经不需要使用final方法进行这些优化了)。类中所有的private方法都隐式地指定为fianl。 # Java基础学习书籍推荐 -- GitLab