Day 7 2021.3.8Final-权限修饰符-部分常用类-集合-泛型

这篇博客介绍了Java的基础知识,包括Final关键字的作用,四大权限修饰符的使用,内部类的概念,以及如何使用泛型。此外,还讲解了Date类、DateFormat类、Calendar类的操作,System类的相关方法,StringBuilder类的功能,包装类的装箱和拆箱,以及Collection集合和Iterator接口的遍历。最后,文章探讨了泛型的定义、通配符的使用和上下限的概念。
摘要由CSDN通过智能技术生成

Day 7 2020.3.8

Final关键字

package com.hong.Day007.Demo01;
/*
final关键字代表最终的、不可改变的
常见四种用法:
1.可以用来修饰一个类
格式:public fianl classs 类名称{}
含义:当前这个类不能有任何子类(太监类)(可以有父类,不能有子类)
2.可以用来修饰一个方法
格式:修饰符 final 返回值类型 方法名称(参数列表){方法体}
含义:当用fianl来修饰方法时,这个方法就是最终方法不能修改
3.还可以用来修饰一个局部变量
格式:修饰符 final 返回值类型 变量名 = 变量值
含义:当用fianl来修饰局部变量时,这个变量就是最终变量不能修改
(对于基本类型来说,不可变说的是变量当中的数据不可变
对于引用类型来说,不可变说的是变量当中的地址值不可变(数据值可以改变))
4.还可以用来修饰一个成员变量
含义:当用fianl来修饰成员变量时,这个变量就是最终变量不能修改
1.由于成员变量具有默认值,所以用了final之后必须手动赋值,不会再给默认值了
2.对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值
3.必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值
 */
public class Demo01 {
   
}

四种权限修饰符

package com.hong.Day007.Demo01;
/*
java中有四种权限修饰符:
           public > protected > (default) > private
同一个类       Yes       Yes         Yes        Yes
同一个包       Yes       Yes         Yes         No
不同包子类     Yes       Yes          No         No
不同包非子类   Yes        No          No         No

注意事项:(default)并不是关键字“default”,而是根本不写
 */
public class Demo02 {
   
}

内部类

package com.hong.Day007.Demo01;
/*
如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类。
分类:
1.成员内部类
定义格式:外部类名称$内部类名称
修饰符 class 类名称{
    修饰符 class 类名称{...}
      }
注意:内用外,随意访问;外用内,需要内部类对象
使用方法:
1.间接方法:在外部类的方法当中,使用内部类;然后main只是请用外部类的方法
2.直接方法:公式:
类名称 对象名 = new 类名称();
【外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称;】
3.如果出现了重名现象,那么格式是: 外部类名称.this.外部类成员变量名
==========================================================
2.局部内部类(包含匿名内部类)
定义格式:
修饰符 class 外部类名称{
    修饰符 返回值类型 外部类方法名称(参数列表){
        class 局部内部类名称{
        }
    }
}
注意:
1.如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】
2.定义一个类的时候,权限修饰符规则
  1.外部类:   public / (defualt)
  2.成员内部类:   public / protectted / (defualt) / private
  3.局部内部类:什么都不能写
============================================================
3.匿名内部类
如果接口的 实现类(或者是父类的子类)只需要使用唯一的一次
那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】
定义格式:
接口名称 对象名 = new 接口名称() {
     //覆盖重写所有抽象方法
};
注意事项:
1.匿名内部类,在【创建对象】的时候,只能使用唯一一次
2.匿名对象,在【调用方法】的时候,只能调用唯一一次
如果希望同一个对象,调用多次方法,那么必然要给对象起个名字
3.匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名字】
*/
public class Demo03 {
   

}

新发红包案例(未完成)

接口:

package com.hong.Day007.Demo02;

import java.util.ArrayList;

public interface OpenMode {
   
    /**
     * 请将totalMoney分成count份,保存到ArrayList<Integer>,返回
     * @param totalMoney           总金额为方便计算,已经转换为整数,单位为分
     * @param totalCount                   红包个数
     * @return ArrayList<Integer>   元素为各个红包的金额值,所有元素的值累和等于总金额
     */
    ArrayList<Integer> divide(int totalMoney,int totalCount);
}

操作界面:

package com.hong.Day007.Demo02;
/*
场景说明:
   红包发出去之后,所有人都有红包,大家抢完了之后,最后一个红包给群主自己
红包分发的策略:
     1.普通红包(平均):totalMoney / totalCount ,余数放在最后一个红包当中
     2.手气红包(随机):最少1分钱,最多不超过平均数的两倍,余额越发越少
 */
