Skip to content

Commit

Permalink
增加 final 关键字的一些总结
Browse files Browse the repository at this point in the history
  • Loading branch information
Snailclimb authored Sep 2, 2018
1 parent 4e647d5 commit c637a1d
Showing 1 changed file with 50 additions and 44 deletions.
94 changes: 50 additions & 44 deletions Java相关/Java基础知识.md
Original file line number Diff line number Diff line change
@@ -1,53 +1,52 @@

<!-- MarkdownTOC -->

- [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基础学习书籍推荐)

<!-- /MarkdownTOC -->



# Java 基础知识30问
## 1. 面向对象和面向过程的区别

### 面向过程
Expand Down Expand Up @@ -312,7 +311,7 @@ hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返
5. hashCode() 的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)


### 28. Java中的值传递和引用传递
## 28. Java中的值传递和引用传递

**值传递**是指对象被值传递,意味着传递了对象的一个副本,即使副本被改变,也不会影响源对象。(因为值传递的时候,实际上是将实参的值复制一份给形参。)

Expand Down Expand Up @@ -357,6 +356,13 @@ hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返

到达目的地:Dead

## 31 关于 final 关键字的一些总结

final关键字主要用在三个地方:变量、方法、类。

1. ①对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
2. ②当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。
3. ③使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的Java版本已经不需要使用final方法进行这些优化了)。类中所有的private方法都隐式地指定为fianl。

# Java基础学习书籍推荐

Expand Down

0 comments on commit c637a1d

Please sign in to comment.