Java基本语法
1. Java 注释 与 Java Doc
1.1 Java 注释
-
单行注释 //
//这是单行注释
-
多行注释 / /
/* 这是多行注释 */
-
文档注释/ /
/** * @author Ther 作者 * @version 1.0 版本信息 * @since 11 指明需要最早使用的jdk版本 */ public class Doc { String name; /** * * @param name //参数名 * @return //返回值情况 * @throws Exception //异常抛出情况 */ public String test(String name) throws Exception{ return name; } }
文档注释中的参数信息
- @author Ther 作者
- @version 1.0 版本信息
- @since 11 指明需要最早使用的jdk版本
- @param name //参数名
- @return //返回值情况、
- @throws Exception //异常抛出情况
1.2 Java Doc
Javadoc 是 Sun 公司提供的一种工具,它可以从程序源代码中抽取类、方法、成员等注释,然后形成一个和源代码配套的 API 帮助文档。也就是说,只要在编写程序时以一套特定的标签注释,在程序编写完成后,通过 Javadoc 就形成了程序的 API 帮助文档。
Dos页面生成java doc操作
D:\Java\code>javadoc -encoding utf-8 -charset utf-8 Doc.java
正在加载源文件Doc.java...
正在构造 Javadoc 信息...
标准 Doclet 版本 1.8.0_221
正在构建所有程序包和类的树...
正在生成.\Doc.html...
正在生成.\package-frame.html...
正在生成.\package-summary.html...
正在生成.\package-tree.html...
正在生成.\constant-values.html...
正在构建所有程序包和类的索引...
正在生成.\overview-tree.html...
正在生成.\index-all.html...
正在生成.\deprecated-list.html...
正在构建所有类的索引...
正在生成.\allclasses-frame.html...
正在生成.\allclasses-noframe.html...
正在生成.\index.html...
正在生成.\help-doc.html...
在IDEA中生成Java doc
- Tools --> Generate JavaDoc
生成的javadoc在当前的文件下的Doc.html
2.Java关键字
2.1 Java关键字
关键字的定义和特点
定义:被java语言赋予了特殊含义,用作专门用途的字符串(单词)
特点:关键字中所有字母都为小写
-
用于数据类型
- 用于数据类型的关键字有 boolean、byte、char、 double、 false、float、int、long、new、short、true、void、instanceof
-
用于语句。
- 用于语句的关键字有break、case、 catch、 continue、 default 、do、 else、 for、 if、return、switch、try、 while、 finally、 throw、this、 super。
-
用于修饰
- 用于修饰的关键字有 abstract、final、native、private、 protected、public、static、synchronized、transient、 volatile。
-
用于方法、类、接口、包和异常。
- 用于方法、类、接口、包和异常的关键字有 class、 extends、 implements、interface、 package、import、throws。
-
还有些关键字
- cat、 future、 generic、innerr、 operator、 outer、rest、var等都是Java保留的没有意义的关键字。
2.2 保留字(可能会在以后应用到关键字里)
-
byValue、cast、future、inner、operator、outer、rest、var、goto、const
3 标识符
3.1 规则:
-
由26个英文大小写,0-9,_或者$组成
-
数字不可以开头
-
不可单独使用关键字和保留字
-
区分大小写,长度无限制
-
标识符不能包含空格
3.2 java中的名称命名规范
- 包名:多单词组成时所有字母都小写
- 类名、接口名:多单词组成时,所有单词的首字母大写
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写
- 常量名:所有字母都大写。多单词时 每个单词用下划线连接
4. 变量
4.1 概述
定义:
数据类型 变量名 = 变量的值;(int i = 1;)
作用范围 :{} 内作用域
4.2 变量的分类
4.2.1基本数据类型
-
数值型
- 整数类型(byte,short,int,long)
- byte 1字节 = 8bit -128~127
- short 2字节 -2(15)~2(15)-1
- int 4字节 -2(31)~2(31)-1
- long 8字节 -2(63)~2(63)-1(注:long赋值时 long a = 2l;)
- 浮点类型(float,double)默认double类型
- 单精度float 7位有效数字 (float a = 12.1f/F)
- 双精度double 16位 (double d = 12.1)
- 整数类型(byte,short,int,long)
-
字符型(char)
char a1 = 'i'; char b1 = '%'; char c1 = '\n'//换行 char d1 = '\'' "'"
-
布尔型(boolean)
boolean a = true; boolean b = false;
4.2.2 引用数据类型 (都可以用null作为初始化的值)
-
类(class) "String字符串"
String str = "hello world"; String str2 = "he"+"llo "+"world"; System.out.print(str);
-
接口(interface)
-
数组([])
4.2.3 数据类型转换
(1)基本数据类型转换
-
自动类型转换:容量小的类型自动转换为容量大的数据类型。
(char,byte,short) --> (int) --> (long) --> (float) --> (double) -
有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据,然后再进行计算。
-
byte,short,char之间不会进行互相转换,都转换成int。
-
当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。
String str1 = 1 + 3 + 5 + "a" + 2 + 6; //输出9a26
(2) 强制类型转换
-
自动类型转换的逆过程,将容量大的数据类型转换为容量小的类型。使用时要加上强制转换符“ () ”,但可能造成精度降低或溢出。
-
通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类 则可以实现把字符串转换成基本类型。
String a = "123"; int i = Integer.parseInt(a);
- boolean类型不可以转换为其他数据类型。
5.运算符
5.1 运算符的分类
-
算术运算符
+,-,*,/(整数之间相除保留整数部分) ,%,++,–,(字符串连接"+")
-
赋值运算符
"=", “+=”,"-=","*=","/=","%="(自动强制类型转换为当前类型)
-
比较运算符
“==” “!=” “<” “>” “<=” “>=”
比较运算符的结果都是boolean类型,true or false -
逻辑运算符
- & – 逻辑与
- | – 逻辑或
- ! – 逻辑非
- && – 短路与
- || – 短路或
- ^ – 逻辑异或(a^b表示其中肯定有一个条件成立,一个不成立)
- "&“和”&&"的区别:
“&”:左边无论真假,右边都进行运算;
“&&”:左边真,右边参加运算。左边假,右边不进行运算。 - "|“和”||"的区别同理
“||”:左边为真,右边不进行运算
-
位运算符 (直接对二进制进行计算)
- << 左移 3<<2 = 12 -> 3 * 22=12(m<<n -> m * 2n)
- >> 右移 3>>1 = 1 -> 3/2=1 (m>>n -> m * 2-n)
- >>> 无符号右移
- | 或运算 6 | 3 = 7
- ^ 异或运算 6 ^ 3 = 5
- ~ 反码 ~6 = -7
-
三元运算符
格式:
(条件表达式)?表达式1: 表达式2;
如果条件为真执行1,否则执行2.
5.2 运算符的优先级
6. 程序流程控制
6.1 顺序结构
合法的向前引用
6.2 分支结构
-
if语句
-
if - else语句
-
switch语句
switch(变量){case 常量1:语句1;break;······default:语句;break;}
6.3 循环结构
-
for循环
-
while循环
-
do-while循环
-
增强for循环 for each
public static void main(String[] args) { int i = 0; String[] str = {"hello","world","!"}; for (i = 0; i <= 2; i++) { //循环执行语句 System.out.println(str[i]); } i = 0; while (i <= 2){ //循环执行语句 System.out.println(str[i]); i++; } i = 0; do { //循环执行语句 System.out.println(str[i]); i++; }while (i <= 2); for (String s: str) { System.out.println(s); } }
6.4 特殊语句控制
- berak语句:终止当前所在的循环
- continue语句:用于跳过某个循环的一次执行
- return:直接结束整个方法。
7.数组
7.1 声明数组
数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标(index,或称索引)就可以访问数组中的每一个值。
- 数组的声明:
- **int [] a;**表示声明了数组变量a,并没有将a初始化为一个真正的数组。应该使用new操作符创建数组。
- **int [] a = new int[100]; 或者var a = new int [100];**表示初始化了一个可以存储100个整数的数组;
- 在Java中数组长度不要求是常量:new int [n];会创建一个长度为n的数组;
- 数组的长度不可变,如果程序运行中需要经常扩展数组的大小,就应该使用另一种数据结构——数组列表(array list)。
- 创建数组对象并同时提供初始值的写法:int[] a = {1,2,3,4,5,6,7};(可以不使用new,甚至不用指定长度)最后一个值后面允许有逗号,如果你要不断为数组增加值,这会很方便。
- 在java中允许有长度为0的数组,如果数组作为方法的结果,就可能会用到。(长度为0的数组与null不相同)。
7.2 访问数组元素
-
一个数组的下标是从0开始的。
-
数字数组的元素初始化为0,boolean数组的元素初始化为false。对象数组元素初始化为null,表示这些元素还没有存放任何对象。(null和“”(字符串空串)不相同)。
-
array.length方法用来获取数组中元素的个数。
for(int i = 0;i < a.length;i++) System.out.println(a[i]);
-
如果访问的索引大于数组中的元素个数,则会引发数组越界异常。
7.3 for each循环
Java中的for each循环结构,可以用来依次处理数组(或者其他元素集合)中的每一个元素,而不用考虑指定的下标值。
- 语句格式:
for (variable : collection) statement
//例如: for(int element : a) System.out.println(element); //等同于:for(int i = 0;i < a.length;i++) System.out.println(a[i]);
此外还有一种更简单的方法来遍历数组调用**Arrays.toString(a)**这种方法返回数组元素的字符串,这些元素在中括号内,并用逗号分隔。
- for each循环语句的循环变量将会遍历数组中的每个元素,而不是下标值。
7.4数组拷贝
在Java中,允许将一个数组变量拷贝到另一个数组变量。这时,两个变量将引用同一个数组;
int[] a = b;a[2] = 2;//此时b[2] 也等于2;
- Arrays.copyOf()方法。如果希望将一个数组的所有值都拷贝到一个新的数组中去,则会用到这个方法。
int[] copyA = Arrays.copyOf(A , A.length);第二个参数是数组的长度,这个方法也可用来增加数组的大小。
如果长度小于原始数组,则只会拷贝前面的元素。如果长度大于原始数组后面的元素则会被赋值为相应的默认值。
7.5 命令行参数
每个Java应用程序都有一个带String args[]参数的main方法。这个参数表示main方法接收一个字符串数组,也就是命令行上指定的参数。
例如在一个hello.class的可执行文件,在命令行执行java hello hello world !args[0]是”hello“。
7.6 数组排序
-
对数值型数组进行排序,可以使用Arrays.sort()方法,这个方法使用了优化的快速排序(QuickSort)算法。
//例如int [a] = new int [100];a = {1,2,3,......};System.out.println(Arrays.sort(a));//输出排序后的数组a。
7.7 java.util.Arrays类
- static String toString(type[]a)
返回包含 a 中数据元素的字符串, 这些数据元素被放在括号内, 并用逗号分隔。
数组元素类型type可以为 int、long、short、 char、 byte、boolean、float 或 double 的数组。 - static type copyOf(type[]a, int length)
- static type copyOfRange(type[]a , int start, int end)
返回与 a 类型相同的一个数组, 其长度为 length 或者 end-start, 数组元素为 a 的值。参数的类型可以为 int、 long、 short、 char、 byte、boolean、 float 或 double 的数组。
start:起始下标(包含这个值)
**end:**终止下标(不包含这个值)。这个值可能大于 a.length。 在这种情况下,结果会填充 0 或 false。 - static void sort(type [] a)
采用优化的快速排序算法对数组进行排序。
参数:a的类型为 int、long、short、char、byte、boolean、float 或 double 的数组。 - static int binarySearch(type[]a , type v);
- static int binarySearch(type[]a, int start, int end, type v)
采用二分搜索算法查找值 v。如果查找成功, 则返回相应的下标值; 否则, 返回一个负数值 r, -r-1 是为保持 a 有序 v 应插入的位置。
参数:a的类型可以为 int、 long、 short、 char、 byte、 boolean 、 float 或 double 的有序数组。
start :起始下标(包含这个值)。
end :终止下标(不包含这个值)。
v : 同 a 的数据元素类型相同的值。 - static void fill(type[]a , type v)
将数组的所有数据元素值设置为 v。
参数:a的类型可以为 int、 long、short、 char、byte、boolean、float 或 double 的数组。
v : 与 a 数据元素类型相同的一个值。 - static boolean equals(type[]a, type[]b)
如果两个数组大小相同, 并且下标相同的元素都对应相等, 返回 true。
参数:a、 b的类型可以为 int、long、short、char、byte、boolean、float 或 double 的两个数组。
7.8 多维数组
多维数组使用多个下标访问数组元素
-
二维数组
- 二维数组的声明:int [][]a;
- 初始化:a = new int a [10][10];
- 还可以和一维数组一样,不用调用new的初始化
-
for each循环语句处理二维数组时,需要两个for each嵌套使用。
-
要想快速的打印一个二维数组的元素列表,可以调用:**Arrays.deepToString()**方法。
-
二维数组的内部存储原理:
7.9 不规则数组
Java的数组在底层和其他语言有所不同,Java实际上没有多维数组,只有一维数组。多维数组可以被解释为:“数组中的数组“。所以就可以有数组中的数组。