1、一个简单的Java应用程序
/**
* @author AlanLiang
*/
public class FirstExample {
public static void main(String[] args) {
//打印语句
System.out.println("Hello World");
}
}
- 访问修饰符:public、private、protected、default
- 类名命名规则:每个单词首字母大写(骆驼命名法)
- java虚拟机是从指定类main方法的代码开始执行
- 三种注释区别
类内部 | 本包 | 子类 | 外部类 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
default | √ | √ | ||
private | √ |
2、数据类型
java是一种强类型语言,必须每个变量声明一种类型。8种基本数据类型分别为 byte、short、int、long、float、double、char、boolean
类型 | 存储空间 | 取值范围 |
---|---|---|
byte | 1字节 | -128 ~ 127 |
short | 2字节 | |
int | 4字节 | -2^31 ~ 2^31-1 |
long | 8字节 | |
float | 4字节 | 有效位数6~7位 |
double | 8字节 | 有效位数15位 |
char | 1字节 | |
boolean | 1字节 |
整型:
- Java7开始,加上前缀0b或0B即可表示二进制,如0b1001是9
- 0~255是否可以存在一个byte中?P31
浮点型:
- 正无穷大 // 正整数/0
- 负无穷大
- NaN(非数字)// 0/0或负数平方根
- 金融计算使用BigDecimal
if(x == Double.NaN) //false,所有“非数值”的都认为不相同
if(Double.isNaN(x)) //检查 x 是否一个非数值
3、变量和常量
变量:
- 变量的声明规则:区分大小写、不使用保留字
- 声明变量后,必须用赋值语句对其进行显示初始化
注:Java10后,对局部变量,若可从初始值推断类型,则可直接使用var关键字而无需指定类型
var age = 12; //int
var name = "alan"; //String
常量:
- 使用final关键字进行修饰
- 常量名大写
- 类常量:可在一个类多个方法使用,static final修饰
public class FirstExample {
static final double MONEY = 100.00;
public static void main(String[] args) {
//打印语句
final double CM_PER_INCH = 2.54;
}
}
枚举:
enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE};
Size s = Size.SMALL;
4、运算符
- 算数运算符:+ - * /
- 函数:Math.sqrt、Math.pow
- 赋值运算:+=、-=
- 自增:++i 和 i++的区别?
- 关系运算符:==、!=、&&、||(短路运算?)
- 三元运算符: condition ? expression1 : expression2
- 位运算符: &、|、^、~ 、>> 、<< 、 >>>(用0补高位,无<<<)
- 优先级表在P44
类型转换:
1、自动转换:
2、强制转换:
double x = 9.97;
int y = (int)x; //9
int z = (int)(Math.round(x)); //10,四舍五入
5、字符串
String:引用类型
- 如何判断两个字符串是否相等?equals和==的区别?
- 空串""和null的区别?
- 如何遍历字符串?码点?
- String的API?P50
6、输入与输出
1、输入:
Scanner in = new Scanner(System.in);
in.next();//空格分割,读取一个单词
in.nextInt();
in.nextLine();//读取一行
in.hasNext();//检查是否还有别的单词
2、输出
System.out.println();//换行
System.out.print();
//打印x:包括8个字符,精度为小数点后两位,会打印: 3333.33
System.out.printf("%8.2f",x);
System.out.printf();
- 每个以%开始的格式说明符都已对应参数替换,f是float,s是String,d是十进制整数
- 详情标志转换符可看P58
7、控制流程
1、块即{ }:不能再嵌套的两个块中声明同名的变量
2、条件语句:if else
3、循环语句
- while ( conditions ) statement
- do { statement } while ( conditions ) :至少执行一次
- for ( int i = 1; i < 10; i++ ) { }
- switch:注意switch穿透
//choice可为char、byte、short、int、String(java 7)
switch ( choice ){
case 1:
...
break;
case 2:
...
defalut:
...
break;
}
4、循环中break和continue的区别?
7、大数
BigInteger和BigDecimal
- 大数不能使用算数运算符,需使用方法进行运算:P78
- BigDecimal为何可以进行精密运算
8、数组
1、声明数组:
int[] a = new int[10];
int[] b = {1,2,3};
//声明长度为0的数组
int[] a = new int[0];
int[] b = new int[] {};
2、遍历数组
- for循环
- for each循环
- Arrays.toString()
3、数组的使用
- 拷贝数组:Arrays.copyOf
- 数组排序:Arrays.sort
import java.util.Arrays;
import java.util.Scanner;
/**
* @author AlanLiang
* @date 2021/7/28
* 抽球游戏:在x个数字中抽取y个,要保证各不相同
*/
public class BallsArrayTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("球的总数有多少个?");
int x = in.nextInt();
System.out.println("需要抽取多少个球?");
int y = in.nextInt();
//定义球数组并初始化赋值0~48
int[] balls = new int[x];
for (int i = 0; i < balls.length; i++) {
balls[i] = i ;
}
//定义结果数组
int[] result = new int[y];
for (int i = 0; i < result.length; i++) {
//随机抽取,注:Math.random()取值为[0,1)
int random = (int) (Math.random() * 49);
//将随机生成的数字作为下标,取数
result[i] = balls[random];
//取出后,将balls数组最后一个数赋值给当前的random下标值,数组长度-1(去重)
balls[random] = balls[x -1];
x--;
}
//排序
Arrays.sort(result);
//打印
for (int i : result) {
System.out.println(i);
}
}
}
4、多维数组
案例:用二维数组实现
/**
* @author AlanLiang
* @date 2021/7/28
*/
public class CompoundInterest {
public static void main(String[] args) {
final double START_RATE = 10;
final int X_RATES = 6;
final int Y_YEARS = 10;
//创建利率数组并赋值
double[] interests = new double[6];
for (int i = 0; i < interests.length; i++) {
interests[i] = (START_RATE + i)/100.0;
}
//创建收益二维数组
double[][] balances = new double[Y_YEARS][X_RATES];
//首行赋值
for (int j = 0; j < balances[0].length; j++) {
balances[0][j] = 10000.00;
}
//其他行赋值
for (int i = 1; i < balances.length; i++) {
for (int j = 0; j < balances[i].length; j++) {
//先获取上一年,即上行的值
double oldBalance = balances[i - 1][j];
balances[i][j] = oldBalance + oldBalance * interests[j];
}
}
//打印利率
for (int i = 0; i < interests.length; i++) {
System.out.printf("%9.0f%%",interests[i] * 100);
}
System.out.println();
//打印收益
for (double[] balance : balances) {
for (double v : balance) {
System.out.printf("%10.2f",v);
}
System.out.println();
}
}
}