public class Bootstrap {
   
    public static void main(String[] args) {
   

    }
}

Object类

Class Object是类Object结构的根。 每个班都有Object作为超类。 所有对象(包括数组)都实现了这个类的方法。

equals(Object obj)

指示一些其他对象是否等于此。(重写后默认比较地址值)

toString()

返回对象的字符串表示形式。(重写后默认打印地址值)

Date类(日期<–>毫秒)

Data类的空参数构造方法(获取当前系统的日期和时间)

Data类的带参数构造方法(传递毫秒值,返回Data日期值)

getTime方法:把日期转换为毫秒

package com.hong.Day007.Demo02;

import java.util.Date;

/*
    java.lang.Date:表示日期和时间的类
    类 Date 表示特定的瞬间,精确到毫秒
    毫秒值的作用:可以对时间和日期进行计算(可以把日期转换成毫秒,把毫秒转换成日期)
把日期转换为毫秒:
     当前日期:2088-01-01
     时间原点(0毫秒):1970年 1 月 1 日 00:00:00(英国格林威治)
注意:
     中国属于东八区:
     时间原点(0毫秒):1970年 1 月 1 日 08:00:00
     把毫秒转换为日期:
     1天 = 24 * 60 * 60 = 86400秒 = 86400 * 1000毫秒
 */
public class Demo01{
   
    public static void main(String[] args) {
   
        //获取当前系统时间到1970年1 月 1 日 00:00:00经历了多少毫秒
        System.out.println(System.currentTimeMillis());
        //Data类的空参数构造方法(获取当前系统的日期和时间)
        getData();
        //Data类的带参数构造方法(传递毫秒值,返回Data日期值)
        System.out.println(changeData(0L));
        //getTime方法:把日期转换为毫秒
        Date date = new Date();
        System.out.println(date.getTime());
    }
    //Data类的空参数构造方法(获取当前系统的日期和时间)
    private static void getData() {
   
        Date date = new Date();
        System.out.println(date);
    }
    //Data类的带参数构造方法(传递毫秒值,返回Data日期值)
    private static Date changeData(long a) {
   
        Date date1 = new Date(a);
        return date1;
    }
}

DateFormat类(日期<–>文本)

DateFormat是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间。 日期/时间格式化子类(如SimpleDateFormat )允许格式化(即日期文本),解析(文本日期)和归一化。 该日期表示为一个Date对象,或自1970年1月1日00:00:00 GMT以来的毫秒。

Date and Time Pattern Result
“yyyy.MM.dd G ‘at’ HH:mm:ss z” 2001.07.04 AD at 12:08:56 PDT
“EEE, MMM d, ''yy” Wed, Jul 4, '01
“h:mm a” 12:08 PM
“hh ‘o’‘clock’ a, zzzz” 12 o’clock PM, Pacific Daylight Time
“K:mm a, z” 0:08 PM, PDT
“yyyyy.MMMMM.dd GGG hh:mm aaa” 02001.July.04 AD 12:08 PM
“EEE, d MMM yyyy HH:mm:ss Z” Wed, 4 Jul 2001 12:08:56 -0700
“yyMMddHHmmssZ” 010704120856-0700
“yyyy-MM-dd’T’HH:mm:ss.SSSZ” 2001-07-04T12:08:56.235-0700
“yyyy-MM-dd’T’HH:mm:ss.SSSXXX” 2001-07-04T12:08:56.235-07:00
“YYYY-'W’ww-u” 2001-W27-3
package com.hong.Day007.Demo02;

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

/*
`DateFormat`是日期/时间格式化子类的抽象类
  作用:
    格式化(也就是日期-->文本)、解析(文本-->日期)
  成员方法:
     String format(Data data) 按照指定的模式,把Data日期,格式化为符合模式的字符串
     Data parse(String source) 把符合模式的字符串,解析为Data日期
  DateFormat类是一个抽象类,无法直接创建对象使用,可以使用DateFormat类的子类(SimpleDateFormat)
  构造方法:
      SimpleDateFormat(String pattern)
        用给定的模式和默认语言环境和日期格式符号构造
      参数:
        String pattern:传递指定格式
      模式:(大小写区分)
        y  年
        M  月
        d  日
        H  时
        m  分
        s  秒
 */
public class Demo02 {
   
    public static void main(String[] args) throws ParseException {
   
        texi01();
        texi02();
    }
    /*
      使用DataFormat类中的方法format,把日期格式转化为文本
     */
    private static void texi01() {
   
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        Date date = new Date();
        String d = sdf.format(date);
        System.out.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值