Java&day03

1.权限修饰符【记住大小顺序】

  • 四个权限修饰符

    public > protected > 空的 > private

  • 使用范围

本类中本包中不同包的子类中不同包中
public
protected
空的
private
  • 代码演示
package com.a;
public class AAA {
    //public
    public void method1(){
    }
    //protected
    protected void method2(){
    }
    //空的
    void method3(){
    }
    //private
    private void method4(){
    }
    public void method(){
        method1();
        method2();
        method3();
        method4();
    }
}

public class BBB {
    public void method(){
        //创建对象
        AAA a = new AAA();
        a.method1();
        a.method2();
        a.method3();
        //a.method4();   //private不能用
    }
}

package com.a;
import com.itheima_01.AAA;
public class CCC extends AAA {
    public void method(){
        method1();
        method2();
        //method3();  //空的
        //method4();  //private
    }
}
public class DDD {
    public void method(){
        //创建对象
        AAA a = new AAA();
        a.method1();
        //a.method2();  //protected
        //a.method3();  //空的
        //a.method4();  //private
    }
}

2.代码块

​ 代码块就是一对儿大括号,不用调用能自动执行。

2.1静态代码块【重点】
  • 格式:

    类中方法外:
        static{
            静态代码块;
        }
    
  • 执行时机:

    • 在当前类第一次被使用时会自动执行,并且是第一个执行,只执行一次
  • 使用场景:

    • 有一些需要在整个类的最开始执行的代码就可以放在静态代码块中。
2.2构造代码块
  • 格式:

    类中方法外:
        {
            构造代码块;
        }
    
  • 执行时机:

    • 在每个构造方法执行之前先执行一次构造代码块;
  • 使用场景:

    • 如果所有的构造方法都有相同的代码,就可以提取到构造代码块中,减少代码重复。
2.3局部代码块
  • 格式:

    在方法中:
    	{
            局部代码块;
    	}
    
  • 作用:

    • 减小变量的作用域,为了节约内存。但是现在完全没用。
2.4执行顺序演示
package com.a;
public class Student {
    String name;
    int age;
    static String country = "中国";

    //静态代码块
    static{
        System.out.println("静态代码块");
    }

    //构造代码块
    {
        System.out.println("构造代码块");
    }
    //空参构造
    public Student(){
        System.out.println("空参构造");
    }

    //有参构造
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("有参构造");
    }
}

public class Test01 {
    public static void main(String[] args) {
        Student s = new Student();
        Student s2 = new Student("张洒",23);
        System.out.println(Student.country);
    }
}

/*
    静态代码块
    构造代码块
    空参构造
    构造代码块
    有参构造
    中国
 */

3.Object类

​ Object是所有类的父类,所以类都继承了Object的方法。

1.1 equals()方法【重点】
  • 作用:

    • 判断两个对象是否相同。
  • 回顾==号:

    int a = 10;
    int b = 10;
    String c = new String("abc");
    String d = new String("abc");
    
    
    System.out.println(a == b);  //true
    System.out.println(c == d);  //false
    
    ==比较基本类型时,比较的是值是否相同
    ==比较引用类型时,比较的是地址值是否相同
    
  • 查看equals()源码:

    public boolean equals(Object obj) {
        return (this == obj);
    }
    
    Object中的equals方法判断的也是地址值。
    
  • idea重写equals()方法的解析:

    public boolean equals(Object o) {
            //如果地址值相同,说明成员变量值肯定相同
            if (this == o) {
                return true;
            }
            //判断两个对象是否是同种类型
            if (o == null || this.getClass() != o.getClass()) {
                return false;
            }
            //向下转型
            Student s = (Student) o;
        	//判断年龄和姓名
            return this.age == s.age &&
                    Objects.equals(this.name, s.name);
                    //this.name.equals(s.name);
        }
    
1.2Objects工具类

​ Objects是Object的一个工具类

  • Objects的equals()源码解析:

    • 作用:

      • 判断两个引用类型对象的内容是否相同
    • 源码:

      public static boolean equals(Object a, Object b) { 
          return (a == b) || (a != null && a.equals(b));
      }
      
    • 优点:

      • 效率较高
      • 避免空指针异常
