java
程序的基本结构
1 | public class hello{ |
java是面向对象的语言,程序的基本单位是class,class是关键字
类名必须以英文字母开头,后接字母、下划线和数字组合
public是访问修饰符,表示公有,而static修饰符表示静态方法,方法名是main,参数是string数组
数据类型
基本数据类型
1.整数类型:byte、short、int、long
2.浮点数类型:float、double
3.字符串类型:char
4.布尔类型:boolean
这里注意一下float与double类型的区别
1 | float f1 = 3.14f; |
boolean只有true和false两个值
引用数据类型
除了上面几个都是引用数据类型
常见的是String字符串
常量
加上final修饰符
var关键字
类似于auto,省略变量类型可用var
整数运算
1.四则运算(补码溢出)
2.移位
3.自增自减
符号优先级
- ()
- !,~,++,–
- *,/,%
- +,-
- <<,>>,>>>(无符号的右移)
- &
- |
- +=,-=
字符和字符串
转义字符
\“ ,\‘ ,\, \n, \r, \t(水平制表)
数组(本质上是个对象)
一般以”类型[]”表示数组,必须初始化创建一个数组
例如
1 | int[] ns = new int[5]; |
表示创建5个int元素的数组
1 | int[] ns = new int[]{1,2,3,4} |
也可简写为
1 | int[] ns = {1,2,3,4} |
特点
java数组有默认值,例如整形都是0,浮点型0.0,布尔型是false
数组一旦创建大小不可变
可以通过数组变量.length获取数组大小
对于基本数据类型的数组,修改值就是直接修改对应的值,而引用数据类型的数组,修改值是将,指向a元素的指针指向b元素,a元素仍在内存中
输入与输出
1 | public class Main{ |
一般的使出System.out.print是输出但是不换行,而println方法是输出并换行
格式化输出(计算机的输出不一定适合人类阅读,所以要进行格式化输出)
输出
1 | public class Main{ |
占位符有%d,%x,%f,%e,%s
1 | %[argument_index$][flags][width][.precision]conversion |
[argument_index$]例如1$表示使用第一个参数
输入
1 | import java.util.Scanner; |
一般使用Scanner类,以System.in(字节流)作为参数scanner.nextLine()读取用户输入的下一行字符串,读取下一个整数用scanner.nextInt()
if条件判断
1 | import java.util.Scanner; |
判断引用类型相等
判断值类型变量变量可以用==,但是引用数据类型==表示引用是否相等,所以一下内容相同但是false
1 | String s1 = "hello"; |
判断引用数据类型的内容是否相等要用equals()方法
1 | if (s1.equals(s2)) |
如果s1是null会报错NullPointerException
避免可以s1!=null&&s1.equals(s2)
经典的switch - case函数(多重选择)
1 | public class Main { |
注意case与具有穿透性,所以要加上break
switch还可以匹配字符串,比较的是内容相等(这与c++不同)
循环
while(条件){}
do{}while(条件)
for(初始条件;循环检测条件;循环后执行)
break能够结束循环,continue提前结束本次循环直接进入下次循环
数组操作
遍历数组
一种是直接for循环遍历
ns.length表示数组的大小
二是for-each(增强for循环),和c++基于范围的for循环很相似
1 |
|
最简单的Arrays.toString()快速打印内容
1 | import java.util.Arrays; |
如果直接打印ns数组System.out.println(ns);得到的是ns数组在jvm的引用数组
因此直接打印数组全部用Arrays.toString()
数组排序
冒泡排序
经典冒泡,将最大的数据放在最后面
1 | import java.util.Arrays; |
但是标准库已经内置排序了
1 | Arrays.sort(ns); |
