03-JavaSE【static、枚举、内部类、常用API】

一、static变量

01、静态:static
  • 静态变量

    • 静态的意义:在程序中类加载时,把静态的成员加载到方法区下的静态区域中

    • 静态变量的定义:

      • static String 变量名;  //静态变量都有默认值
        
    • 静态变量的使用:

      • 类名.静态成员变量="值";//赋值
        数据类型 变量名 = 类名.静态成员变量;//取值
        
    • 静态变量的特点:

      • 共享数据(方法区中仅有一份)
  • 静态方法

    • 静态方法的定义:

      • public static 返回值类型 方法名(参数){
            //
        }
        
    • 静态方法的使用:

      • 类名.静态成员方法(实参);
        
    • 静态方法使用时的特点:

      • 当静态方法中要访问外部的变量或调用外部的方法时:
        • 变量,必须是静态变量
        • 方法,必须是静态方法
      • 非静态方法:可以访问非静态内容、也可以访问静态内容
02、工具类:
  • 在开发中,多数程序都需要使用到某个功能或业务时,可以把共同要使用的内容抽取为:工具类
    • 在Java中:Arrays(针对数组的工具类)、Math(针对数学运算的工具类)
    • 特点:
      • 静态方法
      • 不让实例化(私有的构造方法)
03、静态方法的特点:
  • 静态方法,只能访问静态内容(静态成员变量、静态成员方法)

非静态方法:

  • 可以访问非静态内容

  • 可以访问静态内容

二、内部类

  • 成员内部类

    • 语法格式:

      • public class OuterClass{
            
            private String name;
            public void method(){
                
            }
            
            //成员内部类
            class InnerClass{
                
            }
        }
        
    • 实例化成员内部类:

      • 外部类.内部类  对象 = new 外部类().new 内部类();
        
  • 匿名内部类

    • 语法格式:

      • new 父类/接口(){
            //重写父类/接口中方法
        }
        
      • 匿名内部类的本质:没有名字的子类对象

    • 作用:

      • 简化代码书写
        • 可以省略子类的创建
    • 应用方式:

      • 1、当调用父类/接口中的方法一次时

        • new 接口(){
              //重写方法
              public void method(){
                  ///
              }
          }.method();
          
      • 2、作为参数

        • //方法
          public void show(InterA  a){
              a.method();
          }
          
          //调用方法
          show(new Inter(){
             public void method(){
                 
             } 
          });
          
      • 3、作为返回值

01、成员内部类
  • 在一个类中包含了另一个类,内部类书写在成员位置上

  • 实例化:

    • 外部类名.内部类名  对象 = new 外部类().new 内部类();
      
      //内部类访问外部类中的成员:
      外部类名.this.成员
      
02、局部内部类

外部类中,方法外定义的类(略)

匿名内部类
  • 作用:简化程序中的代码书写(可以省略子类的创建)

  • 语法:

    • new 父类/接口(){
          //重写父类/接口中的方法
      }
      
  • 应用场景:

    • 调用方法一次

      • new 接口(){
            //重写方法
        }.重写后的方法();
        
    • 作为参数

      • public void method(Inter a){
            
        }
        
        method(new Inter(){
            //重写接口中的方法
        });
        
    • 作为返回值

      • public Inter get(){
            return new Inter(){
              //重写方法  
            };
        }
        
        
匿名内部类实例
interface HelloInter{
    public abstract void sayHello(String name);
}
//实现类
class HelloInterImpl implements HelloInter{
    //重写sayHello方法
    public void sayHello(String name){
        ///
    }
}
//实例化 实现类
HelloInterImpl hello = new HelloInterImpl();
hello.sayHello();

匿名内部类: 简化代码 接口、抽象类的子类实例化

new HelloInter{
    //重写sayHello方法
    public void sayHello(String name){
        ///
    }
}.sayHello("张三");
public void showHello(HelloInter helloInter){
    
    helloInter.sayHello("");
}


HelloInterImpl hello = new HelloInterImpl();//实例化接口的实现类

