从0基础开始学习Java第7天

今天一直在学习几种常用类的用法,昨天也学了一点,然后感觉自己工程建的太乱了,真是逼死强迫症啊。
所以我用了一点时间,把写过的程序整理了一下。
在这里插入图片描述
一开始就给自己一个小目标,我要先敲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);
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值