文章目录

  • 关键字学习
  • static关键字
  • 静态初始化块
  • 时间处理相关类
  • Date时间类(java.util.Date)
  • DateFomat类和SlimpleDateFormat类
  • Calendar日历类
  • 其他常用类
  • Math类
  • Random类
  • File类
  • 枚举


关键字学习

static关键字

在类中,用static声明的成员变量为静态成员变量,也称为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效。有以下特点:

  • 为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化
  • 对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享
  • 一般用“类名.类属性/方法”来调用。(也可以通过对象引用或类名(不需要实例化)访问静态成员)
  • 在static方法中不可以直接访问非static的成员
package com.bjsxt;
        public class jj{
            int id;
            String name;
            static String company="北京";//城市名称
            public jj(int id,String name){
                this.id=id;
                this.name=name;
            }
            public void login(){
                System.out.println("登录:"+name);
                System.out.println(comanpy);
            }
            public static void printComanpy(){
                //login();//调用非静态成员,编译就会报错
                System.out.println(company);
            }
            public static void main(String[] args){
                   jj U=new jj(15,"java");
                   jj.printComanpy();
        }
    }

方法区存放的是:静态变量,类或者static。

  • 非静态可以调用静态
  • 静态不可以调用非静态

静态初始化块

构造方法用于对象的初始化!静态初始化块,用于类的初始化操作!在静态初始化块中不能直接访问非static成员。

package com.bjsxt;
        public class jj{
            int id;
            String name;
            String pwd;
            static String company="北京o";//城市名称
            static { 
                     //不可以调用普通属性和普通方法
                     //因为做类的初始化,没有对象
                     //如果有构造器,先执行static,先类在构造。
                System.out.println("执行类的初始化工作");
                company="bf";
                printComanpy();
            }
            public static void printComanpy(){
                System.out.println(company);
            }
        public static void main(String[] args){
		           jj u3=null;
        }
    }

时间处理相关类

我们用long类型的变量来表示时间,从基准时间往前几亿年,往后几亿年都能表示。如果想获得现在时刻的“时刻数值”,可以使用:

  • long now=System.currentTimeMillis();

Date时间类(java.util.Date)

package com.bjsxt;
import java.util.Date;
        public class jj{
            public static void main(String[] args) {
               /** //Integer.MIN_VALUE
                long a=Long.MAX_VALUE/(1000L*3600*24*365);//Long.MAX_VALUE最大的值,加L防止溢出
                System.out.println(a);//大约表示到:2.9亿年后

                long nowNum=System.currentTimeMillis();//代表当前时刻的毫秒数
                System.out.println(nowNum);*/

                Date a1=new Date();//如果没有传参,代表当前时刻
                System.out.println(a1);
                System.out.println(a1.getTime());//返回当前时间的毫秒数

                Date a2=new Date(1000L*3600*24*365*250);
                System.out.println(a2);//
                
            }
    }

DateFomat类和SlimpleDateFormat类

  • DateFomat类的作用
    把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。
    DateFomat是一个抽象类,一般使用它的子类SimpleDateFormat类实现。
package com.bjsxt;
/**
 * 测试时间对象和字符串的相互转化
 * 使用:DateFormat、SimpleDateFormat
 * */
import java.text.DateFormat;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Spliterators;
import java.util.function.LongConsumer;
public class jj{
            public static void main(String[] args) throws ParseException {
                //new出SimpleDateFormat对象
                // SimpleDateFormat s1=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                SimpleDateFormat s1=new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒");

                //将字符串转换Date对象
               // Date d1=s1.parse("1971-3-10 10:40:52");
                Date d1=s1.parse("1971年3月10日 10时40分52秒");
                System.out.println(d1.getTime());

                //将Date对象转换成字符串
                Date d2=new Date();
                String str=s1.format(d2);
                System.out.println(str);

                DateFormat df2=new SimpleDateFormat("今年第w周,今年第D天");
                System.out.println(df2.format(d2));
                //注意:将符合指定格式的字符串转换成时间对象,字符串格式需要和指定格式一致。

            }
}

