Java继承了C和C++大部分的基础语法,简单举例记录一下Java的基础语法中需要注意的地方和与C/C++中不交叉的零散知识点,方便以后梳理知识点和复习。
零、注释方法
1.一行注释符 //
2.一行或多行注释符 /* */
/*
需要注释的内容
*/
3.Java文档注释符 /** */
/**
需要注释的内容
*/
一、数据类型
- 变量:必须初始化
- 8种数据类型:byte, short, int, long, float, double, char, boolean
- long类型和float类型在定义时,值后面要加l或L,f或F。e.g. long a = 3l; float b = 1.22f;
- boolean类型用0或非0的数值来代替,这里和其他语言不同。e.g. boolean b1 = true; boolean b2 = false;
- 换行输出语句:System.out.println(str);
- 引用类型:String类。String str = "Hello world";
- 引用类型都可以用null作为值,也就是说可以在初始化的时候赋值为null,所以String 可以使用null作为值。
- 此外Srting 与其他类型还有一个不同点:其值是不变的。
e.g.
int i0 =1;
int i1 = 1;
以上这种情况会在内存中存储2个1的值
String s0 = "Hello";
String s1 = "Hello";
因为String是引用类型,所以只存在一个"Hello",变量名去引用"Hello". - String可以用加法进行拼接
- 基本数据类型转换:
(1)char,byte,short三者同级,不可互相转换,<int <long <float < double
(2)多种数据类型同时计算时,统一成最大容量的类型进行计算
(3)多个相同类型变量运算时,先要转换为相对应的数据类型的默认类型(比如:两个byte类型的变量相加,会把两个byte类型转换为默认的int类型之后再计算,得到的结果是int类型)这种情况适用于变量类型的容量小于默认变量类型。 - *当把任何基本类型的值和字符串值进行连接运算时(+),基本数据类型自动转换为字符串类型。
- 强制类型转换:
e.g. int k = 7
byte a = (byte) k;
通常字符串不能直接转换为基本类型,但可以通过基本类型对应的包装类来实现:
String a = "43";
int i = Integer.parselnt(a); - boolean类型不可以转换为其他的数据类型
二、运算符
- 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。
- 但被模数是负数则不可忽略。此外,取模运算的结果不一定总是整数
- 整数之间做除法时,只保留整数部分而舍弃小数部分。
- “+”除字符串相加功能外,还能把非字符串转换成字符串。e.g. System.out.println("5+5="+5+5); //打印结果是5+5=55
- 以下二者的区别:
System.out.println(‘*’ + ‘\t’ +‘*’); 输出:93
System.out.println(“*” + ‘\t’ +‘*’);输出:* * - 赋值运算符:
支持连续赋值
思考1: short s = 3;
s=s+2; ①
s+=2; ②
①和②有什么区别?
①会报错,因为在运算s+2时会转换为int型,s != int型变量,这里应该手动强制类型转换:s = (short) s + 2;
②可以正常运行,使用扩展赋值运算符时,会自动将变量类型强制转换为当前类型把变量类型。 - 思考2:
int i = 1;
i *= 0.1;
System.out.println(i);// 输出 0,因为i = i * 0.1会强制转换为int型,0.1变成0. -
逻辑运算符:
与&、或|、非!、异或^
异或运算:一个true,一个false则为true 同为true或同为false则为false单&时,为逻辑与,左边无论真假,右边都进行运算;
双&时,为短路与,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。 -
位运算符:转换为2进制,各个位置进行运算(面试可能会有用,编程优化可能有用,但是基本的程序设计用不太到)。
-
三目运算符:(条件表达式)?表达式1:表达式2; 条件表达式为true,则运算后的结果为表达式1,否则为表达式2。
-
运算符的优先级:常识就够了,有不会的再查阅。
三、程序流程控制
- 顺序结构:按顺序执行
- 分支结构:
(1) if(条件){
语句;
}
else if(条件){
语句;
}
else{
语句;
}
(2) int i = 1;
switch(i){
case 1:
语句;
break;
case 2:
语句;
break;
default:
语句;
break;
}
//注:①switch(表达式)中表达式的返回值必须是下述几种类型之一:byte, short, char, int, 枚举,String;
②case子句中的值必须是常量,且其值应该不同,语句块中没有break程序会执行到switch结尾 - 循环结构
语法:和C语言相同:for;while;do-while.
循环嵌套 - 特殊流程控制语句:
break:结束当前所处的整个循环
continue:跳出当前循环,直接进去下一循环
return:并非专门用于结束循环,执行到return语句时,不管出于几层循环内,将结束整个方法
四、数组
数组为引用类型,分配空间时要new
(一)一维数组:
- 声明方式:type name[];或者 type[] name1;
- 初始化:
动态初始化:数组声明且为数组元素分配空间与赋值的操作分开进行
int[] arr = new int[3]; //声明时要传入数组长度;如果没有给数组元素赋值,
则数组元素会默认初始化,数字类型默认为0,对象类型默认为null
arr[0] = 3;
arr[1] = 9;
arr[2] = 8;
静态初始化:在定义数组的同时就为数组元素分配空间并赋值。
int a[] = new int[]{ 3, 9, 8};
int[] a = {3,9,8}; - 引用:和c相同。
- 数组长度:Java使用 array_name.length 方法直接获取数组长度
(二)多维数组:
- (静态)
int a[][] = new int[][]{
{1, 2},
{3, 4}
}; - (动态)
int a[][] = new int[2][3];
int a[][] = new int[2][]; //只定义第一维,第二维为空{ {}, {} } - 注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。
- Java中多维数组不必都是规则矩阵形式