注释
定义:用于解释说明程序的文字
作用:在程序中,尤其是复杂的程序中,适当地加入注释可以增加程序的可读性,有利于程序的修改、调试和交流。注释的内容在程序编译的时候会被忽视,不会产生目标代码,注释的部分不会对程序的执行结果产生任何影响。
分类:
- 单行注释
格式:// 注释文字
- 多行注释
格式:/* 注释文字 */
- 文档注释
格式:/** 注释文字 */
注意事项
多行和文档注释都不能嵌套使用。
关键字
定义:被Java语言赋予了特殊含义, 用做专门用途的字符串 (单词)
特点:关键字中所有字母都为小写
包含:
用于数据类型
byte
:基本数据类型之一,字节类型short
:基本数据类型之一,短整数类型int
:基本数据类型之一,整数类型long
:基本数据类型之一,长整数类型float
:基本数据类型之一,单精度浮点数类型double
:基本数据类型之一,双精度浮点数类型boolean
:基本数据类型之一,声明布尔类型的关键字char
:基本数据类型之一,字符类型void
:声明当前成员方法没有返回值new
:用来创建新实例对象instanceof
:用来测试一个对象是否是指定类型的实例对象
用于语句
if
:条件语句的引导词else
:用在条件语句中,表明当条件不成立时的分支for
:一种循环结构的引导词do
:用在do-while循环结构中while
:用在循环结构中switch
:分支语句结构的引导词case
:用在switch语句之中,表示其中的一个分支try
:尝试一个可能抛出异常的程序块catch
:用在异常处理中,用来捕捉异常finally
:用于处理异常情况,用来声明一个基本肯定会被执行到的语句块continue
:回到一个块的开始处default
:默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现throw
:抛出一个异常break
:提前跳出一个块return
:从成员方法中返回数据this
:指向当前实例对象的引用super
:表明当前对象的父类型的引用或者父类型的构造方法
用于修饰
abstract
:表明类或者成员方法具有抽象属性final
:用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量native
:用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的private
:一种访问控制方式:私用模式protected
:一种访问控制方式:保护模式public
:一种访问控制方式:共用模式static
:表明具有静态属性synchronized
:表明一段代码需要同步执行transient
:声明不用序列化的成员域volatile
:表明两个或者多个变量必须同步地发生变化
用于包、类、接口、方法、和异常
class
:声明一个类extends
:表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口implements
:表明一个类实现了给定的接口interface
:声明一个接口package
:声明一个包import
:表明要访问指定的类或包throws
:声明在当前定义的成员方法中所有需要抛出的异常enum
:枚举
用于定义数据类型值的字面值
包含:true
、false
、null
注意:在java 7
中,数值字面量,不管是整数还是浮点数,都允许在数字之间插入任意多个下划线
。
int i = 10_000;
long j = 100_000_000;
保留字
定义:现有 Java 版本尚未使用, 但以后版本可能会作为关键字使用。
包含:goto
、 const
转义字符
定义:以反斜线\
开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称转义
字符。
标识符
定义:给包
、类
、方法
、变量
起名字的符号称之为标识符
组成:由字母
、数字
、下划线
、美元符号
组成
注意:
- 不能包含空格
- 不能以数字开头
- 不能是Java中的关键字
- 大小写敏感
- 无长度限制
命名规约:
-
项目名:全部用小写字母,多个单词之间用横杆-分割。
举例:spring
,spring-boot
-
包名:全部小写,多级包用
.
隔开。
举例:com.onovo
-
类、接口:一个单词首字母大写,多个单词每个单词的首字母大写。
举例:Student
、Car
、HelloWorld
-
方法和变量:一个单词首字母小写,多个单词从第二个单词开始每个单词的首字母大写。
举例:age
、maxAge
、show()
、getAge()
-
常量:如果是一个单词,所有字母大写,如果是多个单词,所有的单词大写,用下划线区分每个单词。
举例:DATE,MAX_AGE
基本数据类型
数据类型 | 字节数 | 位数 | 范围 | 包装类 | 默认值 | |
---|---|---|---|---|---|---|
整型 | byte | 1 | 8 | -2^(8 - 1) ~ 2^(8 - 1) - 1 即 -128 ~ 127 | Byte | 0 |
整型 | short | 2 | 16 | -2^(16 - 1) ~ 2^(16 - 1) - 1 即 -32768 ~ 32767 | Short | 0 |
整型 | int | 4 | 32 | -2^(32 - 1) ~ 2^(32 - 1) - 1 | Integer | 0 |
整型 | long | 8 | 64 | -2^(64 - 1) ~ 2^(64 - 1) - 1 | Long | 0L |
浮点型 | float | 4 | 32 | 1.4E-45 ~ 3.4028235E38 | Float | 0.0F |
浮点型 | double | 8 | 64 | 4.9E-324 ~ 1.7976931348623157E308 | Double | 0.0D |
布尔型 | boolean | 1 | 8 | true / false | Boolean | false |
字符型 | byte | 2 | 16 | 0~ 2^(16 - 1) - 1 | Character | \u0000 |
注:
- 整数的默认类型为
int
,浮点数的默认类型为double
; - 八种基本数据类型的包装类:除了
char
的是Character
、int
类型的是Integer
,其他都是首字母大写; - 关于值的范围问题,需要注意
char
类型是无符号
的,不能为负
,所以是0开始的.
.valueOf()
该方法可将对应的基本类型或字符串转换为包装类对象
以Integer
为例,其他包装类除Character
外都有该方法,如:
Integer i = Integer.valueOf(10);
Integer j =Integer.valueOf("100");
.parseXXX()
该方法将字符串装换为对应的基本数据类型(除Character
外)
以Integer
为例,如:
int a = Integer.parseInt("100");
.xxxValue()
从数字类
的包装类对象
转换为对应的基本数据类型
以Integer
为例,如:
Integer a = Integer.valueOf(100);
int b = a.intValue();
注意:数字类
的包装类都有doubleValue()
,必要时可用于比较。
引用数据类型
除了八种基本数据类型以外,其他的数据类型统称为引用类型(reference Type)。
包括:
- 类、接口、数组、枚举、注释
特点:
- 引用类型数据以对象的形式存在
- 引用类型变量的值是某个对象的句柄,而不是对象本身
- 声明引用类型变量时,系统只为该变量分配引用空间,并未创建一个具体的对象
数组
定义
- 数组是多个相同类型数据的组合,实现对这些数据的统一管理;
- 数组中的元素可以是任何数据类型(基本数据类型、引用数据类型);
- 数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量。
声明与赋值
// 静态初始化
int[] a = new int[3];
double[][] b = new double[3][3];
Student[] students = new Student[3];
// 动态初始化
int[] a = new int[3]{1, 2, 3};
double[][] b = new double[][]{
{1.1, 2.2, 3.3},
{1.1, 2.2, 3.3},
{1.1, 2.2, 3.3}
};
Student[] students = {
new Student(),
new Student(),
new Student()
};
属性
.length:获取数据长度属性
字符串
定义
由多个字符组成的一串数据。
String类
String
String对象是不可变
对象,针对字符串对象的操作(例如subString、contact、replace)都会生成一个新的String对象,如果应用中有大量这样的操作,就会产生大量的临时String对象,然后将指针指向新的String对象,会影响Java应用运行的性能,所以经常改变内容的字符串最好不要用 String 。
StringBuffer(JDK 1.0 synchronized
)
StringBuffer对象是可变对象
,它的原理是申请一个缓冲区来存放字符串,可以避免产生新的字符串对象。我们可以用append或者add方法,把字符串添加到已有序列的末尾或者指定位置。但是StringBuffer是线程安全的,它的方法都被synchronized关键字修饰,导致它的性能不太好。
StringBuilder(JDK1.5)
为了解决StringBuffer的性能问题,StringBuilder类它去掉了线程安全的部分,有效减少了开销,是非线程安全
,是绝大部分情况下进行字符串拼接的首选。
StringBuilder 和 StringBuffer 底层都是利用可修改的(char,JDK 9 以后是byte)数组。
StringJoiner(JDK1.8)
StringJoiner是用于构造由分隔符分隔的字符序列
,并可选择性地从提供的前缀
开始和以提供的后缀
结尾,它的底层是通过StringBuilder实现的。
类声明与创建
String stringName = 字符串常量;
String stringName = new String(字符串常量);
方法
获取功能
- public int length(): 获取字符串的长度。
- public char charAt(int index): 获取指定索引位置的字符
- public int indexOf(int ch): 返回指定字符在此字符串中第一次出现处的索引。
- public int indexOf(String str): 返回指定字符串在此字符串中第一次出现处的索引。
- public int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
- public int indexOf(String str,int fromIndex): 返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
- public String substring(int start): 从指定位置开始截取字符串,默认到末尾。
- public String substring(int start,int end): 从指定位置开始到指定位置结束截取字符串。
判断功能
- public boolean equals(Object obj): 比较字符串的内容是否相同,区分大小写
- public boolean equalsIgnoreCase(String str): 比较字符串的内容是否相同,忽略大小写
- public boolean contains(String str): 判断字符串中是否包含传递进来的字符串
- public boolean startsWith(String str): 判断字符串是否以传递进来的字符串开头
- public boolean endsWith(String str): 判断字符串是否以传递进来的字符串结尾
- public boolean isEmpty(): 判断字符串的内容是否为空串""。
转换功能
- public byte[] getBytes(): 把字符串转换为字节数组。
- public char[] toCharArray(): 把字符串转换为字符数组。
- public static String valueOf(char[] chs): 把字符数组转成字符串。
- public static String valueOf(int i): - 把int类型的数据转成字符串。(String类的valueOf方法可以把任意类型的数据转成字符串。)
- public String toLowerCase(): 把字符串转成小写。
- public String toUpperCase(): 把字符串转成大写。
- public String concat(String str): 把字符串拼接。
其他功能
- public String replace(char old,char new) 将指定字符进行互换
- public String replace(String old,String new) 将指定字符串进行互换
- public String trim() 去除两端空格
- public int compareTo(String str) 会对照ASCII 码表 从第一个字母进行减法运算 - 返回的就是这个减法的结果,如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果,如果连个- 字符串一摸一样 返回的就是0
- public int compareToIgnoreCase(String str) 跟上面一样 只是忽略大小写的比较
流程控制语句
顺序语句
顺序结构没有特定的语法结构由上到下依次执行。
分支语句
分支(条件)语句可根据不同的条件执行不同的语句。
if 语句
if (条件表达式1) {
// 执行代码块 1
} else if (条件表达式2) {
// 执行代码块 2
} else {
// 执行代码块 n
}
switch 语句
switch(表达式) {
case 期待常量1:
// 执行代码块 1
break;
case 期待常量2:
// 执行代码块 2
break;
……
// 其他期待常量
default:
// 执行其他代码块
break;
}
表达式仅支持以下类型
- byte
- short
- char
- int
- enum(jdk1.5)
- String(jdk1.7)
循环语句
循环语句就是在满足一定条件的情况下反复执行某一个操作。
for循环语句
for(初始化语句; 判断条件语句; 控制条件语句) {
// 循环体语句
}
for (声明语句 : 表达式) {
// 循环体语句
}
while循环语句
// 初始化语句;
while(判断条件语句) {
// 循环体语句;
// 控制条件语句;
}
// 初始化语句;
do {
// 循环体语句;
// 控制条件语句;
} while ((判断条件语句);
注意:至少会执行一次循环体语句
其他
break
作用:跳出单层循环
continue
作用:跳过本次单层循环
flag:for (……) {
for (……) {
continue flag;
}
}
作用:跳过本次flag
循标记的嵌套循环
return
作用:直接结束整个方法,从而结束循环。可以从一个方法返回,并把控制权交给调用它的语句。