1.3 toString()方法【重点】
  • 作用:

    • 把引用类型变成一个字符串
  • 输出语句:

    • 在输出语句中,在打印对象时,会默认调用类的toString()方法。
  • 查看源码:

    public String toString() {
        //     包名  + 类名  + "@"  + 地址值的十六进制形式 
        return this.getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    
  • 使用idea完成方法重写:

    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    
1.4 native方法

​ 被native所修饰的方法叫本地方法。

​ 这些方法的底层用到了一些别的语言,比如说C语言,源码无法在java中显示,所以这些方法不能查看源码。

4.日期Date类【重点】

  • 概述:
    • java.util.Date
    • Date在java中表示时间,表示时间的单位是毫秒。
  • 构造方法:
方法说明
public Date()用当前时间创建时间对象
public Date(long date)用毫秒值创建时间对象,毫秒值代表距离基准时间的差值时间

​ 标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)

  • 示例代码:

    public class Test01 {
        public static void main(String[] args) {
            //Date的构造方法
    
            //new Date():代表当前时间
            Date d = new Date();
            System.out.println(d);
    
            //new Date(long date):代表距离基准时间的差值时间
            //1970年1月1日8点0分1秒
            Date d2 = new Date(1000);
            System.out.println(d2);
    
            //1970年1月1日9点0分0秒
            Date d3 = new Date(1000*60*60);
            System.out.println(d3);
        }
    }
    
  • 常用方法:

方法说明
getTime()获取时间的毫秒值
setTime(long time)设置时间的毫秒值
before(Date date)判断在某个时间之前
after(Date date)判断在某个时间之后
  • 示例代码:
package com.a;

import java.util.Date;
public class Test02 {
    public static void main(String[] args) {
        //创建对象
        Date d = new Date();
        Date d2 = new Date();

        //getTime()
        //获取时间的毫秒值
        long time = d.getTime();
        System.out.println(time);   //1597027887127      1970年1月1日到现在的毫秒值差值

        //setTime(long  time)
        //设置时间的毫秒值
        d.setTime(235252352377L);
        System.out.println(d);

        //判断
        System.out.println(d.after(d2)); //1977是否在2020之后    false
        System.out.println(d.before(d2)); //1977是否在2020之前   true

    }
}

5.日期格式化DateFormat类【重点】

  • 概述:

    • DateFormat是日期格式化类,能够把日期转成不同格式的字符串,方便阅读。
  • 创建对象:

    • 因为DateFormat是一个抽象类,所以我们要创建的是他的子类对象叫SimpleDateFormat
     SimpleDateFormat sdf = new SimpleDateFormat("日期格式");
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
     
     	格式:
     		y 		年
     		M       月
     		d       日
     		H       时
     		m       分
     		s       秒
    
  • DateFormat常用方法:

方法说明
String format(Date date)把日期按照指定格式转成字符串
Date parse(String s)把字符串按照指定格式转成日期
  • 代码演示
package com.a;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test03 {
    public static void main(String[] args) throws ParseException {

        //SimpleDateFormat构造方法
        //  2020年08月10日 11时07分24秒
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");


        Date d = new Date();
        System.out.println(d);

        //String format(Date date)
        //把日期按照指定格式转成字符串
        String s = sdf.format(d);
        System.out.println(s);


        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
        //Date parse(String s)
        //把字符串按照指定格式转成日期
        String str = "2000/07/04";
        //parse()这个方法会报错,叫异常。解决办法:在方法上按alt+enter enter
        Date d2 = sdf2.parse(str);    
        System.out.println(d2);

        //ParseException 解析异常,如果格式不匹配会出现
    }
}
练习一:字符串日期的格式转化

​ 有一个字符串“2000年01月01日”,要转成“2000/01/01“的格式的字符串

package com.a;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test04 {
    //练习一
    public static void main(String[] args) throws ParseException {
        //字符串
        String s1 = "2000年07月08日";

        //日期格式化
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日");
        Date date = sdf1.parse(s1);


        //日期格式化
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
        String s2 = sdf2.format(date);

        //要转成"2000/01/01"
        System.out.println(s2);
    }
}
练习二:求你来到这个世界多少天?

​ 键盘输入一个字符串类型的时间,打印来到世界多少天。

​ 比如:
​ 请输入你的出生日期:

​ 2000/01/01

​ 你来到这个世界7300天!

package com.a;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Test05 {
    public static void main(String[] args) throws ParseException {
        //键盘输入一个字符串生日
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入出生日期:(格式:xxxx/xx/xx)");
        String s = sc.nextLine();

        //转成Date类型
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        Date birthDate = sdf.parse(s);
        
        //现在时间
        Date nowDate = new Date();

        //获取毫秒值
        long time1 = birthDate.getTime();
        long time2 = nowDate.getTime();

        //计算
        System.out.println("你来到这个世界"+ (time2-time1)/1000/60/60/24 +"天啦!");
    }
}

