2021-04-09 java学习记录
1.强制类型转换
注意事项:
①强制类型转换可能发生精度损失,数据溢出,因此需保证转换时,数据值 在逻辑上不超过转换后的类型最大值
②byte/short/char 三种类型进行数学运算时先全部转成int
③boolean不发生任何类型转换
///
///
///
2.java中的引用数据类型
①枚举 enum关键字
用法一:
用作常量
public enum Spiciness {NOT,HOT,FLAMING};
public class Sim{
public static void main(String[] args){
Spiciness howHot=Spiciness.NOT;
System.out.println(howHot);
}
}
注意,在创建enum时编译器会自动添加一些特性,例如创建toString方法,便于显示某个enum实例的名字;还会创建ordinal()方法,表示某个enum常量声明顺序;以及static values()方法,产生这些常量所组成的数组。
public class EnumOrder{
public static void main(String[] args){
for(Spiciness s:Spiciness.values()){
System.out.println(s+" "+s.ordinal());
}
}
}
用法二:
用在switch中,switch是要在有限值集合中选择,与enum是绝配。
public class Burrito{
Spiciness degree;
public Burrito(Spiciness degree){ this.degree=degree;}
public void describe(){
switch(degree){
case NOT:
...
}
}
public static void main(String[] args){
Burrito plain=new Burrito(Spiciness.NOT);
plain.describe();
}
}
②类
③接口
④数组
具体的可以参看我另一篇博客
3.数组是什么:相同数据类型的集合,通过整型下标索引来访问数组元素。
//
//
①for each循环
java中功能很强的用来处理数组或其他元素集合的循环,这种循环不同考虑下标值。
for(variable :collection) statement;
注意collection集合必须是实现了Iterable接口的类对象或者数组。
//
//
②数组拷贝
java中允许一个数组变量拷贝到另一个数组变量,此时两个数组变量引用同一个数组。
int[] SmallPrimes={1,2,3,4,5};
int[] luckyNums=SmallPrimes;
深拷贝就得使用Arrays.copyOf方法;
int[] copiedLuckyNums=Arrays.copyOf(SmallPrimes,5);
//
//
Arrays类里相关函数:
static xxx[] copyOf(xxx[] a,int length);
static xxx[] copyOf(xxx[] a,int start,int end);
static int binarySearch(xxx[] a,xxx v);
二分查找,寻找数组中的v,返回下标,若没有返回负数值r;
static void fill(xxx[] a,xxx v);
将xxx[] a中所有元素置为v
static boolean equals(xxx[] a,xxx[] b);
判断相等。
//
//
4.输入与输出
①Scanner类
标准输入流;
Scanner in=new Scanner(System.in);
String nextLine()//读取下一行输入
String next()//读取下一个单词,space分隔符
//
//
②文件的输入输出P61
Scanner in=new Scanner("myfile.txt","UTF-8");
PrintWriter out=new PrintWriter("myfile.txt","UTF-8");
但要记住如果用一个不存在的文件名创建Scanner,或用无法创建的文件名创建PrintWriter会产生异常。此时可以在函数后面标记或用try-catch
public static void main(String[] args) throws Exception{
Scanner in=new Scanner("myfile.txt","UTF-8");
}
//
//
5.带标签的break
如果确实需要使用goto语句,而且一个代码块在想要跳到的位置之前结束,可以使用这种break语句;
Scanner in=new Scanner(System.in);
int n;
read_data:
while(...){
for(...){
n=in.nextInt();
if(n<0) break read_data;
}
}
//
//
6.大数(java.math)
如果基本的整型与浮点型精度不能满足需求,java.math中的两个类BigInteger,BigDecimal,可以包含任意长度数字序列,实现任意精度
使用静态的valueOf()方法,可将数值转成大数;
BigInteger a=BigInteger.valueOf(100);
对于更大的数可以使用带字符窜参数的构造器:
BigInteger a=new BigInteger("12333333333334435421232432312");
但不能使用算术运算符处理大数,大数的运算有专门的函数
BigInteger s=a.add(b);
BigInteger d=c.multiply(b.add(BigInteger.valueOf(2)));
对于除法,如果商是无限循环小数,
BigDecimal divide(BigDecimal other);
会抛出异常,应使用
BigDecimal divide(BigDecimal other,RoundingMode mode);
指明舍入方式;