java基础学习的文章目录
一、注释
- 每一条语句都必须以;结尾
- java中的方法,就是其他语言中的函数
- 程序的入口是main方法
- 方法必须包含在class内部,现有class,再有方法
关于左大括号{ 的位置
推荐放在函数名后面
疑问
如果java项目中有两个不同的class,他们都有自己的main方法,那岂不是又两个java程序入口?
只能选择其中一个入口开始执行程序
注释
- java的注释有三种格式
- 单行注释
- 多行注释
- 文档注释
- 多行注释不能嵌套
二、数据类型
java的主要数据类型为2大类
- 基本类型
- byte 8bit
- short
- int
- long
- float
- double
- boolean
- char 16bit
- 引用类型 引用类型变量存储的值是对象的地址值。
变量的初始化
- 任何变量在使用之前都必须初始化(赋值)
- 局部变量需要程序员手动初始化
- 非局部变量、类变量:编译器会自动给未初始化的变量设置一个值
| 类型 | 默认初始值 |
|---|---|
| byte | |
| short | |
| int | |
| long | |
| float | |
| double | |
| char | '\u0000' |
| boolean | false |
| 对象 | null |
三、运算符
| 运算符 | 优先级 | |
|---|---|---|
| 后缀 | expr++, expr-- | |
| 一元 | ++expr --expr +expr -expr ~ ! | |
| 乘除模 | * % | |
| 加减 | + - | |
| 位移 | << >> >>> | |
| 关系 | < > <= >= instanceof | |
| 等价 | == != | |
| 按位与 | & | |
| 按位异或 | ^ | |
| 按位 | " | " |
| 逻辑与 | && | |
| 逻辑或 | || | |
| 三元 | ?: | |
| 赋值 | = |
字符串拼接
可以使用+号进行拼接
位运算
- >> >>>
- >> 有符号右移: 最左用符号位补齐
- >>> 有符号右移: 最左边用0补齐
- 对于正数来说两者没有区别
- &、|、^ 也能用在boolean类型上 对比&&、|| 少了短路
四、类型转换(Type Conversion)
- widening Primitive Conversion
- 数据范围小的转换为数据范围大的,自动转换【隐式转】
- Narrowing Primitive Conversion
- 数据范围大的转换为数据范围小的,可能会丢失精度和范围,需要强制转换
一元数字提升 Unary Numeric Promotion
一元数字提升: 将byte 、short、 char 类型的一元数字自动提升为int类型 (拓宽基本类型转换)
- 数组的索引
- 一元运算符+
- 一元运算符-
- 按位取反 ~
public static void main(String[] args) {
int array = {11, 22, 33, 44}
char index = 10;
array[]
}
public static void main(String[] args) {
char c = 'A';
System.out.println(c); //A , A的ascii码是65
System.out.println(+c); // 65 说明转换为了int
}
二元数字提升 Binary Numeric Promotion
二元数字提升:提升一个或两个数字(拓宽基本类型转换)
- 如果其中一个数字位double类型,另外一个就会被转化为double类型,实际上就是转换为大的那个。
- 否则,如果一个数字是float类型,那么另外一个被转换为float类型
- 否则,如果任意一个数字是long类型,那么另一个就会被转换为long类型
- 否则两个都被转换为int类型
五、关键字
- 虽然goto、const 未被使用,但也属于关键字
- true、false、null 不是关键字,是字面量
标识符
-
java字母
-
java数字
-
必须由字母开头
-
命名建议:小驼峰
-
类名命名建议:大驼峰
-
全局常量:全部大写
-
java字母:
Character.isJavaIdentifierStart();方法返回true的字符 -
Character.isJavaIdentifierPart('h'); 是否是java标识符的一部分
六、数组
public static void main(String[] args) {
int [] arr1;
int [] arr2 = {};
int arr3[] = {};
//定义的时候指定数组元素
int [] arr4 = new int [] {11,22,33,44};
int [] arr5 = {11,22,33,44};
//定义数组的时候指定数组的长度
int [] arr6 = new int [4];
arr6[0] = 1;
}
java中,字符数组!= 字符串
- 字符数组 :
char [] - 字符串:
String
java堆空间的内存申请回自动初始化
数组的遍历
int [] arr6 = new int [4];
arr6[0] = 1;
for (int e = 0; e < arr6.length; e++) {
System.out.println(arr6[e]);
}
// 1 0 0 0
for (int e : arr6) {
System.out.println(e);
}
七、方法
可变参数
public static void main(String[] args) {
System.out.println(sum()); //0
System.out.println(sum(10, 20)); //30
}
static public int sum(int ... elements) {
int sum = 0;
for (int i : elements) {
sum += i;
}
return sum;
}
eclipse中关联JDK源码
右击jar -> Properties -> java Source Attach -> apply
参数传递
- 基本类型作为参数是值传递
- 引用类型作为参数是引用传递,地址传递
八、方法签名(Method Signature)
方法签名由两部分组成: 方法名、参数类型
//该方法的方法签名为:sum(int , long , double)
public static double sum(int i, long l, double d) {
return i + l + d;
}
- 在同一个类中,不能定义两个方法签名一样的方法
方法重载(overLoad)
方法名相同,签名不同
九、栈帧(Frame)
栈帧随着方法的调用而创建,随着方法结束而销毁,存储了方法的局部变量信息
递归调用
- 如果递归调用没有终止,将会一直消耗栈空间
- 最终导致栈内存溢出 Stack Overflow
- 所以必须要有一个明确的结束递归的条件
- 也叫做边界条件、递归基
public static void main(String[] args) {
System.out.println(sum(4)); //10
}
public static int sum(int n) {
if (n <= 1) {
return n;
}
return n + sum(n-1);
}