Calendar日历类

Calendar类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年、月、日、时、分、秒的展示和计算。
GregorianCalendar是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

  • 注意月份的表示,一月是0,二月是1,以此类推,12月是11.因为大多数人习惯于使用单词而不是使用数字来表示月份,这样程序也许更易读,父类Calendar使用常量来表示月份:JANUARY等等

GregorianCalendar类和Calendar类的使用

package com.bjsxt;
import java.util.*;
public class jj{
            public static void main(String[] args) {
                //得到日期相关元素
                GregorianCalendar calendar=new GregorianCalendar(2999,10,9,22,10,50);
                int year=calendar.get(Calendar.YEAR);//打印1999
                int month=calendar.get(Calendar.MONTH);//打印10
                int day=calendar.get(Calendar.DAY_OF_MONTH);//打印9
                int day2=calendar.get(Calendar.DATE);//打印9
                //日:Calendar.MONTH和Calendar.DAY_OF_MONTH同义词
                int date=calendar.get(Calendar.DAY_OF_WEEK);//打印3
                //星期几,这里是:1-7。周日是1,周一是2·····周六是7
                System.out.println(year);
                System.out.println(month);
                System.out.println(day);
                System.out.println(day2);
                System.out.println(date);
                //设置日期
                GregorianCalendar calendar2=new GregorianCalendar();
                calendar2.set(Calendar.YEAR,2999);
                calendar2.set(Calendar.MONTH,Calendar.FEBRUARY);
                calendar2.set(Calendar.DATE,3);
                calendar2.set(Calendar.HOUR_OF_DAY,10);
                calendar2.set(Calendar.MINUTE,20);
                calendar2.set(Calendar.SECOND,23);
                printCalendar(calendar2);
                //日期计算
                GregorianCalendar calendar1=new GregorianCalendar(2999,10,9,22,10,50);
                calendar1.add(Calendar.MONTH,-7);//月份减少7
                calendar1.add(Calendar.DATE,7);//增加7天
                printCalendar(calendar1);
                //日历对象和时间对象转化
                Date d=calendar1.getTime();
                GregorianCalendar calendar3=new GregorianCalendar();
                calendar3.setTime(new Date());
            }
            static  void printCalendar(Calendar calendar){
                int year=calendar.get(Calendar.YEAR);
                int month=calendar.get(Calendar.MONTH)+1;
                int day=calendar.get(Calendar.DAY_OF_MONTH);
                int date=calendar.get(Calendar.DAY_OF_WEEK)-1;//星期几
                String week=""+((date==0)?"日":date);
                int hour=calendar.get(Calendar.HOUR);
                int minute=calendar.get(Calendar.MINUTE);
                int second=calendar.get(Calendar.SECOND);
                System.out.printf("%d年 %d月 %d日,星期%s %d:%d:%d\n",year,month,day,week,hour,minute,second);
            }
}

其他常用类

Math类

Math类常用方法

package com.bjsxt;
public class jj {
    public static void main(String[] args) {
    //取整相关操作
        System.out.println(Math.ceil(3.2));
        System.out.println(Math.floor(3.2));
        System.out.println(Math.round(3.2));
        System.out.println(Math.round(3.2));
    //绝对值、开方、a的b次幂等操作
        System.out.println(Math.abs(-6));
        System.out.println(Math.sqrt(9));
        System.out.println(Math.pow(5,2));
        System.out.println(Math.pow(2,5));
    //Math类常用的常量
        System.out.println(Math.PI);
        System.out.println(Math.E);
    //随机数
        System.out.println(Math.random());//[0,1];
    }
}

Random类

package com.bjsxt;
import java.util.Random;
public class jj {
    public static void main(String[] args) {
        Random rand=new Random();
        //随机生成(0,1)之间的double类型的数据
        System.out.println(rand.nextDouble());
        //随机生成int类型允许范围之内的整型数据
        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.print(rand.nextInt(10) );
        //随机生成[20,30)之间的int类型的数据
        System.out.print(20+rand.nextInt(10));
        //随机生成[20,30]之间的int类型的数据(此种计算方法较为复杂)
        System.out.print(20+(int)(rand.nextDouble()*10));
    }
}