showHello( hello);//把子类对象传递给方法中


showHello( new HelloInter(){
    //重写
    public void sayHello(){
        
    }
});

三、代码块

01、静态代码块
  • 语法格式:

    • public class{
          static{
          //静态代码块
          }
      }
      
  • 特点:

    • 随着类的加载而执行,仅执行一次(类只会被JVM加载一次)
  • 应用场景:

    • 给静态成员初始化值
      • 在没有创建对象之前,可以提前初始化一些数据
02、构造代码块
  • 语法格式:

    • public class{
          private String name;
          public void setName(String name){
              
          }
          
          {
              //构造代码块
          }
      }
      
  • 特点:

    • 当创建对象时,JVM会自动调用构造方法执行,而每一次执行构造方法前会先执行:构造代码块
  • 应用场景:

    • 把多个构造方法中共性的代码,抽取到构造代码块中(通常用于非静态成员变量初始化)
03、局部代码块
  • 语法格式:

    • static{
          //局部代码块
          {
              
          }
      }
      
  • 作用:限定作用域

四、枚举Enum

  • 语法格式:

    • public enum 枚举名{
          成员1,成员2,..;
      }
      
  • 使用枚举:

    • 枚举名.成员;
      
  • 枚举的应用场景:

    • 当程序中存在固定范围的数据时,可以使用枚举来定义
      • 例:性别(男、女)

五、常用API

Date类

使用类来描述事物:

public class 学生{
    //属性:
    String 姓名;
    int  年龄;
    double 成绩;
    
    java.util.Date  出生日期; //2020-2-20
   
}

结论: 当程序中存储日期数据时,使用Date类型

DateFormat类

作用:

  • 把String类型 转换为 Date类型 : 解析
  • 把Date类型 转换为 String类型 : 格式化

java.text.DateFormat类:

  • 是一个抽象类(不能实例化)
  • 通常是使用子类:java.text.SimpleDateFormat类

实例化方式:

//多态的格式:
DateFormat df = new SimpleDateFormat("日期模式字符串")
    
//日期模式:
    y:年
    M:月
    d:日
    H:(24小时制)
    m:分
    s:秒
        
 日期模式示例:
        "yyyy-MM-dd"      对应格式: 2020-03-20
        "HH:mm:ss"       对象格式:16:17:20
        "yyyy/MM/dd HH:mm:ss"    2020/03/20 16:17:20   

DateFormat中的常用方法:

  • Date => String

    • public String format(Date date)
      
  • String => Date

    • public Date parse(String strDate)
      
Calendar类

java.util.Calendar类:

  • 是一个抽象类(不能实例化)
  • 使用Calendar类中的功能,代替Date类中的过时功能

Calendar类的实例化方式:

  • 直接使用子类实例化

    • Calendar c = new GregorianCalendar();
      
  • 使用静态方法:getInstance()

    • Calendar  c = Calendar.getInstance();
      //本质:getInstance()方法的底层代码: new GregorianCalendar()
      

Calendar类中常用方法:

  • public int get(int field) //field表示的是一个字段值(在Calendar中是一个静态常量值)

    • //获取日历对象中的:年、月
      Calendar c = Calendar.getInstance();
      
      int year = c.get( Calendar.YEAR );//获取年
      int month = c.get(  Calendar.MONTH  );//获取月
      
  • public void set(int field , int value)

    • //把日历中的年份设置为:2019年
      Calendar c = Calendar.getInstance();
      
      c.set(  Calendar.YEAR , 2019  );
      
  • public void add(int field , int value)

    • //在当前日期的基础上,向后+3天
      Calendar c = Calendar.getInstance();
      
      c.add( Calendar.DAY_OF_MONTH ,  3);//向后+3天
      
      c.add( Calendar.DAY_OF_MONTH ,  -3);//向前-3天
      
Math类

Math类:

  • 类:工具类。 针对数学运算的工具类。封装大量的静态方法
  • 实例化: 不需要实例化。 直接使用类名调用方法
  • 常用方法:
    • 求最值:max() 、 min()
    • 四舍五入:round()
    • 向上/向下取整

