Java 基本语法
注释、标识符、关键字、运算符、流程控制
注释:
(1)单行注释 // Ctrl+/
(2)多行注释 /* */ Ctrl+Shift+/ 添加多行注释
Ctrl+Shift+/ 取消多行注释
(3)文档注释 /** */
javadoc -d path Hello.java
代码注释时的编程规范:
(1)文件首行写上:文件注释,告诉阅读该文件的人,文件的基本信息。 /* */
(2)类的上面写上: 类注释,会生成 API,描述该类的功能、参考代码。 /** */
(3)成员变量的注释:在生成的 API 文档中,显示该变量的作用。 /** */
(4)成员方法的注释:在生成的 API 文档中,显示该方法的作用。 /** */
(5)写在方法内部,描述一行代码的功能。 //
标识符:
用字符串名字。(包名、类名、变量名、方法名、参数名)
(1)以字符或_或 $ 开头;
(2)不能使用 Java 中声明的关键字做标识符;
(3)标识符中不能出现特殊字符(~!*)
(4)标识符不能以数字开头,但是里面可以有数字。
(5)大小写敏感,不限制长度。
命名规则:
(1)名称要有意义;
(2)多个单词要用大小写区分开;
(3)变量名、方法名、首字母小写;类名首字母大写;
(4) 文件名(.java)必须与类名保持一致。
关键字:
Java 中已经使用或未来准备使用的 单词。
Java 的数据类型
(1)基本数据类型(primitive type),用于科学计算的数据类型,从 计算机 刚刚出现就确定下的数据类型,相对于计算机发展历史是比较原始的。
byte short int long
float double char boolean
(2)引用数据类型(reference type)
字符串、数组、自定义类、API提供的类
String str="aaaa";
Java 里面“一切皆对象” 对象.方法()
Java 是一种强类型的语言,目的是为了更好的实现跨平台性。
跨软件平台、硬件平台,Java 提供了统一的 JVM 平台:
32位CPU
int num=10; //32位长度
64位CPU
int num=10; //64位长度
统一规定 int 类型运行在 JVM 上,都是 32 位长度。
举例:弱类型语言
var str = false;
str =10;
char
1,其实就是一个无符号的16位整形,其范围为0~65535,用来存储该字符
的 Unicode编码值,因为Unicode 编码中包含汉字的编码,所以一个
char类型的变量也可以存储一个汉字字符。
2,在代码中直接给出的一个字符值必须用单引号括起来。
char zhChar = ‘中’;
char enChar = ‘a’;
char ucChar = ‘/u0060’;
3,对某些不方便直接书写或直接书写有歧义的字符,java语言规定用
转义字符给出。/”
4,可以把char类型数据当作整数数据来操作。例如:
int three=3;
char one=’1’;
int four=three+one;
转义字符可以在 API ,java.util.regex.Pattern 中找到。上述类用来表示正则表达式,主要用于字符串处理。
String 类
1,是JDK中定义的一个类,不是基本数据类型
2,一个String对象可以用来存储多个字符,在程序中直接给出一个 String值要用双引号括起来 String myName = “Ice Xu”;
3,可以使用 + 运算符把多个String数据连接起来,并且还可连接其他类型的数据
例如:
int count=7;
System.out.println("Counted " + count + " chars." );
String 类型的特点:
String 类型不变性
String 类型在堆内存中存储值的时候,有两种存储方式。与新建 String 类型的代码有关:
String str1 = "aaaaa"; //直接定义
String str2 = new String("aaaaa"); //创建对象
String str3 = str1; //直接把常量池中地址赋值
String str4 = str2;
String str5 = "aaaaa";
str5 ="hello "+str5; //"hello aaaaa"
定义的字符串值,在堆内存中,永远都不会改变了。直接定义的字符串值,保存在“常量池” 中,因为字符串是 Java 开发中最常用的数据类型,方便用户频繁使用某个字符串时,内存读写操作,使用了“常量池”。
整数的二进制表示
short i =57;0000 0000 0011 1001
short i =-57; 1111 1111 1100 0111
Java 运算符
(1)Java的运算符
Java 中对 + 做了扩展,可以作为字符串连接符;
任何数据类型的数据(包括基本类型和引用类型,用户自定义类)
都可以通过==或!=来比较是否相等;
逻辑运算符AND(&&)、OR(||)以及NOT(!)能生成
一个布尔值(true或false),运算符号两边也只能放 boolean 值的数据;
boolean && boolean
位运算符:
说明:
>> :将一个数的各二进制位全部右移若干位,移到右端的低位被舍弃,最高位则移入原来高位的值
例如 :
(无符号位,右移)
a = 00110111,则 a>>2 = 00001101(正数左边补 0)
b = 11010011,则 b>>2 = 11110100(负数左边补 1)
右移一位相当于除2取商
例如: 128 >> 1 returns 128/ 2(1) = 64
256 >> 4 returns 256/ 2(4) = 16
-256 >> 4 returns -256/ 2(4) = -16
>>> :一个数的各二进制位无符号右移若干位,
与运算符>>相同,移出的低位被舍弃,但不同的是最高位
都补0。
如
a = 00110111, 则 a>>>2 = 00001101
b = 11010011, 则 b>>>2 = 00110100
左移
<<:用来将一个数的各二进位全部左移若干位。高位左移后溢出舍弃,低位补0。
例如:a = 00001111,则a<<2 = 00111100。
在不产生溢出的情况下,左移一位相当于乘2
128 << 1 returns 128 * 2(1) = 256
16 << 2 returns 16 * 2(2) = 64
(2)基本数据类型的赋值
自动类型转换(隐含转换)和强制类型转换(显式转换) >原始数据类型转换,从低位到高位自动转换 >原始数据类型转换,从高位到低位强制转换,损失精度。
(3)布尔表达式
(4)选择结构(if else,switch)
switch 参数类型:int、char、byte、long、short、枚举对象
switch(expression) {
case 整数值1 : 语句; break;
case 整数值2 : 语句; break;
case 整数值3 : 语句; break;
case 整数值4 : 语句; break;//.....
default:语句; //必须带上 default
}
(5)循环结构(while,do…while,for)
循环的要素:循环开始值、循环增长量、循环最大值、循环中的临时变量;
String[] arr = {"aa","bb","cc"};
for(int i=0;i<arr.length;i++){
String temp = arr[i];
}
int i=0;
while(i<arr.length){
String temp = arr[i];
i++;
}
(6)使用continue和break、label进行循环控制
一般使用在嵌套的多层循环中
break :不光可以进行代码跳转、也可以指定跳转的地方。
outer:for(int i=0;i<arr.length;i++){
inner:for(int j=0;j<10;j++)
{
if(j==i){
break outer;
}
//.....
}
}
Java 中的数组运算
数组:在 Java 中是对象,在连续的内存中存储多个相同类型的数据,该内存整体被称为数组对象。
(1)声明并建立一个基本类型的数组和引用类型的数组类型[] 名称 = new 类型[长度]{初始值};
基本类型数组:
int[] arr = new int[5];
System.out.println(arr);
System.out.println(arr[2]);
基本类型数组定义时需要指定长度;
基本类型数组定义后,JVM会自动根据长度赋初始值,一般按照默认类型赋值;
引用类型数组:
String[] arr = new String[5];
System.out.println(arr);
System.out.println(arr[2]);
引用类型数组定义时需要指定长度;引用类型数组定义后,JVM会自动根据长度赋初始值,一般 NULL;
(2)为什么数组在使用前必须初始化
定义好数组,意味着分配好了空间,但是空间中还没有任何数据,必须手动赋初始值。
int[] arr = new int[5]{1,2,3,0,0};
(3)定义并初始化一个数组
String[] arr = new String[2];
arr = {"aa","bb"};
String[] arr = new String[2]{"aa","bb"};
String[] arr = new String[]{"aa","bb"};
(4)正确使用数组中的元素数组下标以 0 开始
(5)创建一个多维数组(存放数组的数组)
有两种方法:1)直接为每一维分配空间, 如
int[][] a = new int[2][3];
int twoDim [][] = new int [][ 4]; //error
2)分别为每一维分配空间,如:
int[][] a = new int[2][ ];
a[0] = new int[3];
a[1] = new int[3];
可以为每行设置为空间大小不同的数组。
如:int[][] a = new int[2][ ];//指定第一维长度
a[0] = new int[3];
a[1] = new int[5];
如:int a[][] = {{2,3}, {1,5}, {3,4}};
Java 面向对象编程思想
之前的语言,都采用“面向过程”的开发思路。从 SmallTalk 以后,出现了“面向对象”的思考方式。面向过程:写代码之前,先画流程图,先把整个流程搞清楚,然后在考虑具体流程中每个代码如何编写。先考虑全局。
面向对象:写代码之前,先画类图,先把每个类内容功能考虑清楚,在根据逻辑灵活调整方法调用。先考虑局部
面向对象编程的特点
抽象、封装、继承、多态