File类

File类用来代表文件和目录。

  • java.io.File类:代表文件和目录。
package com.bjsxt;

import java.io.File;
import java.io.IOException;

public class jj {
    public static void main(String[] args) throws IOException {
       /**
       File类创建文件
       */
       File f1=new File("d:/movies/功夫熊猫.mp4");//创建文件
       // File f1=new File("d:\\movie\\/功夫熊猫.mp4");
       File f2=new File("d:/movies");//创建目录

       System.out.println(System.getProperty("user.dir"));//获得项目的路径
        File f3=new File(System.getProperty("user.dir"));
       /**
       使用 File类访问文件或者目录属性
       */
        f1.createNewFile();
        //异常时向外抛出
        System.out.println("File是否存在:"+f1.exists());
        System.out.println("File是否是目录:"+f1.isDirectory());
        System.out.println("File是否是文件:"+f1.isFile());
        System.out.println("File最后修改时间:"+new Date(f1.lastModified()));
        System.out.println("File的大小:"+f1.length());
        System.out.println("File的文件名:"+f1.getName());
        System.out.println("File的目录路径:"+f1.getPath());
    }
}

方法

说明

public boolean exists()

判断File是否存在

public boolean isDirectory()

判断File是否是目录

public boolean isFile()

判断File是否是文件

public boolean lastModified()

返回File最后修改时间

public boolean length()

返回File的大小

public boolean getName()

返回File的文件名

public boolean getPath()

返回File的目录路径

  • 通过File对象创建空文件或者目录(在该对象所指文件或目录不存在的情况下)

方法

说明

creatNewFile()

创建新的File

delete()

删除File对应的文件

mkdir()

创建一个目录 ;中间某个目录缺失,则创建失败

mkdirs()

创建多个目录 ;中间某个目录缺失,则创建该缺失目录

File f4=new File("D:/movies/大陆/学习/编程/尚学堂/高琪");
        File f5=new File("D:/movies/编程/尚学堂/高琪");
        boolean flag1=f4.mkdirs();//目录结构中有一个不存在也没关系;创建整个目录树
        boolean flag2=f5.mkdir();//目录结构中有一个不存在,则不会创建整个目录树
        System.out.println(flag1);//true,创建成功
        System.out.println(flag2);//false,创建失败
        //    f4.delete();f4包含着“高旗”这个目录,只删除目标目录,不然D盘都没有了

枚举

枚举类型的定义包括枚举声明和枚举体。格式如下:

enum 枚举名{
枚举体 (常量列表) }

创建枚举类型

enum Season{
  	SPRING,SUMMER,AUTUMN,WINTER
  	}

所有的枚举类型隐性地继承自java.lang.Enum。枚举实质上还是类!而每个被枚举的成员实质上就是一个枚举类型的实例,他们默认都是public static final修饰的。可以直接通过枚举类型名使用它们。
枚举的使用

package com.bjsxt;
import java.util.Random;
public class St {
    public static void main(String[] args) {
        //枚举遍历
        for(Week k:Week.values()){
            //values()返回的:Week[]里面包含了所有的枚举元素 这是个数组 增强循环
            System.out.println(k);
        }
        Week[] ws=Week.values();
        System.out.println(ws[0]);
        //switch语句中使用枚举
        int a=new Random().nextInt(4);//生成0,1,2,3的随机数
        switch (Season.values()[a]){
            //Season.values()[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;
        }
    }
    /**
     * public static final int SPRING=0;
     * public static final int SUMMER=1;
     * public static final int AUTUMN=2;
     * public static final int WINTER=3;
     */
    enum Season{
        SPRING,SUMMER,AUTUMN,WINTER
    }
    enum Week{
        星期一,星期二,星期三,星期四,星期五,星期六,星期日
    }
}