1、运算符
- 被除数 / 除数 = 商…余数
- 四则运算的 + - * / 与C语言相同,字符串的+表示字符串相连,String + int =String,括号的优先级最大
- 不同类型的数据运算的结果是范围大的数的类型即double+int=double
char类型和int类型的对照表为ASCII(小)和Unicode(大) - 三元运算符:int max = (a>b)? a : b
public class project01 {
public static void main(String[] args) {
int a=10;
System.out.println("java" + 20 +30);
System.out.println("java" + (20 +30));
/*
java2030
java50
*/
}
}
2、IntelliJ快捷键
参考视频:https://www.bilibili.com/video/BV1uJ411k7wy?p=61
- psvm等价于
public static void main(String[] args) {
}
- sout等价于
ystem.out.println();
- Ctrl+/:提示
- shift+F10:编译加运行
- Alt+Enter:自动修复错误
- Ctrl+Alt+L:格式化代码
- Ctrl+Shift+/:光标选中后摁键多行注释
- Alt+Shift+向上的箭头:将鼠标当前所在行向上移动
- Shift+F6:选中后可以将都为x的变量改为y(同步改变)
- Ctrl摁住+鼠标点击代码:查看源码
3、方法
- 方法的定义位置必须在类中,不能嵌套定义。先后顺序无所谓。
- 方法的调用实际上传递的是参数的地址。
- 方法只有一个返回值,但是可以通过返回一个数组来得到多个值。
- 其他同C语言。
public class method {
public static void main(String[] args) {
// int a=10,b=20;
int num = getSum(10, 20);
System.out.println("结果是"+num);
}
public static int getSum(int a, int b) {
return a + b;
}
}
(1)方法重载overload
- 方法名称一样,参数列表不一样(参数个数不同、类型不同、参数的多类型顺序不同。不包括返回值的类型)
- 当多个方法同名时,可以根据main主方法内对该方法的参数选择进入不同的方法内。也就是说,当我有三个叫getSum的函数分别对应两个、三个、四个参数的输入,我在主方法内写入两个、三个、四个参数就能分别调用相应的方法。
- 我们的
System.out.println()
的源码实际上就是使用了方法重载使得他能够输出法多种类型的数据。
public class method {
public static void main(String[] args) {
// int a=10,b=20;
int num = getSum(10, 20);
System.out.println("结果是"+num);
System.out.println("结果是"+getSum(10,11,12));
}
public static int getSum(int a, int b) {
return a + b;
}
public static int getSum(int a, int b,int c) {
return a + b;
}
public static int getSum(int a, int b,int c,int d) {
return a + b;
}
}
4、数组
数组是一种引用类型,其里面元素的类型相同,运行期间他的长度不能进行修改。
(1)创建数组=数组初始化:
动态初始化(指定大小)、静态初始化(指定内容)
public class method {
public static void main(String[] args) {
//动态初始化
int[] arrayA = new int[300];
String[] arrayB = new String[5];
//静态初始化
int[] arrayC = new int[]{1, 2, 3, 4};
String[] arrayD = new String[]{"hello", "java"};
//静态初始化的省略版本
int[] arrayE = {1, 2, 3, 4};
}
}
省略版本定义方法的使用有局限性,他不能拆分成两个步骤,如下:
public class method {
public static void main(String[] args) {
int[] arrayA ;
//错误写法
arrayA = {1,2,3};
//正确写法
int[] arrayB = {1,2,3,};
}
}
(2)数组的下标访问
同C语言的下标访问:
- 当整数数组未被赋初始值是默认数组元素都为0,double类型默认0.0
- String默认为’\u0000’(\u表示Unicode,16进制的0000是字符类型,为一种不可见字符)
- boolean类型默认为false
public class method {
public static void main(String[] args) {
int[] arrayA = {1,2,3,};
int num = arrayA[1];
System.out.println(num);//2
}
}
插播一下,直接输出数组的名称会返回数组的地址(哈希值)
public class method {
public static void main(String[] args) {
int[] arrayA = {1,2,3,};
System.out.println(arrayA);
}
}
输出:
[I@16b98e56
其中 [ 表示这是数组类型,I 表示里面的数据都是int,16b98e56 是一个16进制的数。
(3) 数组的内存分配
具体在内存中的分配如下:
在这里栈存储数组的地址、堆存储数组的值。若使用int[] arrayB=arrayA
会将arrayA的地址赋给arrayB,此时对arrayB数组的操作会影响到arrayA(此时二者表示的使用一个数组,因为指向同一个地址)
数组的长度用.length取获取,数组的长度一旦定义不可改变,但是下图的情况表示的是获取了两个内存空间,前后表示的是两个数组。
(3) 数组的遍历
输入数组名称.fori
可以直接达到下图的效果