Java进阶之代码块&常用API

一、代码块

1.1 代码块概述

代码块:在Java中,使用{}括起来的代码,常用于减少代码冗余,优化代码结构。

代码块有三种类型:

  • 构造代码块 此代码块的内容是在每个构造方法执行之前都会执行,优点:减少代码量;缺点:每次构造方法执行之前都会执行。
  • 静态代码块 此代码是在类加载时创建,只会执行一次,用于初始化静态成员。
  • 局部代码块:写在方法体内,用于定义更小范围的变量,控制变量的生命周期
    ,方法执行时被执行。

这三种代码块常用的是静态代码块。

1.2 代码块的使用

案例:彩票35选5和体彩35选7


public class Lottery {
    private int number = 7; //中奖号码个数

    static int[] arr = new int[35];    //定义35个基数

    //构造代码块: 此代码块的内容是在每个构造方法执行之前都会执行。
    {
        Random random = new Random();
        for (int i = 0; i < 35; i++) {
            arr[i] = random.nextInt(35) + 1;
        }
        System.out.println("构造代码块执行了");
	}

    //无参构造
    public Lottery(){  //福彩
        System.out.println("无参构造");
    }

    //有参构造
    public Lottery(int number){  //体彩大乐透
        this.number = number;
        System.out.println("有参构造");
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        //35选7
        Lottery lottery1 = new Lottery();
        //35选5
        Lottery lottery2 = new Lottery(5);
    }
}

测试结果
在这里插入图片描述

public class Lottery {
    private int number = 7; //中奖号码个数

    static int[] arr = new int[35];    //定义35个基数

    //静态代码块:此代码是在类加载时就创建了,只执行一次。用于初始化静态成员。
    static {
        Random random = new Random();
        for (int i = 0; i < 35; i++) {
            arr[i] = random.nextInt(35) + 1;
        }
        System.out.println("构造代码块执行了");
	}

    //无参构造
    public Lottery(){  //福彩
        System.out.println("无参构造");
    }

    //有参构造
    public Lottery(int number){  //体彩大乐透
        this.number = number;
        System.out.println("有参构造");
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        //35选7
        Lottery lottery1 = new Lottery();
        //35选5
        Lottery lottery2 = new Lottery(5);
    }
}

测试结果:
在这里插入图片描述
局部代码块中不能定义所在方法中同名的变量,局部变量和成员变量能同名是因为局部变量在栈中,成员变量在堆中;局部代码块中的变量和方法中的变量都是局部变量,都在栈中,所以不能同名。

public void show(){
        //int a = 20;//变量同名报错
        System.out.println("普通方法执行了");
        //局部代码块:写在方法体内。用于定义更小范围的变量。
        {
            int a = 10;
            System.out.println(a); //10  可以访问
        }
        //System.out.println(a); //不能访问
    }

二、常用API

2.1 Object类

Object类是类层次结构的根。每个类都有 Object作为超类。所有对象,包括数组,实现这个类的方法。

Object只有一个无参构造方法:

public Object(){}

2.1.1 Object常用方法

  • public String toString() 返回对象的字符串表示形式
    对象名默认会调用Object类的toString()方法
    源码:
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

getClass().getName():获取当前包名和类名
hasCode():获得操作系统中生成的一个随机整数
Integer.tohexString(随机整数):把整数转换为16进制的数值
toString()方法源码中只生成地址值,无实际意义,要想输出具体的数据就需要重写

通过ALT+insert,然后选择toString()即可自动生成重写的代码
@Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
  • public boolean equals(Object obj) 默认判断两个对象的地址值是否相等
    源码:
源码中也是通过==比较的两个对象的地址值,要想比较两个对象的内容,需重写
public boolean equals(Object obj) {
     return (this == obj);
}
快捷键:alt + insert ==> equals()

	@Override
    public boolean equals(Object o) {
    	//如果if语句中只有一条语句,则{}可以省略
        if (this == o) return true;
        if (!(o instanceof Student)) return false;

		//都是Student类型,在Student这个类里面可以直接使用私有成员
        Student student = (Student) o;

        if (age != student.age) return false;
        return this.name != null ? this.name.equals(student.name) : student.name == null;
    }
  • public int hashCode() 返回一个对象的哈希代码值
  • public final Class getClass() 返回该 Object运行时的类

2.1.2 Object类-native方法

