基础语法
- public class 和 class
- Java 的三种注释
- 标识符
- 标识符规范
- 关键字
- default
- 变量
- 自增自减运算符
- 数据类型
- 自动类型转换、强制类型转换
- 逻辑运算短路现象
- 控制语句
- 选择语句
- 循环语句
- 转向语句
- 方法
- 方法定义
- 方法调用
- 方法重载
- package
- import
- 什么时候不需要import?
- 如何使用
- 访问控制权限
- 控制范围
public class 和 class
- 一个源文件内可以定义多个class;
- public修饰的类不是必须的,可以没有;
- public修饰的类如果有,只能存在一个;
- public的类如果有,其类名必须与源文件名保持一致;
- 源文件内,每定义一个class,编译后一定生成对应的
.class
文件; - 每个class内都可以编写程序入口,但实际开发中不会这么用。
Java 的三种注释
- 单行注释:其语法与 C++ 一致
//
,通常用于解释方法内某单行代码的作用; - 多行注释:其语法与 C++ 一致
/* 换行;注释内容;换行;*/
,通常用于解释方法、函数的作用: - 文档注释:.javadoc注释————javadoc.exe自动提取注释信息生成到help文档中
/** 换行;注释内容;换行;*/
用的比较多的还是单行注释和文档注释,多行注释在实际开发中使用的相对较少。注释并不会执行,编译器在编译代码之前会把代码中的所有注释抹掉,字节码中不保留注释。
标识符
凡是程序员自己有权利命名的单词都是标识符。
- 类名;
- 方法名;
- 变量名;
- 接口名;
- 常量名
注意:虽然 Java 中标识符严格区分大小写,但是对于类名来说,如果一个 Java 源文件中同时出现 A 类和 a 类,那么谁在前就生成谁。
标识符规范
- 见名知意;
- 驼峰式命名;
- 类名、接口名首字母大写,后面每个单词首字母大写;
- 变量名、方法名首字母小写,后面每个单词首字母大写;
- 所有“常量”名:全部大写,并且单词与单词之间用下划线衔接。
关键字
有一些标识符,Java 语言已经赋予了其特殊的含义,只能用于特定的地方,这些特殊的标识符就是关键字。
注意 :虽然 true
, false
, 和 null
看起来像关键字但实际上他们是字面值,同时你也不可以作为标识符来使用。
default
default
关键字既属于程序控制,也属于类,方法和变量修饰符,还属于访问控制。
- 在程序控制中,当在
switch
中匹配不到任何情况时,可以使用default
来编写默认匹配的情况。 - 在类,方法和变量修饰符中,从 JDK8 开始引入了默认方法,可以使用
default
关键字来定义一个方法的默认实现。 - 在访问控制中,如果一个方法前没有任何修饰符,则默认会有一个修饰符
default
,但是这个修饰符加上了就会报错。
变量
与变量相对的是字面量,变量可分为:
- 局部变量:在方法体当中声明的变量,只在方法体内有效,方法体执行结束后该变量的内存就会被释放。
- 成员变量:在方法体之外,类体内声明的变量
局部变量与成员变量的区别:
- 语法形式 :成员变量是属于类或对象的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。
- 存储方式 :如果成员变量是使用 static 修饰的,那么这个成员变量是属于类的,如果没有使用 static 修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。
- 生命周期 :成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动生成,随着方法的调用结束而消亡。
- 默认值 :成员变量如果没有被赋初始值,则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。
自增自减运算符
Java 提供了一种特殊的运算符,用于某个整数类型变量增加 1 或减少 1,即自增运算符(++)和自减运算符(–)。
注意, a = ++b
与 a = b++
执行后b
值相同, a
值不同。++b
先自加再执行赋值操作,而 b++
先赋值后自加。
数据类型
- 基本数据类型:byte/short/int/long/float/double/boolean/char,占内存大小依次为1/2/4/8/4/8/1/2;
- 引用数据类型:String、对象引用;
注意:
- 在java中,整数型字面量默认被当做int类型处理;
- java中任意浮点型数据默认为double,在浮点型字面量后加F/f视为float;
- 在java中boolean类型只有true和false,不像C/C++中1和0也可以表示布尔类型。
自动类型转换、强制类型转换
- 除boolean类型不能转换,剩下七种类型之间都可以进行转换;
- 小容量可以直接赋值给大容量,称为自动类型转换;
- 大容量转换成小容量,想要编译通过,必须加强制类型转换符如
(int)
,但是运行时可能损失精度; - 当整数型字面量没有超出byte/short/char的取值范围时,那么这个整数型字面量可以直接赋值给byte/short/char类型的变量;
- byte、char、short做混合运算的时候,各自先转换成int再做运算;
- 多种数据类型做混合运算时,最终结果的类型是“最大容量”所对应的类型,第4点特例除外。
逻辑运算短路现象
逻辑运算中,如左表达式 && 右表达式
和 左表达式 || 右表达式
中,右边的表达式不执行,即为短路现象。且使用短路运算符效率会高一些。
控制语句
Java 存在三种控制语句:选择语句、循环语句、转向语句,且所有合法的“控制语句”都可以嵌套使用。
选择语句
- if,else if,else;
- switch;
循环语句
- for循环
- while循环
- do…while循环
转向语句
- break:
1. switch语句中,用来终止switch语句的执行,预防switch穿透;
2. 循环语句中,用来终止循环的执行;
3. break的执行并不会让整个方法结束,主要是用来终止离他最近的那个循环语句;
4. 用break终止指定循环,首先给循环起名,a:for 后可以使用break终止外层循环,break a; - continue:终止当前“本次”循环,直接进入下一次循环继续执行;
- return:用于跳出所在方法,结束该方法的运行。return 一般有两种用法:
1.return ;
:直接使用 return 结束方法执行,用于没有返回值函数的方法;
2.return value;
:return 一个特定值,用于有返回值函数的方法
方法
方法是可以完成某个特定功能的并且可以重复利用的代码片段。业务逻辑、功能相同时要提高代码的利用率降低重复率,即提高复用性。可以定义方法,需要使用该功能时直接调用该方法即可。
- 在 Java 中,方法定义在类体之中,定义顺序无所谓;
- 局部变量在方法结束后,其占用的内存会自动释放;
- 程序开始执行时先执行 main 方法,因为 main 方法是一个入口。main 方法不需要程序员手动调用,由 JVM 调用。
方法定义
[修饰符列表] 返回值类型 方法名 (形式参数列表){
方法体;
}
注意:[]符号中的内容表示不是必须的,可选。方法体由Java语句构成。返回值类型不是void,方法体执行结束时必须使用return。且只要return执行,当前方法必定结束。
方法调用
语法:
- 类名.方法名(实际参数列表);
- 实列名.方法名(实际参数列表)。
注意:java中关于方法调用时参数传递的原则,只有传值,没有传址。
方法重载
方法重载(overload)是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。
**什么情况下我们考虑使用方法重载呢?**在同一个类当中,如果多个功能是相似的,可以考虑将它们的方法名定义的一致,使用方法重载机制,这样便于程序员的调用,以及代码美观。
需满足以下三个条件:
- 同一个类当中;
- 方法名相同;
- 参数列表不同:个数不同算不同,顺序不同算不同,类型不同也算不同。
注意:方法重载与“返回值类型”无关,与“修饰符列表”无关。
综上:重载就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理。
package
- package出现在java源文件第一行;
- 带有包名的编译:java -d . xxx.java;
- 运行:java 完整类名。
import
什么时候不需要import?
- java.lang下不需要;
- 同包下不需要;
- 其他一律需要。
如何使用
- import 完整类名;
- import 包名.*;
访问控制权限
-
private
私有; -
public
公开 -
protected
受保护 -
default
默认,显示声明会报错!
控制范围
-
private
表示私有的,只能在本类中访问; -
public
表示公开的,在任何位置都可以访问; - “默认”表示只能在本类,以及同包下访问;
-
protected
表示只能在本类、同包、子类中访问。
访问控制修饰符 | 本类 | 同包 | 子类 | 任意位置 |
public | 可以 | 可以 | 可以 | 可以 |
protected | 可以 | 可以 | 可以 | 不行 |
默认 | 可以 | 可以 | 不行 | 不行 |
private | 可以 | 不行 | 不行 | 不行 |