02- 常用类1

枚举

需求引入

商家卖馅饼

买家买馅饼

public class Pie {
    String name;
    double price;
    public Pie() {
    }
    public Pie(String name, double price) {
        this.name = name;
        this.price = price;
    }
}
// 客户类
Pie pie = new Pie("龙肉",10);  // 去执行的 Pie 的有参构造方法
// 不能被自定义的创建对象

将构造方法私有化, 不允许外界创建对象

public class Pie {
    /* 枚举的本质 */
    public static final Pie pie1 = new Pie("牛肉",5);
    public static final Pie pie2 = new Pie("里脊肉",4);
    public static final Pie pie3 = new Pie("鸡肉",3);
    public static final Pie pie4 = new Pie("韭菜鸡蛋",2);
    
    String name;
    double price;
    private Pie() {
    }
    private Pie(String name, double price) {
        this.name = name;
        this.price = price;
    }
}

把构造私有化 , 不允许外界创建对象, 在类的内部自己创建对象

外界可以调用类中已经创建好的对象, 仅仅是希望外界访问,但是不允许修改

最好把该类对象 创建为 public static final

星期, 人的性别

public class Gender {
    public static final Gender MALE = new Gender("男");
    public static final Gender FEMALE = new Gender("女");

    String name; // 性别名称
    private Gender() {
    }

    private Gender(String name) {
        this.name = name;
    }
}
public class Person {
    String name;
    int age;
    // 给人设为固定性别
    Gender gen;
}

星期

public class Week {
    public static final Week MON = new Week("星期一");
    public static final Week TUE = new Week("星期二");
    public static final Week WED = new Week("星期三");
    // ...

    String name;
    private Week(String name) {
        this.name = name;
    }
}

简化为

public Enum Week{
    MON,TUE,WED // ,...
}

概念

由一组固定的常量组成的类型

比如 中国 34个省

一年有4 个季节, 12 个月份

一周有7 天

公司 中有一些领导者 一般也不会变动

案例

使用枚举输出每周 日程安排

public enum Week {
    MON,TUE,WED,THU,FRI,SAT,SUN
    //相当于
    // public static final Week MON = new Week();
}
public class WeekDemo {
    public static void main(String[] args) {
        weekTest(Week.MON);
    }
    public static void weekTest(Week day){
        switch(day){
            //  MON,TUE,WED,THU,FRI,SAT,SUN
            case MON :
            case TUE :
            case WED :
            case THU :
            case FRI :
                System.out.println("努力工作, 天天向上!");
                break;
            case SAT :
            case SUN :
                System.out.println("周末好好休息!");
                break;
                default:
                    System.out.println("填写错误!");
                    break;

        }
    }
}

优势

  • 可以使代码更易维护, 有助于确保为变量指定的值, 是合法的, 期望的
  • 枚举类型 是对一组常量类型的简化
  • 代码更清晰, 允许使用描述性的名称来标识数据

拓展

枚举也可以拥有参数

public enum Pie {
    P1("牛肉"),P2("猪肉");

    String name;
    private Pie() { }
    private Pie(String name){
        this.name = name;
    }
}

API

全称 Java Application Programming Interface

​ java 应用 编程 接口

java 预先定义的运行库集合, 程序员可以直接使用这些打包好的类和接口

API 编程文档 帮助文档

包装类

java 是一门纯面向对象的语言 , 基本数据类型也是对象

在实际开发中, 对基本数据类型的操作非常多, 按照对象的方式操作, 很多的不方便的地方, 把基本数据类型从对象中抽取出来, 简化了书写方式, 以方便开发

基本数据类型所对应的对象 就是 该基本数据类型的包装类

基本数据类型包装数据类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
int i = 10;  // 常量池中保存
Integer in = new Integer(10); // 堆中保存

包装类用途

用在泛型上

使用集合的时候, 集合只能存储引用数据类型 对象

List<int> list = new  ArrayList<int>(); // 错误, 集合只能存储引用数据类型
list.add(10)

List<Integer> list = new  ArrayList<Integer>(); // 正确, 集合只能存储引用数据类型

包装类 是一个对象, 对象有属性和方法

基本数据类型, 无法进行方法操作, 只有转换成为包装类型, 才可以调用方法

包装类和基本数据类型的转换

基本数据类型 ==> 包装类

int i = 10;
// 使用构造方法
Integer in = new Integer(i)

// 使用静态方法valueOf(int 类型)
Integer in = Integer.valueOf(i);

包装类==> 基本数据类型

Integer in = Integer.valueOf(100);
int i = in.intValue();

