Java语法
-
注释 标识符 关键字
(1)注释(3种)
-
单行注释
//line comment
-
多行注释
/* block comment */
-
文档注释
/** JavaDoc */
写注释是一个非常好的习惯
平时要注意规范
案例
/** * ii. ;9ABH, * SA391, .r9GG35&G * &#ii13Gh; i3X31i;:,rB1 * iMs,:,i5895, .5G91:,:;:s1:8A * 33::::,,;5G5, ,58Si,,:::,sHX;iH1 * Sr.,:;rs13BBX35hh11511h5Shhh5S3GAXS:.,,::,,1AG3i,GG * .G51S511sr;;iiiishS8G89Shsrrsh59S;.,,,,,..5A85Si,h8 * :SB9s:,............................,,,.,,,SASh53h,1G. * .r18S;..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,....,,.1H315199,rX, * ;S89s,..,,,,,,,,,,,,,,,,,,,,,,,....,,.......,,,;r1ShS8,;Xi * i55s:.........,,,,,,,,,,,,,,,,.,,,......,.....,,....r9&5.:X1 * 59;.....,. .,,,,,,,,,,,... .............,..:1;.:&s * s8,..;53S5S3s. .,,,,,,,.,.. i15S5h1:.........,,,..,,:99 * 93.:39s:rSGB@A; ..,,,,..... .SG3hhh9G&BGi..,,,,,,,,,,,,.,83 * G5.G8 9#@@@@@X. .,,,,,,..... iA9,.S&B###@@Mr...,,,,,,,,..,.;Xh * Gs.X8 S@@@@@@@B:..,,,,,,,,,,. rA1 ,A@@@@@@@@@H:........,,,,,,.iX: * ;9. ,8A#@@@@@@#5,.,,,,,,,,,... 9A. 8@@@@@@@@@@M; ....,,,,,,,,S8 * X3 iS8XAHH8s.,,,,,,,,,,...,..58hH@@@@@@@@@Hs ...,,,,,,,:Gs * r8, ,,,...,,,,,,,,,,..... ,h8XABMMHX3r. .,,,,,,,.rX: * :9, . .:,..,:;;;::,.,,,,,.. .,,. ..,,,,,,.59 * .Si ,:.i8HBMMMMMB&5,.... . .,,,,,.sMr * SS :: h@@@@@@@@@@#; . ... . ..,,,,iM5 * 91 . ;:.,1&@@@@@@MXs. . .,,:,:&S * hS .... .:;,,,i3MMS1;..,..... . . ... ..,:,.99 * ,8; ..... .,:,..,8Ms:;,,,... .,::.83 * s&: .... .sS553B@@HX3s;,. .,;13h. .:::&1 * SXr . ...;s3G99XA&X88Shss11155hi. ,;:h&, * iH8: . .. ,;iiii;,::,,,,,. .;irHA * ,8X5; . ....... ,;iihS8Gi * 1831, .,;irrrrrs&@ * ;5A8r. .:;iiiiirrss1H * :X@H3s....... .,:;iii;iiiiirsrh * r#h:;,...,,.. .,,:;;;;;:::,... .:;;;;;;iiiirrss1 * ,M8 ..,....,.....,,::::::,,... . .,;;;iiiiiirss11h * 8B;.,,,,,,,.,..... . .. .:;;;;iirrsss111h * i@5,:::,,,,,,,,.... . . .:::;;;;;irrrss111111 * 9Bi,:,,,,...... ..r91;;;;;iirrsss1ss1111 */
(2)标识符(类名 变量名 方法名)
-
关键字
-
标识符注意点
- 只能以字母(大小写) _(下划线) $(dollar) 作为首字母
- 不能用关键字作为变量及方法名
- 大小写敏感‼
- *可以用中文\拼音,但不建议
-
-
数据类型
-
强类型语言(java):变量必须严格符合规定,必须先定义在使用
更安全,但定义慢
-
弱类型语言
数据类型(两大类)
-
基本类型(primitive type)
-
引用类型(reference type)
基本类型的拓展:
强制类型转换😗*(基本类型)**作为前缀,如(int);
转义字符:
转义字符 含义 ASCⅡ码 \a 响铃(BEL) 7 \b 退格(BS),将当前位置移到前一列 8 \f 换页(FF), 将当前位置移到下一页开头 12 \n 换行(LF), 将当前位置移到下一行开头 10 \r 回车(CR), 将当前位置移到本行开头 13 \t 水平制表(HT), 跳到下一个TAB 9 \v 垂直制表(VT) 11 \ \ 反斜杠’ \ ’ 92 \ ’ 单引号 ' 39 \ “” 双引号 " " 34 \0 空字符(NULL) 0 \ddd 1-3位八进制所代表的任意字符 3位八进制 \xhh 1-2位十六进制所代表的任意字符 2位十六进制 -
-
类型转化
-
强制类型转换:(类型)变量名 高–>低
-
自动类型转换: 低–>高
-
注意点 :
-
字符串类型的转换
-
基本类型+"" (空字符串)
-
String.valueOf();
-
包装类的
toString
方法int a = 1234; String b = Integer.valueOf(a).toString(); System.out.println(b);
-
-
字符串类型的比较:
-
public static void main(String[] args) { String a = new String("111"); String b = new String("111"); System.out.println(a==b); //错误,== 比较的是地址 System.out.println(a.equals(b)); //正确 }
-
-
变量 常量
变量及作用域:
- 类变量; 用static ,从属于类
- 实(例)变量: 从属于对象, 类内方法外;不初始化则为默认值
- 局部变量: 位于一个方法内, 使用必须声明及初始化值
常量 :
- 用 final 修饰, 和static等修饰符不区分顺序:
final double PI = 3.1415;
- 常量名全大写
命名规则 :
-
所有变量\类名\方法, 见名知意
-
类成员变量\局部变量: 首字母小写, 后面单词首字母大写(驼峰原则)
-
常量: 全大写字母+下划线(过长时)
-
类名: 首字母大写与驼峰原则
-
方法名: 首字母小写与驼峰原则
-
运算符
-
算数运算符: + - * / % ++ –
运算中出现 long 则结果为 long ; 无 long ,出现 double 则为 double ,否则为整数为 int ,小数为 float;
-
赋值运算符: =
-
关系运算符: > < >= <= == ! = instanceof
-
逻辑运算符: && || !
-
其余运算符
位运算: 2进制中按位运算
<< 左移(*2) >> 右移(/2)
如最快计算2*8: 2<<3
条件运算符:三元运算
x ? y : z //x为true,则结果为y;反之为z
-
-
包机制 JavaDoc
包机制: 类似文件夹, 用于区别类名的命名空间
-
语法格式:
package pkg1.pkg2. ...;
-
引用包成员:
import pkg1.pkg2. ... .(classname|*);
*为通配符, 引用*会导入包下所有的类
一般利用域名倒置作为包名,如:
com.wuwenzhuo.xxx
-
JavaDoc: 用来生成自己的API文档
-
参数信息:
参数名 含义 @author 作者名 @version 版本号 @since 指明需要最早使用的JDK版本 @param 参数名 @return 返回值情况 @throws 异常抛出情况 -
用cmd命令行生成:
javadoc 参数 .java文件
java流程控制
用户交互Scanner
-
通过Scanner类获取用户的输入
Java.util.Scanner
-
基本语法:
Scanner s = new Scanner(System.in);
-
用next和nextline获取输入
-
next:
Scanner scanner = new Scanner(System.in); if(scanner.hasnext()) { String str = scanner.next(); System.out.println(str); } scanner.close();
-
nextline:
Scanner scanner = new Scanner(System.in); if(scanner.hasnextline()) { String str = scanner.nextline(); System.out.println(str); } scanner.close();//好习惯,节省IO流空间占用
可以省略if语句, 同样可以得到结果
除了next及nextline ,还有nextint等收取特定类型输入, 对应的有hasnextint;
-
顺序结构
选择结构
if\switch 同C语言
注意switch的case穿透, 要及时加break
JDK7新特性, switch可匹配字符串(反编译,通过hashcode)
循环结构
JDK5新特性:增强for循环
break \ continue
可以带标签,类似goto
java方法
类似C语言中的函数,可加修饰符
//static 使其成为类方法,可以直接调用
public static int add(int a, int b)
{
return a+b;
}
形参:调用方法时接收外界输入的数据(定义时)
实参:调用时实际传递给方法的数据(使用时)
return 有返回值 和结束方法的作用
方法重载
-
在一个类中,有相同的方法名,但形参不同
-
重载规则:
- 方法名必须相同
- 参数列表必须不同(个数\类型\排列顺序等)
- 返回值可以相同或不同
-
重载优先级:
char > int > long > double > float > Character
## 命令行传参
//String[] arg 定义了传入main方法的参数数组为args[]
public static void main(String[] args){
for(i=0;i<args.length;++i){
System.out.println("args["+i"]"+"="args[i]);
}
}
可在cmd中输入java + 类名(包含包名) + 参数
可变长参数(不定项参数)
-
方法定义时在参数类型后加 … 再加参数名
-
每个方法只能有一个可变长参数, 且必须为最后一个
public void test(int a , int ... i){}
相当于可变长数组, 输出时加下标
数组
int[] nums;//声明
nums = new int[10];//创建
//可以整合声明及创建
//int[] nums = new int[10];
- 数组的下标从0开始
- 未赋值为初始值(如int为0)
- 获取数组长度: array.length
内存分析
-
数组在声明时, 存入栈
如:
int[] array;声明数组
-
数组array[]在创建时, 在堆中开辟存储空间
array = new int[10];//创建数组
-
数组赋值
for(int i=0;i<array.length;++i){ array[i] = i+1; }
-
数组初始化
-
静态初始化
创建+赋值(用大括号 )
int[] nums = {1,2,3,4,5,6,7,8};
-
动态初始化
包含默认初始化
int[] nums = new int[10]; nums[0]=1; nums[1]=2;
数组的特点
-
长度确定, 数组一旦被创建, 其长度无法改变;
-
数组的元素类型均相同;
-
元素类型可以是任何数据类型(基本类型\引用类型);
-
数组的变量相当于引用类型, 数组可以看成对象, 数组的每个元素可以看为该对象的成员变量;
数组本身就是对象, java中的对象(由new创建)都保存在堆中;因此无论保存原始类型还是其他对象类型,数组对象本身是在堆中的;
数组的使用
-
for循环
-
for-each循环
int[] arrays = {1,2,3,4,5}; for(int array : arrays){ //array依次获取arrays[]中的每个元素 System.out.println(array);//输出数值中的每个元素 }
适合遍历数组, 但无法操作下标
-
数组作为参数
-
数组作为返回值
//自定义方法, 实现数组倒置 private static int[] reverse(int[] arrays) {//reverse的类型为整型数组, 参数类型也为数组 int length = arrays.length; int[] result = new int[length]; for(int i=0;i<arrays.length;++i) { result[length-i-1]=arrays[i]; } return result;//返回数组 }
多维数组
数组的数组:
-
数组的应用
-
Arrays 类
import java.util.Arrays
如
Arrays.toString(arrays);//转换为字符串(输出)
或
Arrays.sort(arrays);//升序排序
-
冒泡排序
-
稀疏数组