【Java 银色】Java 银色 SE11 考试准备备忘录
这个备忘录的使用方式
目标:预计参加Java Silver SE11考试的人士
由于通过了Java Silver考试,我将公开整理过的笔记。
笔记的结构与“黑书”一致。我认为,只要掌握了这些笔记中所写的内容,就能够通过考试。
笔记中总结了考试需要记住的部分以及易错的Java规则,请充分利用。
创建一个简单的Java程序–第1章
◆java命令
・写作方式:java 完全限定类名 [参数, 参数, …]
※完全限定名指的是像”java.lang.String”这样的正式名称。”String”类被称为简单名。
将参数以空格分隔列举。
「¥」与一个参数一起输出时,等价于「”」。
1. 实行命令:java 文件名(不需要扩展名如 .java)/java 文件名.java(添加扩展名可免去编译过程)
2. 编译命令:javac 文件名.java(需要扩展名)
3. 模块命令:jmod
・Java命令执行时的操作:
①启动JVM
②从类路径中查找并加载指定的类
③创建String类型的对象,并存储启动参数(参数)
④将存有启动参数(参数)的String数组类型的对象引用作为参数传递,并执行方法
◆数值字面常数
整数字面值的类型:整型数值(int型)、字符(char型)、浮点数(double型)、布尔值(boolean型)的四种。
当我们希望将字面量明确表示为其他数据类型时,我们可以在值的后面添加接尾辞以表示long型为「L」「l」,float型为「F」「f」。
各进制的前缀
① 二进制:加上前缀「0b」。例如十进制的「63」表示为「0b0111111」。
② 八进制:加上前缀「0」。例如十进制的「63」表示为「077」。
③ 十六进制:加上前缀「0x」。例如十进制的「63」表示为「0x3F」。
•「_」下划线:用于增强长数字字面的可读性。下划线不能出现在字面的开头和结尾,以及符号之前和之后(符号示例:「.」「L」「F」「0b」「0x」)。除此之外,下划线可以以自由的方式出现在其他位置和次数。
◆识别符
・命名规则:
① 不能将保留字(如abstract, if, int等)作为标识符使用
② 符号只能使用下划线”_”和货币符号$
③ 不能以数字开头
第二章: Java的基本数据类型和字符串操作
◆类型转换
・在类型转换方面有两种方法。
1. 隐式类型转换:不需要使用转换操作符。将小数据类型转换为大数据类型。
2. 显式类型转换:需要使用转换操作符。将大数据类型转换为小数据类型。
・按照大小顺序排列
(小) 字节(byte) → 短整型(short) → 整型(int) → 长整型(long) → 单精度浮点型(float) → 双精度浮点型(double) (大)
字符型(char) 会自动转换为整型、长整型、单精度浮点型和双精度浮点型。
变量
只能在本地变量中使用。
不能用于字段声明、参数类型声明、lambda表达式、数组初始化表达式、null。
◆String类
在中国的母语中重新解释:
– 字符串是不可变的对象。如果要更改字符串,需要创建一个新实例。
【String类的主要方法】
■indexOf方法:当搜索不匹配时,返回-1。当参数匹配时,返回其起始位置。
■replace方法:从头到尾逐个替换所有匹配项。
■replaceAll方法:创建一个带有替换结果的新String实例,并返回对该实例的引用。
■length方法:字符数(不区分半角和全角)。
■concat方法:连接字符。
第三章:运算符和判断结构
◆equals方法
在属于 Object 类的方法中,通过覆盖重写来确定两个对象的等值性。如果不进行覆盖重写,则将确认它们的同一性而不是等值性。
public boolean equals(Object obj){
return(this == obj);
}
・同値性(オーバーライド時):指的是具有不同参考的实例,但具有相同值的性质。
・同一性(オーバーロード时):用于确认具有不同参考的情况。如果不同,则返回false。
当参数为null时,始终返回false。
◆实习生方法
・检查字符串是否存在于常量池中,如果已经存在,则返回该字符串(进行重用)。如果不存在,则将该字符串添加到常量池中。
◆如果
如果省略{},则只有第一句话会被视为if语句的处理。
if(a<10)
//{
system.out.print("true") //←この文だけif文の処理とみなされる
//}
system.out.print("false")
如果满足了条件并执行了处理内容,那么之后的条件将不会被执行。
◆开关语句
・case值的规则
1. 与switch语句的参数具有相同类型/兼容类型。
2. 必须是常量(final声明的变量)或字面值。
3. 不能是null。
final int NUM = 0;
int num = 0;
switch(num){
case "10": System.out.print("A"); //引数numはint型であるが、
break; //"10"はString型なのでコンパイルエラー
case num: System.out.print("B"); //numはfinal宣言されてないのでコンパイルエラー
break;
}
当默认值时,应用于任何其他情况。
如果将null作为参数传递,将抛出NullPointerException。
Chapter 4: Control Structures
第四章:控制结构
◆当文
省略{}时的注意事项:do{处理}的处理只能写一句话。写两句或更多会导致编译错误。
int cnt = 0;
do
system.out.println("A");
system.out.println("B"); //中かっこを省略し2つの分を記述しているのでコンパイルエラー
while (cnt++<5);
遍历循环语句
・可以对初始化子和更新文进行多次描述。
hé
・初期化子必须是相同的类型。在第二个初始化子中,可以不写类型名称。
在中文中进行改述:只能写一个条件式,如果写多个会出现编译错误。
for(int i=0, j=2; i<10; i++, j++){
//処理
}
◆条件式を複数記述したいときは[[論理演算子]]を使う
for(int i=0, j=2; i<10 && j<10; i++, j++){
//処理
}
・当循环处理完成时,将执行更新文。
在for循环内声明的变量只在该循环内部有效。
如果在”continue”之后写上任何处理代码,将会出现编译错误,表示到达不可能的代码。
操作数组的第五章
◆排列
//データ型[] 配列変数名
int[] num;
//または
//データ型 配列変数名[]
int num[];
//配列変数名 = new データ型[要素数]
int[] num = new int[5];
//または
int[] num;
num = new int[5];
//データ型 配列変数名 = {配列に入れる値}
int[] num = { 1, 2, 3, 4, 5};
生成数组实例时,即使没有输入值,也会根据类型自动以默认值进行初始化。(int类型→0 Integer类型→null double类型→0.0 boolean类型→false String类型→¥u0000)
如下描述也可行:int[] e[]。
当将int[ ] a = new int[0]声明为零个元素时,将显示哈希码。
・继承关系:通过超类类型的数组类型变量,可以处理子类的实例集合。
public interface A{}
public class B implements A{}
public class Main{
public static void main(String[] args){
A[] array = new B[]{new B(), new B()};
}
}
・无名数组:方括号[]内不能放置数字。
//[]の中に数字は入れない。
int[] array = new int[] {}
//誤った記述例
int[] array = new int[5] {}
第六章 实例和方法
◆静态字段
被static修饰的字段和方法会被放置在称为静态区域的区域中。
・访问静态字段
1. “类名.字段名”(例如)Sample.num = 10;
2. 按照通常的方式实例化,并通过”引用.字段名”进行访问。
Sample s = new Sample();
s.num = 10;
・以班级为单位进行管理 = 在从班级创建的所有实例之间共享。
静态字段可以在不生成实例的情况下使用。
只有静态方法才能访问静态成员(即用static修饰的字段和方法),反过来,非静态方法可以访问静态成员。
◆本地变量
如果引用了尚未被初始化的本地变量,则会出现编译错误。
可以使用final进行声明。
这
当我们希望优先使用字段变量(在方法外定义的类变量)而不是局部变量(在方法内定义的变量)时,可以使用它。
◆实例
可以使用双引号将文字直接量括起来创建实例。(例如:String=”sample”;)
◆调用方法
如果返回值是void(即不返回任何值),在写返回值的赋值表达式时会出现编译错误。
class Sample{
public void hello(){
system.out.println("hello");
}
}
public class Main{
public static void main(String[] args){
Sample s = new Sample();
String a = s.hello(); //戻り値がvoid型のメソッドを代入して、
//sで値を受け取ろうとしているのでコンパイルエラー
s.hello(); //ただメソッドを呼び出すだけで何も受け取らないのでエラーにならない
}
}
◆回归文
・功能1:将值返回给调用方法。
・功能2:将控制返回给调用方。强制结束方法的处理,并返回给调用方法。
在return语句之后执行的代码是不可能的。如果在return语句之后编写任何处理代码,将会导致编译错误。
◆超载
重载规则:函数签名(参数数量、类型、顺序)必须不同,访问修饰符的差异不重要。
如果只有返回值类型不同的方法,将被视为重复存在相同方法,而不会被视为重载,从而导致编译错误。
希望对未正确重载的示例进行重载。
→ 希望将int calc(double a, int b){处理内容}重载为double calc(double a, int b){处理内容}:只是返回值不同,尚未进行重载。
◆构造函数
当调用另一个构造函数时,使用关键字 “this”。不首先编写此语句会导致编译错误。
构造函数只能在实例生成时被调用。
如果有void或其他返回类型,那么这个不是构造函数。
即使使用extends等进行继承,也不会传递给子类。
在修饰构造函数的访问修饰符上没有限制。
构造函数链:当编译子类时,子类的构造函数中会被添加super();来调用超类的构造函数。
public class B extends A{
B(){
this(4);
System.out.print("3");
}
B(int b){
super(); //←コンパイルして追加されたスーパークラスAの呼び出し
System.out.print(b);
}
最后的
・被final修饰的变量是常量,无法进行修改。
・为了修改变量的值,需要在构造方法中进行初始化。
public class Sample{
private final int num; //定数の宣言
pibliv Sample() {} //コンストラクタ内で定数を初期化していないのでコンパイルエラー
public Sample(int num){
this.num = num; //コンストラクタ内で定数を初期化している
}
}
◆ 可变长参数 (kě shù)
– 允许自由更改数量的参数。
– 在参数类型后面加上三个句点进行声明。
void sample(int... num){
//do something
}
・注意事项:
1. 不同类型的数据不能合并在一起。
2. 如果需要将除了可变长参数外的其他类型包含在参数中,可变长参数必须写在最后。
第七章:类的继承、接口和抽象类
◆界面
【基本规则】
– 继承了接口的具体类必须将抽象方法重写为具体方法。
– 在接口中实现的抽象方法会自动成为public访问修饰符。
– 无法实例化。
– 继承了接口的类在覆盖方法时无法改变为除public外的其他访问修饰符。>>p.522
– 只能定义常量字段(static, final)。
【其他规则】
– 默认方法:使用默认方法可以编写方法的处理内容。继承接口的类可以直接使用该方法而无需进行覆写。
– 在覆写抽象方法的抽象方法中,可以改变返回值的类型。(在这种情况下,类型必须是超级方法指定的类型的子类类型。= ” 协变返回值” )>> p.523
– 可以将实现定义为默认方法和静态方法。
◆抽象类
・可以定义抽象方法和具体方法。
・在抽象方法上,必须加上abstract关键字,并且不能写具体内容。
・由于抽象方法预设为需要被重写,所以可以自由地使用除了private以外的访问修饰符进行设置。
・在继承抽象类的子类中,必须要重写抽象方法。
・不能实例化。
・可以定义继承抽象类的抽象类。
◆重写
・重写规则:
■签名(方法名、参数类型、参数数量、顺序)必须相同。
■返回类型必须是相同类型或子类类型。
■访问修饰符必须相同或更宽松。
■声明的异常类型必须是抛出的异常类型或子类类型相同。
◆多态
尽管具有相同的方法名称,但在一个类中的行为与另一个类的行为有不同的表现。
第九章 应用程序编程接口 (API)
◆地图
– 以键和值的组合进行管理的集合。类似表格的形象。
– key方法:取出键。
– value方法:取出值。
◆动态数组
・不是线程安全的
◆比较方法
比较两个数组的字典顺序排序时的排列顺序。
如果两个数组相等:返回0。
如果第一个参数在字典顺序中先于第二个参数:返回-1。
如果第一个参数在字典顺序中后于第二个参数:返回1。
◆数学类
・Math.pow:获取幂运算的结果。例如)Math.pow(2,3); → 2的3次方=8
・Math.sqrt:以double类型获取参数的平方根。例如)Math.sqrt(16); →4.0(因为是double类型,所以会显示到小数点)
・Math.round:将参数四舍五入到小数点后一位,并转换为整数。
◆StringBuilder类
默认情况下,它具有多余的16个字符缓冲区。
例如:当在stringBuilder类的capacity()方法中检查字符串”abcde”的容量时,结果为16+5=21。
第十章 异常处理
◆ 异常处理
try {
例外が発生する可能性のある処理
} catch (例外の型 引数) {
例外が発生した場合の処理(例外が発生しなければ行われない処理)
} finally {
例外の有無に関わらず、最後に必ず実行される処理
}
・例外处理的执行顺序:①close方法 → ②catch块 → ③finally块
・在编写多个catch语句时要注意:先写子类的异常。如果先写父类,会产生编译错误。
・throw:在希望有意引发异常时,将其写入处理内容中。
・throws:必须在抛出已检查异常的方法中写入。如果在main方法中捕获,可以使用throws声明,或者将Exception作为catch的参数(catch(Exception))。
・当try-catch嵌套时,接收抛出的异常的是与该异常对应的最近的catch块。
・在try块中声明的变量的有效范围限于try块内部。
・非检查异常:RuntimeException及其子类。不需要使用throws声明。
・如果return语句位于最后,将按照finally → catch的顺序输出。
・返回值的存放容器只有一个,因此最后一个return语句返回的值将成为最终的值。
◆ 主要的例外的类型
・空指针异常:当调用包含空值的数组时抛出的异常。在System.out.print()中显示时不会抛出。
・索引越界异常:ArrayIndexOutOfBoundsException和StringIndexOutOfBoundsException的父类。
・类转换异常:当将一个对象转换为不相关的类时,抛出该异常以指示此操作。
・并发修改异常:当检测到禁止进行对象的并发修改的方法尝试进行修改时抛出的异常。例如,在一个线程按顺序取出数组的值时,另一个线程尝试修改数组的值。
・不支持的操作异常:当对不可修改的集合进行修改时抛出的异常。例如,当对使用list.of创建的数组进行修改时。
第11章 模块化系统
【命令类型】
java –describe-module jmod describe:查看模块的配置信息
jdeps –list-deps java –show-module-resolution:查看类和模块的依赖关系