public native int hashCode();获得操作系统中生成的一个随机整数

native修饰方法的作用:

  • 表示能够使用Java语言调用其它语言的代码。比如调用 C或C++。

当需要访问C或C++的代码时,或者访问操作系统的底层语言代码时,可以使用本地方法实现,这意味着Java可以和其它的编程语言进行交互。

2.2 Date类

java.util.Date :Date类代表了一个特定的时间,精度为毫秒。

2.2.1 构造方法

默认时间是当前系统时间
Date date = new Date();

使用一个从197011日零时开始到time毫秒值构造的一个Date对象
Date date = new Date(time);

Date date = new Date(1000);
System.out.println(date);
打印结果:Thu Jan 01 08:00:01 CST 1970

2.2.1 常用成员方法

Date类的成员方法大部分已过时,目前还在用的成员方法有两个:

获取从197011日零时到此Date对象所表示时间之间的毫秒值
public long getTime()

设置此Date对象的毫秒值。此方法将改变此Date对象所表示的时间。
public void setTime(long time)
public class DemoDate {    
	public static void main(String[] args) {      
	 //1.Date()       
	 Date date1 = new Date();       
	 System.out.println("date1=" + date1); 
	 System.out.println(date1.getTime());
	 
	 //2.Date(long m):     
     Date date2 = new Date(1000 * 3600 * 24); 
     System.out.println(date2);//Fri Jan 02 08:00:00 CST 1970
     date2.setTime(date1.getTime());
     System.out.println("date2=" + date2);
     }
}

2.3 DateFormat类

java.text.DateFormat(类):对日期/时间进行格式化,是一个抽象类,不能被实例化。

使用方式:使用SimpleDateFormat子类

2.3.1 构造方法

用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat
SimpleDateFormat(String pattern) 
y:年
M:月
d:日
H:时
s:分
m:秒

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");

2.3.2 成员方法

  • public String format(Date date) 将Date对象转换为指定格式的String对象
  • public Date parse(String s) 将String对象转换为Date对象

2.4 Calendar类

java.util.Calendar类表示一个“日历类”,可以进行日期运算,它是一个抽象类,不能实例化,一般通过子类GregorianCalendar使用。

有两种方式可以获取GregorianCalendar对象:

  • 直接创建GregorianCalendar对象;
Canlendar now = new GregorianCalendar
  • 通过Calendar的静态方法getInstance()方法
Calendar.getInstance()//返回一个GregorianCalendar

2.4.1 成员方法

  • public static Calendar getInstance() 获取一个它的子类GregorianCalendar对象

  • public int get(int field) (field参数表示字段)获取某个字段的值

      可以使用Calender中定义的常量来表示:
      Calendar.YEAR : 年
      Calendar.MONTH :月(0~11)
      Calendar.DAY_OF_MONTH:月中的日期
      Calendar.HOUR:小时
      Calendar.MINUTE:分钟
      Calendar.SECOND:秒
      Calendar.DAY_OF_WEEK:星期(从星期天开始,星期六结束)
    
  • public void set(int field,int value) 设置某个字段的值

  • public void add(int field,int amount) 为某个字段增加/减少指定的值

  • public boolean after​(Object when) 判断当前时间是否在参数时间之后

  • public boolean before​(Object when) 判断当前时间是否在参数时间之前

  • public final void setTime​(Date date) 使用给定的Date设置此日历的时间

2.5 BigDecimal类

java.math.BigDecimal(类):做浮点运算的,可以防止精度丢失的问题

构造方法:

BigDecimal(String str):使用一个数字字符串构造一个BigDecimal对象

成员方法:

  • BigDecimal add(BigDecimal b):当前对象 + 参数对象,返回一个新的BigDecimal;
  • BigDecimal subtract(BigDecimal b):当前对象 - 参数对象,返回一个新的BigDecimal
  • BigDecimal multiply(BigDecimal multiplicand):当前对象 * 参数对象,返回一个新的BigDecimal
  • BigDecimal divide(BigDecimal divisor) 除数,返回一个新的BigDecimal
  • BigDecimal divide(BigDecimal divisor,int roundingMode) 除数,roundingModez表示进位,如roundingMode=5,则表示4舍5入。
  • BigDecimal divide(BigDecimal divisor,int,scale,int roundingMode) 除数,roundingModez表示进位,如roundingMode=5,则表示4舍5入; scale表示要保留的小数位数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值