javaSE小知识点
var
关键字
var sb = new StringBuilder();//自动推断sb的类型
public class Main {
public static void main(String[] args) {
String s = """ //java13
SELECT * FROM
users
WHERE id > 100
ORDER BY name DESC
""";
System.out.println(s);
}
输出不换行
package com.bi;
public class Main {
public static void main(String[] args) {
System.out.print("A,");
System.out.print("B,");
System.out.print("C.\teee\n");\\不换行
}
}
格式化输出
public class Main {
public static void main(String[] args) {
double d = 3.1415926;
System.out.printf("%.2f\n", d); // 显示两位小数3.14
System.out.printf("%.4f\n", d); // 显示4位小数3.1416
}
}
输入
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建Scanner对象
System.out.print("Input your name: "); // 打印提示
String name = scanner.nextLine(); // 读取一行输入并获取字符串
System.out.print("Input your age: "); // 打印提示
int age = scanner.nextInt(); // 读取一行输入并获取整数
System.out.printf("Hi, %s, you are %d\n", name, age); // 格式化输出
}
}
判断引用类型是否相等
判断值类型的变量是否相等,可以使用==
运算符。但是,判断引用类型的变量是否相等,==
表示引用是否相等,或者说,是否指向同一个对象。要判断引用类型的变量内容是否相等,必须使用equals()
方法。
switch
-
java12增加表达式
public class Main {
public static void main(String[] args) {
String fruit = "apple";
switch (fruit) {
case "apple" -> System.out.println("Selected apple");
case "pear" -> System.out.println("Selected pear");
case "mango" -> {
System.out.println("Selected mango");
System.out.println("Good choice!");
}
default -> System.out.println("No fruit selected");
}
}
}
-
利用switch表达式会返回值给变量赋值
public class Main {
public static void main(String[] args) {
String fruit = "apple";
int opt = switch (fruit) {
case "apple" -> 1;
case "pear", "mango" -> 2;
default -> 0;
}; // 注意赋值语句要以;结束
System.out.println("opt = " + opt);
}
}
-
如果需要复杂的语句,我们也可以写很多语句,放到
{...}
里,然后,用yield
返回一个值作为switch
语句的返回值:
public class Main {
public static void main(String[] args) {
String fruit = "orange";
int opt = switch (fruit) {
case "apple" -> 1;
case "pear", "mango" -> 2;
default -> {
int code = fruit.hashCode();
yield code; // switch语句返回值
}
};
System.out.println("opt = " + opt);
}
}
-
switch
的计算结果必须是整型、字符串或枚举类型;
变量应该把访问范围缩到最小的原则。
for each循环
for each
循环能够遍历所有可迭代的数据类型,如List,数组、Map等。无法拿到索引
public class Main { public static void main(String[] args) { int[] ns = { 1, 4, 9, 16, 25 }; for (int n : ns) { System.out.println(n); } } }
数组打印、排序
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] ns = { 1, 1, 2, 3, 5, 8 }; System.out.println(Arrays.toString(ns)); } }
可变参数
class Group { private String[] names; public void setNames(String... names) {//传空可以,无法传null this.names = names; } }
调用时:
Group g = new Group(); g.setNames("Xiao Ming", "Xiao Hong", "Xiao Jun"); // 传入3个String g.setNames("Xiao Ming", "Xiao Hong"); // 传入2个String g.setNames("Xiao Ming"); // 传入1个String g.setNames(); // 传入0个String
构造方法
-
没有在构造方法中初始化字段时,引用类型的字段默认是
null
,数值类型的字段用默认值,int和boolean
的默认值分别是0、false
。 -
创建对象实例时,按照如下顺序: 1. 先初始化字段,例如,
int age = 10;
表示字段初始化为10
,double salary;
表示字段默认初始化为0
,String name;
表示引用类型字段默认初始化为null
; 2. 执行构造方法的代码进行初始化。 -
多构造方法,一个构造方法可以复用其他构造方法,通过this关键字。
class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public Person(String name) { this(name, 18); // 调用另一个构造方法Person(String, int) } public Person() { this("Unnamed"); // 调用另一个构造方法Person(String) } }
super
-
子类引用父类的字段时,可以用
super.fieldName
。 -
任何
class
的构造方法,第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super();
final
-
只要某个class没有
final
修饰符,那么任何类都可以从该class继承即不允许子类继承。 -
如果一个父类不允许子类对它的某个方法进行覆写,可以把该方法标记为
final
。用final
修饰的方法不能被Override
。 -
被final修饰的变量或引用不允许再赋值。
-
对于一个类的实例字段,同样可以用
final
修饰。用final
修饰的字段在初始化后不能被修改。
转型
-
向上转型:把一个子类类型安全地变为父类类型的赋值(upcasting),转型后只能调用父类的方法,如果子类覆盖了父类的方法,则调用子类的方法,对于只有子类才有的方法,通过父类的引用将无法调用。
-
向下转型:把一个父类类型强制转型为子类类型,就是向下转型(downcasting)。只用父类引用真实指向的是子类,才能向下转型,否则会失败,会报
ClassCastException
。 -
instanceof
操作符,可以先判断一个实例究竟是不是某种类型。
多态
在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,被称为覆写(Override)。
Override和Overload不同的是,如果方法签名如果不同,就是Overload,Overload方法是一个新方法;如果方法签名相同,并且返回值也相同,就是Override
。
Java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。
这个非常重要的特性在面向对象编程中称之为多态。它的英文拼写非常复杂:Polymorphic。
多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。