1.输出
System.out.println
2.输入
Scanner in = new Scanner(System.in);
String obj = in.nextLine()/nextInt()/nextDouble()
3.文件输入与输出
读取文件
Scanner in = new Scanner(Path.of("myfile.txt"), StandardCharsets.UTF_8);
写入文件
PrintWriter out = new PrintWriter("myfile.txt", StandardCharsets.UTF_8);
大数
BigInteger
BigDecimal
数组
int[] a = new int[100];
int[] smallPrimes = {2, 3, 5, 7, 11, 13};
对象与类
对象类型划分:
1.基本数据类型
2.对象引用
- 包
将类放入包中,需将包的名字放在源文件的开头
package com.horstmann.corejava;
public class Employee
{...}
// final类中的所有方法自动地成为final方法
public final class Executive extends Manager
{...}
public class Employee
{...// final方法不可被子类覆盖
public final String getName(){return name;}...}// 若将类的字段声明为final,// 构造对象之后就不允许改变它们的值了.
- 强制类型转换
1.数值类型
double x =3.4;int n =(double)x;
2.基类转为派生类
if(staff[1] instanceof Manager){
boss =(Manager)staff[1];...}
3.无派生关系引用类型互转
产生编译错误
- 抽象类
包含一个或多个抽象方法的类本身需声明为抽象的
public abstract class Person
{...
public abstract String getDescription();}
public class Employee
{...
public boolean equals(Object otherObject){if(this == otherObject){return true;}if(otherObject == null){return false;}if(getClass()!= otherObject.getClass()){return false;}
Employee other =(Employee)otherObject;return name.equals(other.name)&& salary == other.salary
&& hireDay.equals(other.hireDay);}}
public class Manager extends Employee
{...
public boolean equals(Object otherObject){if(!super.equals(otherObject)){return false;}
Manager other =(Manager)otherObject;return bonus == other.bonus;}}
- hashCode
public class Employee
{
public inthashCode(){// return Objects.hash(name, salary, hireDay)return7* Objects.hashCode(name)+11* Double.hashCode(salary)+13* Objects.hashCode(hireDay);}}
public class Employee
{
public String toString(){return"Employee[name="+ name
+",salary="+ salary
+",hireDay="+ hireDay
+"]";}...}
public class Manager extends Employee
{...
public String toString(){return super.toString()+"[bonus="+ bonus
+"]";}}
泛型数组列表
java.util.ArrayList<E>
ArrayList<E>()
boolean add(E obj)intsize()
E set(int index, E obj)
E get(int index)voidadd(int index, E obj)
E remove(int index)
- 类型化与原始数组列表的兼容性
public class EmployeeDB
{
public voidupdate(ArrayList list){...}
public ArrayList find(String query){...}}
基本类型
int
long
float
double
short
byte
char
bool
对应的包装器类
Interger
Long
Float
Double
Short
Byte
Character
Boolean
基本类型与其包装器类可隐式/显式的相互转换
基本类型转换为包装器类叫做装箱
包装器类转换为基本类型叫拆箱
隐式装箱与拆箱由编译器包装.
基本类型是Java中仅有的值类型
其余类型和包装器类型均为引用类型.
public staticdoublemax(double... values){double largest = Double.NEGATIVE_INFINITY;for(double v : values){if(v > largest){
largest = v;}}return largest;}
public interface Comparable
{intcompareTo(Object other);}// 将类声明为实现某个接口
class Employee implements Comparable
{
public intcompareTo(Object otherObject){
Employee other =(Employee)otherObject;return Double.compare(salary, other.salary);}}// 更好的一种风格
public interface Comparable<T>{intcompareTo(T other);}// 将类声明为实现某个接口
class Employee implements Comparable<Employee>{
public intcompareTo(Employee other){return Double.compare(salary, other.salary);}}
接口中的所有方法都自动是public方法
接口可设置常量字段,字段总是public static final
尽管每个类只能有一个超类,但可实现多个接口
类从超类和接口类继承了名称和参数列表一致的方法时,
对类的使用者,通过类调上述方法时,采用超类版本
- lambda表达式及式样举例
package lambda;
public class LambdaTest
{
public staticvoidmain(String[] args){
var planets = new String[]{"Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus","Neptune"};
Arrays.sort(planets);
Arrays.sort(planets,(String s1, String s2)->{
s1.length()- s1.length();});}}