自动装箱, 自动拆箱

Integer in = Integer.valueOf(100);
int i = in;

int a = 100;
Integer b = a;

Math

工具类, 包含基本的数学运算和几何运算

方法名说明
abs()绝对值
ceil(3.14)返回大于或等于参数的最小
(最接近负无穷大) double整数值
floor(3.14)返回小于或等于参数的最大
(最接近正无穷大) double值,等于一个数学整数。
max/min(double a, double b)返回两个 double值中的较大/较小值
pow(a,b)a^b a的b次幂
random返回一个 0 - 1 之间的随机数
round四舍五入

Scanner

判断的方法

异常的问题

判断用户输入的内容是否是某种数据类型

在键盘录入数据的时候, 使用nextInt() 只能获取整数类型, 一旦输入非整数, 抛出异常

java.util.InputMismatchException

public class Demo1_Scanner {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int [] arr = new int [3];
        // 使用增强型for 遍历数组
        for(int i = 0 ; i < arr.length ; i++){
            System.out.println("请输入:");
           arr[i] = input.nextInt();
        }

        System.out.println(Arrays.toString(arr));
    }
}

如何避免抛出该异常, 使用if 判断用户输入的是否是整数

boolean hasNestInt()

public class Demo1_Scanner {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int [] arr = new int [3];
        // 使用增强型for 遍历数组
        for(int i = 0 ; i < arr.length ; i++){
            System.out.println("请输入:");
            if(input.hasNextInt()){ // 用户输入的数据是否为整数
                arr[i] = input.nextInt();
            }else{
                System.out.println("输入错误");
            }

        }

        System.out.println(Arrays.toString(arr));
    }
}

发现问题

如果用户在该数组的遍历过程中, 输入 10,20,a 结果是10,20 正常, a 无法添加到数组

但是先输入的是 “a” , 程序的运行结果为

请输入:
a
输入错误
请输入:
输入错误
请输入:
输入错误
[0, 0, 0]

hasNextInt() 只管判断, 没有其他操作 导致的结果 a 一直存在于输入区

需要操作的事情 是一旦发现一个数不是整数, 需要把该数移除

if(input.hasNextInt()){ // 用户输入的数据是否为整数
    arr[i] = input.nextInt();
}else{
    System.out.println("输入错误");
    input.next(); // 无论用户输入的是什么, 都可以清理掉
}

next() 和 nextline() 的区别

public class Demo1_Scanner1 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        String username;
        String password;

        System.out.println("请输入用户名:");  
        username =  input.next();  // 尼古拉斯 志强
        System.out.println("请输入密码:");
        password =  input.next();

        System.out.println(username + "\t"+password); // 尼古拉斯	志强
    }

next() 会把空格前后 当成多次输入 来显示

nextLine(); 可以把空格当成字符串的一部分来显示

Random

构造() 构造(参数)区别

// 参数 种子,随机数要根据种子生成
Random ran1 = new Random();
Random ran2 = new Random();
for(int i = 0 ; i < 5 ; i++){
    System.out.println("ran1: "+ran1.nextInt());
    System.out.println("ran2: "+ran2.nextInt());
}

使用种子, 类似于使用方案, 两个随机数类, 如果种子相同, 方案相同, 依次的随机数也是相同的

nextInt() 和 nextInt(参数)

nextInt() int 的取值范围内 随机产生

nextInt(参数) 随机生成数字, 满足条件 0 <= 随机数 < 参数

System

属性

Sout  ==> 
System.out.println()
System.err.println()

方法

arrayCopy

int [] arr1 = {1,2,3,4,5};
int [] arr2 = new int[10];
System.arraycopy(arr1,3,arr2,0,2);
System.out.println(Arrays.toString(arr2));
src - 源数组。 
srcPos - 源数组中的起始位置。 
dest - 目标数组。 
destPos - 目的地数据中的起始位置。 
length - 要复制的数组元素的数量。 

currentTimeMillis()

返回当前时间(以毫秒为单位)。 
在1970年1月1日UTC之间的当前时间和午夜之间的差异,以毫秒为单位。 
long time = System.currentTimeMillis();
System.out.println(time/1000/60/60/24/365);

exit(int status)

终止当前运行的Java虚拟机。 该参数作为状态代码; 按照惯例,非零状态码表示异常终止。

gc()

运行垃圾回收器

程序而言 , 没有用的

堆内存中, 没有被变量指向的对象 就是垃圾对象

自动垃圾回收机制

getProperties()

System.out.println(System.getProperties());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值