第3章 Java的基本程序设计结构
文章目录
3.1 一个简单的java程序
访问修饰符是用与控制程序的其他部分对这段代码的访问级别
java中的所有函数都是某个类的方法
3.3 数据类型
char类型
Unicode字符可以用一个char值描述,另外一些Unicode则需要两个char值
码点
是指与一个编码表中的某个字符对应的代码值,码点采用十六进制书写,并加上前缀U+,例如U+0041就是拉丁字母A的码点
代码单元
在基本多语言平面中,每个字符用16位表示
3.4 初始化变量
从java10开始,对于局部变量,如果可以从变量的初始值推断出它的类型,就不再需要声明类型。只需要使用关键字var而无需指定类型
常量
关键字 final表示这个变量只能被赋值一次。一旦赋值,就不能再更改了。
在java中,可能经常需要创建一个常量以便在一个类的多个方法中使用,通常将这些常量称为类常量。 使用static final,类常量需要定义在main方法之外
枚举类型
eg: enum Size {SAMLL,MEDIUM,LARGE,EXTRA_LARGE};
声明这个类型的变量 Size s = Szie.MEDIUM;
3.5 运算符
数学函数 Math.sqrt 求平方根 Math.pow 求幂次
移位运算符 << 左移 >> 右移
3.6 字符串
String类 的substring方法可以从一个较大的字符串提取出一个字串
eg:String greeting = “hello”;
String s = greeting.substring(0,3); //hel
检测字符串是否相等
.equals()
.equalsIgnoreCae() 不区分大小写
构建字符串
如果需要许多小字符串来构建一个字符串,使用 StringBuilder类
eg: StringBuilder builder = new StringBuilder();
builder.qppend(ch); //单个字符
builder.append(str); //字符串
String completedString = builder.toString();
package com.core;
public class codeTest01 {
public static void main(String[] args) {
/**
* length方法将返回采用UTF-16编码表示给定字符串所需要的代码单元个数
*/
String greeting = "hello";
int n = greeting.length();
System.out.println(n);
/**
* 获得实际长度,即码点个数
*/
int cpCount = greeting.codePointCount(0, greeting.length());
System.out.println(cpCount);
/**
* 调用 s.charAT(n) 将返回位置n的代码单元,n介于0~s.length()-1
*/
char first = greeting.charAt(0);
char last = greeting.charAt(4);
System.out.println(first + "\t" + last);
/**
* 获得第i个码点
*/
int index = greeting.offsetByCodePoints(0, 3);
int cp = greeting.codePointAt(index);
System.out.println(index + "\t" + cp);
/**
* 遍历一个字符串
*/
int[] codePoints = greeting.codePoints().toArray();
//反之把一个码点改成字符串
String str = new String(codePoints,0,codePoints.length);
System.out.println(codePoints+ "\n" +str);
}
}
文本块
可以很容易地提供跨多行的字符串字面量。文本块以“ ” “ 开头,后面是一个换行符,并以另一个” “ ”结尾
3.7输入与输出
读取输入
console类,读取密码且不被人看见 从控制台输入
package com.core;
import java.io.Console;
import java.util.Arrays;
public class consoleTest01 {
public static void main(String[] args) {
Console cons = System.console();
if(cons == null){
System.out.println("console not avaliable");
return;
}
String username = cons.readLine("User name:");
char[] passwd = cons.readPassword("Password:");
System.out.println("User name "+ username );
System.out.println("Password was entered.");
Arrays.fill(passwd,Character.MIN_VALUE);
}
}
文件输入与输出
读取文件
Scanner in = new Scanner(Path.of(“myfile.txt”),StandardCharset.UTF_8);
写入文件
PrintWriter out = new PrintWriter(“myfile.txt”,StandardCharsets.UTF_8); //如果文件不存在,则创建该文件
3.9 大数
java.math包中两个很有用的类:
BigInteger 实现任意精度的整数运算
BigDecimal 实现任意精度的浮点数运算
这两个类可以处理包含任意长度数字序列的数值
使用静态的valueOf方法可以将一个普通的数转换为大数
eg:BigInteger a = BigInteger.valueof(100);
3.10 数组
数组
匿名数组
smallPrimes = new int[]{17,12,13,15};
拷贝数组
Arrarys.copyOf()
数组排序
Arrays.sort()
for each 循环
可以用来一次处理数组(或者任何其他元素集合)中的每个元素,而不必考虑指定索引值
for(variable : collection) statement
给定变量设置为集合中的每一个元素,然后执行语句。collection表达式必须是一个数组或者是一个实现了Iterable接口的类对象
二维数组循环
for(double[] row:a) //a是想要访问二维数组的名字
for(double value : row)
do something with value;