Java基础
大框架
public class Main{
public static void main(String[] args){
}
}
/*
源代码的文件名必须与公共类的名字相同
如该文件的名字应为Main.java
*/
输入输出
简单控制台输出
int a = 5;
System.out.println("Hello, world! And a = " + a + ".");
//将一个文本行输出到控制台上,即末尾自带换行符
System.out.printf("Hello, world! And a = %d.",a);
//输出后不自带换行符
简单控制台输入
源文件顶部加入
import java.util.*;
或者
import java.util.Scanner;
main中使用创建一个Scannerr对象
Scanner sc = new Scanner(System.in);
读入时使用
string name = sc.nextLine();
使用结束后关闭
sc.close();
此处的关闭Scanner对象并不必要
简单的txt文本内容读取
源文件顶部加入
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Scanner;
main方法中需要用throws字句标记(防止java编译器报错),即将框架改为
public class Main {
public static void main(String[] args) throws IOException{
}
}
构造Scanner对象(绝对路径中的\符号需要用\转义,即使用 \\ 替代 \ )
Scanner sc = new Scanner(Path.of("D:\\A.txt"), StandardCharsets.UTF_8);
然后从该文件中读入的方法与简单控制台输入相同
string name = sc.nextLine();
使用结束后关闭
sc.close();
此处的关闭也是非必要的
简单的txt文本内容输出
源文件顶部加入
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
main方法中也需要用throws字句标记,即将框架改为
public class Main {
public static void main(String[] args) throws IOException{
}
}
构造PrintWriter对象
PrintWriter out = new PrintWriter("D:\\Truth.txt",StandardCharsets.UTF_8);
//绝对路径中的\符号需要用\转义
然后从该文件中读出的方法与简单控制台输出相同
out.printf("Hello,world!");
使用结束后关闭
out.close();
需要注意的是:
- 不同于其他构建的对象,PrintWriter对象是真的必须关闭,否则该txt文件将被清空
- 如果该文件不存在,将自动创建
- 该文件原有的内容将被直接清空
输出的转义字符
转义字符 | 转移对象 |
---|---|
%d | int |
%f | float,double |
%.2f | float,double保留两位有效数字 |
简单的函数
数学函数
平方根
double a = -0.2;
double b = Math.sqrt(a);
//b == 0.2
幂运算
double x,a,s;
s=Math.pow(x,a);
//s == x^a
数学常数
double pi = Math.PI , e = Math.E;
简化
若需要使用多次Math库中的函数,可以在源文件顶部加上
import static java.lang.Math.*;
就不必在数学方法名和常量前添加前缀“Math.”
随机函数
源文件顶部加入
import java.util.*;
或者
import java.util.Random;
main中创建一个Random对象
Random rd = new Random();
使用时
int magicNum = rd.nextInt(10);
如此函数将产生一个{0,1,2,…,9}中的int类型数据赋值给magicNum
强制类型转换
double x = 9.997;
int nxa = (int) x;//nax == 9
int nxb = (int) Math.round(x);//nxb == 10
即(int)函数是直接舍去小数部分
而Math.round()函数可以完成四舍五入的作用
运算符
三元运算符
x < y ? x : y//返回 x 和 y 中较小的那一个
转义运算符
/r或者/n可以表示换行
杂项
注释
//将这一行注释
/*
将这一段注释
*/
数据类型
类型 | 取值 |
---|---|
int | -231 ~ 231-1 (刚刚超过20亿) |
short | -215 ~ 215-1 |
long | -263 ~ 263-1 |
byte | -27 ~ 27-1 |
float | 有效位数6 ~ 7位 |
double | 有效位数15位 |
char | 单个字符 |
常量
关键字final指示常量
final double PI_FIVE = 3.13159;//在main中
在多处使用的常量(示例)
public class Main{
public static final double PI_FIVE = 3.13159;
public static void main(String[] args){
System.out.println("PI = " + PI_FIVE);
}
}
控制语句
if else语句
if(condition){
}
else {
}
也可不加大括号,默认下一句且仅下一句为这一层的运算
while语句
while (condition){
}
或者
do
{
}
while (condition);
显然两者的区别在于判断语句和循环内容的执行顺序。
for语句
for(int i = 0 ; i <= 99 ; i++){
//循环100次
if(condition)break;
//提前跳出循环
}
当用double类型数据作为循环条件时要相当小心
因为四舍五入时会造成误差
比如0.1的误差可能永远达不到精确的最终值
因为0.1无法精确的使用计算机内部计算时使用的二进制在有限位表示出来
无限循环示范
for (double x = 0; x != 10 ; x += 0.1)...
x会从9.99999999999998跳到10.09999999999998,然后无限循环
相比while语句,for循环一般用于既定的循环次数
switch语句
switch(choice){
case 1:
...
break;
case 2:
...
break;
case 3:
...
break;
default:
...
break;
}
显然这是一种在多重选择时优于if else的语句
其中的choice/case标签可以是类型为char,byte,short,int的常量表达式,枚举常量,字符串字面量
如果缺少break,有可能触发多个case分支
break语句
普通的break即跳出某循环语句块
while(){
...
if (condition) break;
...
}
//jumps here when the break state executes
java提供了一个带标签的break,其作用类似于goto
label:
{
...
if (condition) break label;
...
}
//jumps here when the break state executes
当然这种方式只能跳出语句块,不能跳入另一个语句块
continue语句
与break相比,仅仅只是跳出当前循环,进入下一次循环的首部
while(){//jumps here when the continue state executes
...
if (condition) continue;
...//here will not work when the continue state executes
}