6.日历Calendar类【重点】

  • 概述:
    • Calendar日历类把和时间相关的所有的值都变成了一个字段,可以方便的操作各个字段。
    • Date对时间的操作只能操作毫秒值。
  • 创建对象:
    • 方式一:直接new Calendar的子类对象叫GregorianCalendar
    • 方式二:静态方法Calendar.getInstance();[上课用]
  • 常用方法:
方法说明
int get(int field)获取某个字段的值
void set(int field,int value)设置某个字段的值
void add(int field,int amount)偏移某个字段的值(在原有的基础上加减)
setTime(Date date)把Date对象的时间赋值给Calendar
  • 可以使用Calender中定义的常量来表示:

  • 示例代码:

    • get方法演示
package com.a;
  
  import java.util.Calendar;
  
  public class Test06 {
      //创建Calendar对象
      public static void main(String[] args) {
          //创建对象
          Calendar c = Calendar.getInstance();   //默认代表当前时间
  
          //get()
          //获取年   1 = YEAR
          System.out.println(c.get(Calendar.YEAR));         //2020
          //获取月
          System.out.println(c.get(Calendar.MONTH)+1);      //8   特殊:Calendar类中月份保存的是0-11
          //获取日
          System.out.println(c.get(Calendar.DAY_OF_MONTH)); //10
          //小时
          System.out.println(c.get(Calendar.HOUR_OF_DAY));
          //分钟
          System.out.println(c.get(Calendar.MINUTE));
          //秒
          System.out.println(c.get(Calendar.SECOND));
  
          //星期
          int n = c.get(Calendar.DAY_OF_WEEK);
          System.out.println(week(n));  //星期一 出来的是2  特殊:美国周日是一周的第一天
                                                            // 1代表周日   2代表周一
      }
  
  
      //把数字转成对应的星期
      public static String week(int n){
          String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
          return arr[n];
      }
  }
  • set()和add()方法演示
package com.a;
  
  import java.util.Calendar;
  
  public class Test07 {
      public static void main(String[] args) {
  
          //创建对象
          Calendar c = Calendar.getInstance();
  
          //set()  :设置某个字段的值
  
          //把年设置为2021年
          c.set(Calendar.YEAR,2021);
          //把月设置为5月
          c.set(Calendar.MONTH,4);
          //把日设置成20日
          c.set(Calendar.DAY_OF_MONTH,20);
  
          //把年减10年
          c.add(Calendar.YEAR,-10);
          //把日加20天
          c.add(Calendar.DAY_OF_MONTH,20);
  
          //获取
          System.out.println(c.get(Calendar.YEAR) +"年"+(c.get(Calendar.MONTH)+1) + "月" + c.get(Calendar.DAY_OF_MONTH) + "日");
      }
  }
  • setTime(Date date)方法演示
  
  public class Test08 {
      public static void main(String[] args) throws ParseException {
  
          String str = "2000/07/04";
          SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
          //Date parse(String s)
          //把字符串按照指定格式转成日期
          Date d2 = sdf2.parse(str);    //parse()这个方法会报错,叫异常。解决办法:在方法上按alt+enter enter
  
          Calendar c = Calendar.getInstance();
  
          //setTime(Date date) :把Date的时间设置给日历对象
          c.setTime(d2);
  
          //c他就代表了2000年7月4日
      }
  }

7.Math类

  • 概述:
    • Math代表数学类,和数学运算相关的方法都在这个类中。这个类的所有成员都是静态成员。
    • 这个类不能创建对象。
  • 常用方法:
方法说明
static int abs(int a)绝对值
static double ceil(double a)向上取整
static double floor(double a)向下取整
static double pow(double a, double b)a的b次方
static long round(double a)四舍五入
  • 示例代码:
public class Test01_Math {
    public static void main(String[] args) {
        //圆周率
        System.out.println(Math.PI);

        //static int abs(int a)
        //绝对值
        System.out.println(Math.abs(-4));   //4

        //static double ceil(double a)
        //向上取整
        System.out.println(Math.ceil(3.2));  //4.0

        //static double floor(double a)
        //向下取整
        System.out.println(Math.floor(3.8)); //3.0

        //static double pow(double a, double b)
        //a的b次方
        System.out.println(Math.pow(2,3));   //8.0

        //static long round(double a)
        //四舍五入
        System.out.println(Math.round(4.45)); //4
    }
}

