文章目录
HelloWorld
public class HelloWorld{
public static void main(String[] args){
System.out.print("Hello World!");
}
}
1 关键字
定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)
特点:关键字中所有字母都为小写
注:图片来自尚硅谷
- 保留字
现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标记符时要避免使用这些保留字:
byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const
2 标识符
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符。
- 命名规则
- 由26个英文字母大小写,0-9 ,_或 $ 组成
- 不可以以数字开头。
- 不可以使用关键字和保留字,但能包含关键字和保留字。
- Java中严格区分大小写,长度无限制。
- 命名规范
- 包名:多单词组成时所有字母都小写:xxxyyyzzz
- 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
- 变量名、方法名:驼峰式,多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
- 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
3 数据类型
3.1 基本数据类型
-
数值型
- 整数类型
类型 占用存储空间 范围 byte 1字节 -128~127 short 2字节 -215~215-1 int 4字节 -231~231-1 long 8字节 -263~263-1 java的整型常量默认为 int 型,声明long型常量须后加’l’或’L’,否则,若数值过大,超过了int的范围,编译器会报错。
long myLong = 212124543534565465L;
- 浮点类型
类型 占用存储空间 范围 float 单精度 4字节 -3.403E38~3.403E38 double 双精度 8字节 -1.798E308~1.798E308 Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’,否则数值会默认为double类型,此时转化为存储空间较小的float类型可能会失去精度,编译器会报错。
float myFloat = 1.34f;
-
字符型 (char)
包含两个字节。char myChar = 'a'; char myChar = '中'; char myChar = '\t'; char myChar = '\u1234'; // 输出‘?’
-
布尔型 (boolean)
只允许取值true和false,无null。
不可以0或非 0 的整数替代false和true,这点和C语言不同。 -
基本数据类型转换
- 自动类型转换
容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
- 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
- byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型(即使相同类型运算也是如此)。
- 当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型。
- 强制类型转换
- 自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符"()",但可能造成精度降低或溢出,格外要注意。
- 通常,字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。
String a = “21”; int i = Integer.parseInt(a);
- boolean类型不可以转换为其它的数据类型。
- 自动类型转换
3.2 引用数据类型
- 类 (class)
- 接口(interface)
- 数组([ ])
值null可以赋值给任何引用类型(类、接口、数组)的变量,用以表示这个引用类型变量中保存的地址为空。
- 补充
String类属于引用类型,可用null赋值。
String类是一个典型的不可变类,String对象创建出来就不可能被改变。创建出的字符串将存放在数据区,保证每个字符串常量只有一个,不会产生多个副本。
4 运算符
运算符是一种特殊的符号,用以表示特定的数学或逻辑操作,如比较、赋值等。
-
算术运算符
+, -, *, /, %, ++, – -
赋值运算符
=, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |=short s = 3; //s=s+2; // 编译不通过 s = (short)(s + 2); // 可以实现运算,但是要通过两次类型转换,不建议使用 s += 2; // 既可以实现运算,又没有类型转换 int i = 1; i *= 0.1; // 结果为0
-
关系运算符
==, !=, <, >, <=, >=, instanceof -
逻辑运算符
&—逻辑与,|—逻辑或,!—逻辑非
&&—短路与,||—短路或 ,^—逻辑异或 -
位运算符
<<, >>, >>>(无符号右移), &, |, ^, ~ -
三元运算符
(条件表达式) ? 表达式1 : 表达式2;
5 程序流程控制
-
顺序结构
-
分支结构
- if…else (else if)
- switch
1、switch(表达式)中表达式的返回值必须是下述几种类型之一:byte,short,char,int,枚举,String (jdk1.7);
2、case子句中的值必须是常量,且所有case子句中的值应是不同的;
3、break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾。
如果判断的具体数值不多,而且符合byte、 short 、int、 char这四种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。为什么?
-
循环结构
while、do…while、for
注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素。
关于break,continue的使用:label:for(int i = 0; i < 10; i++){ for(int j = 0; j < 10; j++){ // break; // continue; // break label; continue label; // System.out.println("这句语句不能执行"); // 编译不通过 } }
6 数组
数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量。
6.1 一维数组
- 声明及初始化
String[] names; int scores[]; // 1. 静态初始化 names = new String[]{"周强", "王强"}; int[] myInt = {12,13,14}; // 定义时直接赋值,可以省略new int[] // 2. 动态初始化 scores = new int[4]; scores[0] = 23; scores[1] = 14; // 属性 System.out.println(names.length); // 2
- 创建数组以后的默认值
- byte short int long: 0
- float double: 0.0
- char: ’ '(空格)
- boolean: false
- 引用类型: null
- 数组一旦初始化,其长度不可变
6.2 多维数组
- 声明及初始化
int[][] scores2; String[][] names; // 1. 静态初始化 scores2 = new int[][]{{1,2,3},{3,4,5},{6}}; // 2. 动态初始化 names = new String[6][5];//动态初始化的方式一 names = new String[6][];//动态初始化的方式二 names[0] = new String[5]; names[1] = new String[4]; names[2] = new String[7]; names[3] = new String[5]; names[4] = new String[8]; names[5] = new String[5]; //错误的初始化方式 //names = new String[][]; //names = new String[][5]; // 引用具体的某一个元素 int[][] i = new int[3][2];//int[] i[] = new int[3][2]; i[1][0] = 90; i[2][1] = 100;
6.3 操作数组的工具类:Arrays
java.util.Arrays类包含了用来操作数组(比如排序和搜索)的各种方法。Arrays拥有一组static方法。
- equals():比较两个array是否相等(拥有相同元素个数,且所有对应元素两两相等)。
- fill():将值填入array中。
- sort():用来对array进行排序。
- binarySearch():在排好序的array中寻找元素。
另:System.arraycopy():array的复制。
以上笔记参考尚硅谷Java教程