今天一直在学习几种常用类的用法,昨天也学了一点,然后感觉自己工程建的太乱了,真是逼死强迫症啊。
所以我用了一点时间,把写过的程序整理了一下。
一开始就给自己一个小目标,我要先敲50M的代码,但是现在是建工程来弄,已经到50M了,所以在从新定个目标吧。
暂时只弄了这些常用类。
首先,昨天学了日历类,今天卸了一个可以输入日期,显示日历的小程序,运行效果如图:
然后附上程序
public class TextCalender3 {
public static void main(String[] args) throws ParseException {
System.out.println("请输入日期:(格式: 2019-09-22)");
Scanner s=new Scanner(System.in);
String str=s.nextLine();
DateFormat df=new SimpleDateFormat("yy-MM-dd");
Date date=df.parse(str);
Calendar c=new GregorianCalendar();
c.setTime(date);//设置日历为当前时间
System.out.println("日\t一\t二\t三\t四\t五\t六");//打印出日历的周
int day=c.get(Calendar.DATE);//保存输入的是几号
c.set(Calendar.DAY_OF_MONTH, 1);//将当前日子设置为1号
for (int i = 0; i <c.get(Calendar.DAY_OF_WEEK)-1; i++) {//加当前周几个制表符
System.out.print("\t");
}
int maxDays=c.getActualMaximum(Calendar.DATE);//这个月的最大天数
for (int i = 1; i <=maxDays; i++) {//循环这个月最大天数次
if (day==c.get(Calendar.DAY_OF_MONTH)) {//判断,如果输入的跟循环到的天数是一样的,就多加个*
System.out.print(c.get(Calendar.DAY_OF_MONTH)+"*\t");//每打印一次都加一个制表符
}
else {
System.out.print(c.get(Calendar.DAY_OF_MONTH)+"\t");//每打印一次都加一个制表符
}
if (c.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY) {//如果到了周六就应该加回车
System.out.println();
}
c.add(Calendar.DAY_OF_MONTH, 1);//天数加1
}
}
}
代码还是多敲一点比较好,我这刚开始学,代码量太少了,很多关键词都记不住,包括一些常用的类。
Math类
个人感觉跟C中太像了。
//取整的相关操作
System.out.println(Math.ceil(3.2));//向上取整,但是返回值类型是double
System.out.println(Math.floor(3.2));//向下取整,返回值类型为double
System.out.println(Math.round(3.2));//4舍5入取整,返回值类型long
System.out.println(Math.round(3.8));
//绝对值、开方、a的b次幂
System.out.println(Math.abs(-21));//绝对值
System.out.println(Math.sqrt(4));//开方,返回值类型double
System.out.println(Math.pow(3,2));//3的2次方,返回值类型double
System.out.println(Math.pow(2,5));//2的5次方,返回值类型double
//Math类中常用的常量
System.out.println(Math.PI);//π
System.out.println(Math.E);//忘记叫什么了,就是ln函数的底数
//随机数
System.out.println(Math.random());//范围是[0,1),不包括1
System.out.println(10*Math.random());//范围是[0,10),不包括10
Random类
生成随机数
Random rand=new Random();
//随机生成[0,1)之间的double类型的数据
System.out.println(rand.nextDouble());
//随机生成in类型允许范围之内的整数
System.out.println(rand.nextInt());
//随机生成[0,1)之间的float类型的数据
System.out.println(rand.nextFloat());
//随机生成false或true
System.out.println(rand.nextBoolean());
//随机生成[0,10)之间的int类型的数据
System.out.println(rand.nextInt(10));
//随机生成[20,30)之间的int类型的数据
System.out.println(20+rand.nextInt(10));
File类
代表文件和目录
File f=new File("G:\\javacode/FileTest.txt");
System.out.println(f);//打印出来的是路径
f.renameTo(new File("G:\\\\javacode/TestFile.txt"));
System.out.println(System.getProperty("user.dir"));//项目目录
File f2=new File("hello.txt");//不加路径,就默认到项目路径
f2.createNewFile();//创建新文件hello.txt
System.out.println("File是否存在:"+f2.exists());
System.out.println("File是否是目录:"+f2.isDirectory());
System.out.println("File最后修改时间:"+new Date(f2.lastModified()));
System.out.println("File的大小:"+f2.length());
System.out.println("File的文件名"+f2.getName());
System.out.println("File的目录路径"+f2.getAbsolutePath());
f2.delete();//删除文件
File f3=new File("F:\\java\\常用类\\测试");//这个目录不存在
// boolean flag=f3.mkdir();//目录结构中有一个不存在,就不会创建整个目录树
// System.out.println(flag);
boolean flag=f3.mkdirs();//目录结构不存在也没事,一样会创建
System.out.println(flag);
File类的综合运用
//指定一个文件
File file=new File("F:\\java\\常用类\\测试\\Hello.txt");//目前这个文件不存在
//判断这个文件存不存在
boolean flag=file.exists();
//如果存在就删除
if (flag) {
//删除
boolean flagd=file.delete();
if (flagd) {
System.out.println("删除成功");
}
else {
System.out.println("删除失败");
}
}
else {//文件不存在就创建
//创建
boolean flagn=true;
try {
//如果目录不存在,先创建目录
File dir=file.getParentFile();
dir.mkdirs();
//创建文件
flagn=file.createNewFile();
System.out.println("创建成功");
} catch (IOException e) {
System.out.println("创建失败");
e.printStackTrace();
}
}
枚举Enum
需要使用一组常量的时候,可以使用枚举
尽量不要使用枚举的高级特性,因为高级特性都可以使用普通类实现,没必要引入枚举
enum Season {
SPRING,SUMMER,AUTUMN,WINTER
}
enum Week {
星期一,星期二,星期三,星期四,星期五,星期六,星期日
}
public class TestEnum {
public static void main(String[] args) {
System.out.println(Season.SUMMER);
Season a=Season.AUTUMN;
switch (a) {
case SPRING:
System.out.println("春天到了");
break;
case SUMMER:
System.out.println("夏天到了");
break;
case AUTUMN:
System.out.println("秋天到了");
break;
case WINTER:
System.out.println("冬天到了");
break;
default:
break;
}
}
}
异常
运行时异常,多数是逻辑错误
class Animal{
}
class Dog extends Animal{
}
class Cat extends Animal{
}
public class Test01 {
public static void main(String[] args) {
int a=0;
int b=1;
if (a!=0) {//解决运行时异常
System.out.println(b/a);
}
//空指针异常NullPointerException,对象为空,却调用了他的方法
String str=null;
if(str!=null) {
str.length();//空指针
}
//强制转型错误ClassCastException
Animal animal=new Dog();
if (animal instanceof Cat) {
Cat c=(Cat)animal;
}
//数组越界ArrayIndexOutOfBoundsException
int []arr=new int[5];
int a2=5;
if (a2<arr.length) {
System.out.println(arr[a2]);
}
//NumberFormatException
String str2="1234abcd";
//System.out.println(Integer.parseInt(str2));
}
}
try-catch
public static void readMyFile() {
FileReader reader=null;
try {
reader=new FileReader("G:\\javacode\\TesxFile.txt");//public FileReader(String fileName) throws FileNotFoundException
char c1=(char) reader.read();
System.out.println(c1);
} catch (FileNotFoundException e) {//子类FileNotFoundException,一般子类异常在前,父类在后,否则不会调用到子类异常
e.printStackTrace();//打印异常信息
} catch (IOException e) {//父类IOException
e.printStackTrace();
}
finally {//reader需要关闭,不管遇没遇到异常,都会执行finally块
try {
if (reader!=null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用throws声明异常
public static void readMyFile() throws IOException {
FileReader reader=null;
reader=new FileReader("G:\\javacode\\TesxFile.txt");//public FileReader(String fileName) throws FileNotFoundException
char c1=(char) reader.read();
System.out.println(c1);
if (reader!=null) {
reader.close();
}
}
public static void main(String[] args) throws IOException {
readMyFile();
}
自定义异常:
不能使用异常处理代理错误处理,这样会降低程序的清晰性,并且效率低下
处理异常不能代替简单测试–只在异常情况下使用异常机制
不要进行小力度的异常处理–应该将整个任务包装在一个try语句块中
异常往往在高层处理
//定义异常类
class IllegalAgeException extends Exception{//也可以继承RuntimeException
public IllegalAgeException() {
}
public IllegalAgeException(String msg) {
super(msg);
}
}
class Person{
private int age;
public int getAge() {
return age;
}
public void setAge(int age) throws IllegalAgeException {
if (age<0) {
throw new IllegalAgeException("年龄不能为负数");
}
this.age=age;
}
}
public class Test04 {
public static void main(String[] args) throws IllegalAgeException {
Person p=new Person();
p.setAge(-10);
}
}