8.System类【重点】

  • 概述:
    • System类保存了一些系统相关的方法。所有的方法也都是静态的。
    • 也不能创建对象。
  • 常用方法:
方法说明
static void exit(int status)退出虚拟机
static long currentTimeMillis()获取当前时间毫秒值
static void arrayCopy(五个参数)数组内容拷贝
  • 示例代码:
package com.a;

import java.util.Date;

public class Test02_System {
    public static void main(String[] args) {
        //static void exit(int status)
        //退出虚拟机
        //0代表正常退出 其他数字代表不正常退出
        //System.exit(0);

        //static long currentTimeMillis()
        //获取当前时间毫秒值
        long time2 = new Date().getTime();
        System.out.println(time2);
        long time = System.currentTimeMillis();
        System.out.println(time);


        //static void arrayCopy(五个参数)
        //数组内容拷贝
        int[] arr = {11,22,33,44,55,66};
        int[] brr = new int[6];

        /*
            Object src      代表源数组
            int  srcPos     代表源数组要复制的起始索引
            Object dest     代表目标数组
            int destPos     代表目标数组的起始索引
            int length      代表要复制的元素个数
         */
        //把arr数组中22 33 44元素复制到brr数组的前三个位置
        System.arraycopy(arr,1,brr,0,3);
        //把brr数组的33 44复制到brr的最后
        System.arraycopy(brr,1,brr,4,2);
        //打印
        for (int i = 0; i < brr.length; i++) {
            System.out.print(brr[i]+" ");
        }  
        //22 33 44 0 33 44 
    }
}

9.BigInteger类

  • 概述:

    • BigInteger叫大整数,可以代表无限大的整数,是一种引用类型。引用类型无法使用运算符,需要用方法来完成数学运算。
  • 构造方法:

    方法说明
    BigInteger(String value)可以把字符串整数变成对象
  • 常用方法:

    方法说明
    add(BigInteger value)加法运算
    subtract(BigInteger value)减法运算
    multiply(BigInteger value)乘法运算
    divide(BigInteger value)除法运算
  • 代码示例:

package com.a;
  import java.math.BigInteger;
  
  public class Test03_BigInteger {
      public static void main(String[] args) {
          //创建对象
          BigInteger b1 = new BigInteger("1000000000000000000000000");
          BigInteger b2 = new BigInteger("100000000000000000000000");
  
          //加法
          System.out.println(b1.add(b2));
          //减法
          System.out.println(b1.subtract(b2));
          //乘法
          System.out.println(b1.multiply(b2));
          //除法
          System.out.println(b1.divide(b2));
      }
  }
 

10.BigDecimal类

  • 概述:
    • BigDecimal类表示大小数。可以表示一个无限大无限精确的小数。
    • 可以做精确的计算。
  • 构造方法:
方法说明
BigDecimal(double val)把小数数值变成BigDecimal对象
BigDecimal(String val)把字符串值变成BigDecimal对象
  • 常用方法:
方法说明
BigDecimal add(BigDecimal value)加法运算
BigDecimal subtract(BigDecimal value)减法运算
BigDecimal multiply(BigDecimal value)乘法运算
BigDecimal divide(BigDecimal value)除法运算
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)除法运算

​ scale代表保留小数点后位数,roundingMode代表保存方式

  • 示例代码:
package com.a;
  
  import java.math.BigDecimal;
  import java.math.RoundingMode;
  
  public class Test04_BigDecimal {
      public static void main(String[] args) {
          //double不精确
          //double d1 = 0.09;
          //double d2 = 0.01;
          //System.out.println(d1+d2); //0.09999999999999999  基本类型的小数底层存储不精确
  
          //创建对象
          BigDecimal b1 = new BigDecimal("0.09");
          BigDecimal b2 = new BigDecimal("0.01");
  
          //加
          System.out.println(b1.add(b2));     //0.10
          //减
          System.out.println(b1.subtract(b2));//0.08
          //乘
          System.out.println(b1.multiply(b2));//0.0009
          //除
          System.out.println(b1.divide(b2));  //9
  
          System.out.println(10/3);      //3
          System.out.println(10/3.0);    //3.3333333333333335
          BigDecimal d3 = new BigDecimal("10.0");
          BigDecimal d4 = new BigDecimal("3.0");
          //除法
          //第二个参数表示小数点后保存位数,第三个参数表示省略方式
          System.out.println(d3.divide(d4,2, RoundingMode.HALF_UP));  //ArithmeticException数学异常
      }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值