Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 83 additions & 10 deletions docs/java/Java基础知识.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,15 @@ JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有

所以,实际上 java 和 javax 没有区别。这都是一个名字。

### 1.2 Java 语法

#### 1.1.8 为什么说Java语言“编译与解释并存”?
高级编程语言按照程序的执行方式分为编译型和解释型两种。简单来说,编译型语言是指编译器针对特定的操作系统将源代码一次性翻译成可被该平台执行的机器码;解释型语言是指解释器对源程序逐行解释成特定平台的机器码并立即执行。比如,你想阅读一本英文名著,你可以找一个英文翻译人员帮助你阅读,
有两种选择方式,你可以先等翻译人员将全本的英文名著(也就是源码)都翻译成汉语,再去阅读,也可以让翻译人员翻译一段,你在旁边阅读一段,慢慢把书读完。

Java语言既具有编译型语言的特征,也具有解释型语言的特征,因为Java程序要经过先编译,后解释两个步骤,由Java编写的程序需要先经过编译步骤,生成字节码(*.class文件),这种字节码必须由Java解释器来解释执行。因此,我们可以认为Java语言编译与解释并存。


### 1.2 Java语法

#### 1.2.1 字符型常量和字符串常量的区别?

Expand All @@ -121,7 +129,27 @@ JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有
> java 编程思想第四版:2.2.2 节
> ![](http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-9-15/86735519.jpg)

### 1.3 Java 流程控制
#### 1.2.2 为什么要写注释?

Java中的注释有三种:单行注释、多行注释和文档注释。在我们编写代码的时候,如果代码量比较少,我们自己或者团队其他成员还可以很轻易地看懂代码,但是当项目结构一旦复杂起来,我们就需要用到注释了。注释并不会执行,是我们程序员写给自己看的,注释是你的代码说明书,能够帮助看代码的人快速地理清代码之间的逻辑关系。因此,在写程序的时候随手加上注释是一个非常好的习惯。

#### 1.2.3 标识符和关键字的区别是什么?
在我们编写程序的时候,需要大量地为程序、类、变量、方法等取名字,于是就有了标识符,简单来说,标识符就是一个名字。但是有一些标识符,Java语言已经赋予了其特殊的含义,只能用于特定的地方,这种特殊的标识符就是关键字。因此,关键字是被赋予特殊含义的标识符。比如,在我们的日常生活中 ,“警察局”这个名字已经被赋予了特殊的含义,所以如果你开一家店,店的名字不能叫“警察局”,“警察局”就是我们日常生活中的关键字。

#### 1.2.4 自增自减运算符
在写代码的过程中,常见的一种情况是需要某个整数类型变量增加1或减少1,Java提供了一种特殊的运算符,用于这种表达式,叫做自增运算符(++)和自减运算符(--)。++和--运算符可以放在操作数之前,也可以放在操作数之后,当运算符放在操作数之前时,先自增/减,再赋值;当运算符放在操作数之后时,先赋值,再自增/减。例如,当“b=++a”时,先自增(自己增加1),再赋值(赋值给b);当“b=a++”时,先赋值(赋值给b),再自增(自己增加1)。也就是,++a输出的是a+1的值,a++输出的是a值。用一句口诀就是:“符号在前就先加/减,符号在后就后加/减”。

### 1.3 Java流程控制

#### 1.3.1 continue、break、和return的区别是什么?

在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。但是,有时候可能需要在循环的过程中,当发生了某种条件之后 ,提前终止循环,这就需要用到跳转语句。

continue跳转语句:是指跳出当前的这一次循环,继续下一次循环。

break跳转语句:是指跳出整个循环体,继续执行循环下面的语句。

return跳转语句:是指跳出所在方法,结束该方法的运行。

### 1.4 数组

Expand Down Expand Up @@ -179,6 +207,59 @@ JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有

![deep and shallow copy](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-7/java-deep-and-shallow-copy.jpg)

#### 1.5.5 方法的四种类型

1、无参数无返回值的方法

```java
// 无参数无返回值的方法(如果方法没有返回值,不能不写,必须写void,表示没有返回值)
public void f1() {
System.out.println("无参数无返回值的方法");
}
```

2、有参数无返回值的方法

```java
/**
* 有参数无返回值的方法
* 参数列表由零组到多组“参数类型+形参名”组合而成,多组参数之间以英文逗号(,)隔开,形参类型和形参名之间以英文空格隔开
*/
public void f2(int a, String b, int c) {
System.out.println(a + "-->" + b + "-->" + c);
}
```
3、有返回值无参数的方法

```java
// 有返回值无参数的方法(返回值可以是任意的类型,在函数里面必须有return关键字返回对应的类型)
public int f3() {
System.out.println("有返回值无参数的方法");
return 2;
}
```
4、有返回值有参数的方法

```java
// 有返回值有参数的方法
public int f4(int a, int b) {
return a * b;
}
```
5、return在无返回值方法的特殊使用

```java
// return在无返回值方法的特殊使用
public void f5(int a) {
if (a>10) {
return;//表示结束所在方法 (f5方法)的执行,下方的输出语句不会执行
}
System.out.println(a);
}
```

## 2. Java面向对象

## 2. Java 面向对象

### 2.1 类和对象
Expand Down Expand Up @@ -303,14 +384,6 @@ public class Student {

详见笔主的这篇文章: https://snailclimb.gitee.io/javaguide/#/docs/java/basic/final,static,this,super

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

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

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

### 2.4 接口

#### 2.4.1 接口和抽象类的区别是什么?
Expand Down
10 changes: 6 additions & 4 deletions docs/java/basic/final,static,this,super.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,15 @@

## final 关键字

**final关键字主要用在三个地方:变量、方法、类。**
**final关键字,意思是最终的、不可修改的,最见不得变化 ,用来修饰类、方法和变量,具有以下特点:**

1. **对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。**
1. **final修饰的类不能被继承,final类中的所有成员方法都会被隐式的指定为final方法;**

2. **当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。**
2. **final修饰的方法不能被重写;**

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

说明:使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的Java版本已经不需要使用final方法进行这些优化了)。类中所有的private方法都隐式地指定为final。

## static 关键字

Expand Down