示例:

public class MathDemo1 {
    public static void main(String[] args) {
        System.out.println("最大值:"+Math.max(21,20));
        System.out.println("最小值:"+Math.min(21,20));

        System.out.println("四舍五入:"+Math.round(3.76));


        System.out.println(Math.ceil(3.01));
    }
}
System类

类: java提供的和系统相关的工具类。

实例化: 不需要实例化。 直接使用类名调用方法

常用方法:

  • currentTimeMillis() //获取当前系统时间的毫秒值

示例:

public class SystemDemo1 {
    public static void main(String[] args) {

        long startTime = System.currentTimeMillis();

        int count=0;
        for (int i = 0; i < 100000; i++) {
         if(i%2==0){
             count++;
         }
        }
        long endTime =System.currentTimeMillis();

        System.out.println("执行了:"+(endTime-startTime)+"毫秒");
    }
}

六、总结

  • static

    • 是java中的修饰符号,可以用来修饰:变量、方法
      • 修饰变量:静态变量
      • 修饰方法:静态方法
    • 静态的特点:
      • 随着类的加载而出现在内存的方法区中(静态区域下)
      • 静态内容在内存中只存在一份(共享) 【不论创建多个对象,都只有一个】
    • 静态在开发中的应用:
      • 静态常量工具类
      • 静态方法工具类
  • 代码块

    • 静态代码块

      • 特点:随着类的加载而执行(在加载类时执行的代码)

      • 作用:通常用于对静态内容初始化(静态变量初始化值)

      • 格式:

        • public class{
              static{
                  
              }
          }
          
    • 构造代码块

      • 特点:在构造方法执行之前,会执行(每一个构造方法执行时,都会先调用构造代码块)

      • 作用:多个构造方法中共性的内容,抽取到构造代码块中(非静态变量初始化)

      • 格式:

        • public class{
              private String name;
              {
                  
              }
              public(){
                  
              }
          }
          
    • 局部代码块

  • 枚举

    • 作用:用来对程序中固定范围的数据进行约束

    • 定义:

      • public  enum 枚举名{
            成员1,成员2,...;
        }
        
    • 使用:

      • 枚举名.成员名;
        
  • Object类

    • 类: Object类是Java体系中的最顶层父类(所有的类都直接或间接继承Object类)

    • 实例化: public Object()

    • 常用方法:

      • public String toString() //把对象转换为字符串
      • public boolean equals(Object ) //比较两个对象是否相同(比较的是内存地址)
    • Object类中equals(Object obj) 和 Objects工具类中的equals(Object obj1 , Object obj2) 的区别:

    • //调用Object类中的equals
      Student stu = null;
      stu.equals( new Student("张三",20) );//运行结果:报错。  空指针异常
      //结论:Object类中的equals方法会出现空指针异常
      
      
      //Objects类中的equals
      Student stu = null;
      
      Objects.equals( stu , new Student("张三",20) );//可以正常运行,不会引发 空指针异常
      //运行结果:false
      
  • Date类

    • 类: 在java程序中用来存储日期数据的类型
    • 实例化: public Date() 、 public Date(long time)
    • 常用方法:
      • void setTime(long time)
      • long getTime()
  • DateFormat类

    • 类: 用来实现String类型和Date类型之间互相转换。抽象类(不能实例化)
    • 实例化: DateFormat df = new SimpleDateFormat(“日期模式字符串”)
    • 常用方法:
      • String format(Date date) // Date => String
      • Date parse(String strDate) // String => Date
  • Calendar类

    • 类: 日历类。 用来代替Date类中的已过时的方法。抽象类
    • 实例化: Calendar c = Calendar.getInstance();
    • 常用方法:
      • void set(int field , value) //给日历类对象中的数据设置值 (覆盖值)
      • int get( int field) //获取日历类对象中的数据值
      • void add( int field , int value) //修改日历类对象中的数据值(原值上加或减)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值