常用类、包装类、异常处理机制学习

系列文章目录

第一章 基础知识、数据类型学习
第二章 万年历项目
第三章 代码逻辑训练习题
第四章 方法、数组学习
第五章 图书管理系统项目
第六章 面向对象编程:封装、继承、多态学习
第七章 封装继承多态习题
第八章 常用类、包装类、异常处理机制学习
第九章 集合学习
第十章 IO流、多线程学习
第十一章 仓库管理系统项目
第十二章 员工管理系统、多表查询、反射实现DBHelper学习
第十三章 DML、DDL、数据库对象学习
第十四章 网络编程、各种标签、CSS学习
第十五章 ECMAScript、BOM学习
第十六章 DOM、jQuery学习
第十七章 Servlet、jsp、Cookie、Ajax学习



前言

第二周我们已经学习了数组、方法、多类共用一主类、父类子类、面向对象的封装继承多态等知识。其中面向对象编程是最重要的方面,若客官有时间请移步本系列第八章面向对象的课后练习。接下来我们会进行常用类(Object、String、Date)、异常处理的学习。在下攸攸太上,我们ൠ♄§星正在密谋选取新的地球大使,对我们星球感兴趣的客官请移步评论区,以不复制的方式打出我们星球的名字,我们会考虑由你来做我们的地球对ൠ♄§大使。千万不要复制,不然会被从我们星球发射的超光速毁灭光线射中大脑,在刚满80岁时自动得未知疾病转化为丧尸


一、常用类

1.Object(没有显式继承的类的父类)(所有类的祖先类)

1.1基本属性

这名字感觉挺牛啊:诸神之父 人类始祖
一看就是大人物!他确实是大人物,所有类的祖先类
在java.lang包下(lang包程序自动导入,也是为了Object类,因为所有类都是他的子孙后代)
特点:只有一个无参构造方法,不是抽象类、可以构建对象
属性:无

1.2重要方法

toString()
public String toString() {
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}

作用: 将当前内存对象转成字符串形式输出给用户看
(全局限定名)@(哈希码转成16进制整数)
哈希码近似于邮政编码,全局确定你的地址
获取全局限定名,确定该类资源的身份

重写toString();为了得到该对象的所有属性,而不是内存地址(右键toString)给你返回属性值
举例:

        private int stuid;
        private String name;
        private String phone;

    @Override
    public String toString() {
        return "Student{" +
                "stuid=" + stuid +
                ", name='" + name + '\'' +
                ", phone='" + phone + '\'' +
                '}';
    }

equals()

	@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return stuid == student.stuid &&
                Objects.equals(name, student.name) &&
                Objects.equals(phone, student.phone);
    }

比的是地址
如果想要判断内容相同不相同
所以重写

hashCode()

	@Override
    public int hashCode() {
        return Objects.hash(stuid, name, phone);
    }

hashCode改写后改的是他们三个的哈希值相加不是原来的hash值,原来的hash是不变的

equals()如果确定两个对象是相等的话,那么两个对象的hash值应该相同,所以hashCode方法也应该进行重写
null,没有内存地址

[HashSet]集合—去重
首先比较hash值是否相同,(哈希值可能是2+2+2 = 1+1+4)
如果不等,可以直接开始存储了;
如果相等,在使用equals方法进行比较,比较属性是否相等
如果属性都相等,不可以存储
如果属性不相等,可以存储

String类下的equals如下(比的是内容):

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

2.String字符串的处理类

字符char
字符串String
*字符串处理类一共有三种:String, StringBuffer, StringBuilder

三者间的区别
String不可变
StringBuffer是可变的,线程安全的,效率低
StringBuilder是可变的,线程不安全的,效率高

一个内存地址只对应一个值叫做不可变
一个内存地址可以对应其他值叫可变

String类每次改变内容,都会新生成一个地址

在java.lang.String包下

2.1 继承结构,实现结构

继承java.lang.Object
Serializable , CharSequence , Comparable < String >

2.2 构造方法有哪些

Constructor and Description
String()
初始化新创建的 String对象,使其表示空字符序列。
String(byte[] bytes)
通过使用平台的默认字符集解码指定的字节数组来构造新的 String 。
String(byte[] bytes, Charset charset)
构造一个新的String由指定用指定的字节的数组解码charset 。
String(String original)
初始化新创建的String对象,使其表示与参数相同的字符序列; 换句话说,新创建的字符串是参数字符串的副本。
String(StringBuffer buffer)
分配一个新的字符串,其中包含当前包含在字符串缓冲区参数中的字符序列。
String(StringBuilder builder)
分配一个新的字符串,其中包含当前包含在字符串构建器参数中的字符序列。

2.3 常用方法有哪些

拆分:split
拼接:concat
截取:subString
查找:indexOf,lastIndexOf
比较:compareTo
替换:replace
大小写转换:toUpperCase、toLowerCase

1.Date时间类

第一阶段: 时间日期类
util下的时间类
可以获得年月日时分秒和星期几
java.sql.Date(没有无参构造)下的实践类
只能获得年月日
java.sql.date下的时间类是util时间类的子类

DateFormat时间的格式化:
是对util的格式化,可以自定义时间怎么分隔
一般使用yyyy-MM-dd-HH-mm-ss
年-月-日-时-分-秒
MMM写三个的话可以输出中文的月份

第二阶段
第一阶段的事件类型的方法已经几乎全部弃用了
我们使用Calendar类进行处理时间
jdk推荐使用Calendar类,进行时间管理
能够获取有有关时间的更多信息,使用Calender类改写过后的图书管理系统我会放在总结后,感兴趣的客官可以回到系列文章的第二章 JAVA集中学习第一周项目实践查看在什么地方有什么改进。

二、包装类

包装基本数据类型:都包装成包装类
8个数据类型,分别由对应的包装类

1.包装类的意义

1、基本数据类型不具备面向对象思想(基本数据类型没法找到对象调方法)
2、集合(约等于数组)只能存储引用数据类型变量,为了让集合能用基本数据类型

为什么集合不能使用基本数据类型?
目前还没有学到集合,学到集合时会有提及,有疑问的同学可以先查查。

是不是有了包装类就不用基本数据类型了?
程序会自动帮我转为包装类。(自动拆装箱概念:基本数据类型转型为包装类型)
我们使用Integer来举例:
在lang包下、继承了number、被final修饰不能继承number类、没有无参构造
主要的方法有MAX_VALUE和MIN_VALUE
有自动拆装箱方法

2.包装类和String类型之间的转换

字符串转化为数值
int c = Integer.parseInt(“123”);
System.out.println©;

基本自动转字符串
int d = 143;
Integer integer = new Integer(d);
System.out.println(integer.toString() + 4);

System.out.println(d + “”);(字符串自动将周围的其他类型转为【同化为】字符串)

3.自动拆包装操作

装箱:
基础数据类型转包装类
int a = 9;
Integer i = new Integer(a);

拆箱:
包装类转基础数据类型(程序自动.intValue())
Integer i = new Integer(7);
int b = i;

三、异常处理机制

1.基础理论

处理会使程序终止运行,报错的错误
作用: 可以保证程序继续运行,而不会因为不会影响大局的小问题而终止

2. 异常的分类

Throwable继承Object类
两个子类:
Error虚拟机内存溢出,内部错误(程序员解决不了,不用改代码)
Exception分为两个子类:
检查异常(编译前异常):检查时就标红(未运行时),这种异常必须处理
运行异常:运行时标红(运行后),可以不处理

3.保证程序不终止的两种解决方案

1、程序自己解决
try{//监控区
}catch(){//决定解决方案
}finally{//关闭资源
//出不出错都执行
}

try代码块没有问题不执行catch块,直接执行finally
有问题就执行类型匹配的catch块(子类异常在前,父类异常在后),执行finally
如果没有类型匹配的catch块,也会执行finally,最后在终止
2、程序自己解决不了,进行上报(声明/抛出异常)
throws 异常类型

异常处理机制的五个关键字
try
catch
finally
throws
throw

throw关键字:是自己制造异常
我们希望调用者重视这个问题,所以抛出这个异常,我们可以自定义一个异常类型,来精确的描述这个异常是什么种类的。


总结

本文介绍了常用类、包装类、异常处理三种知识。请各位客官在理解的基础上,思考如何在自己的代码中实现这些知识的使用。As always,如果帮到你一点点,在下也感到在下花费的时间是有价值的。

万年历项目Version2

import java.util.Calendar;
import java.util.Scanner;

public class Calender {
    public static void main(String[] args) {
        calacala();
    }
    public static void calacala(){
        //1.接收
        System.out.println("请输入一个时间(年-月-日)");
        String str=new Scanner(System.in).next();
        //2.转换:String---calender
        java.sql.Date dt=java.sql.Date.valueOf(str);
        Calendar calendar=Calendar.getInstance();//calendar 是当前系统时间。
        calendar.setTime(dt);//calendar 代表 用户输入的时间。

        //3.1  获得输入月份有多少天?
        int days=calendar.getActualMaximum(Calendar.DATE);//获得该月份的最大日期。
        //3.2  获得输入月份的1号是星期几?
        calendar.set(Calendar.DATE,1);
        int num=calendar.get(Calendar.DAY_OF_WEEK); //第几天:

        //4.输入日历:
        System.out.println("日\t一\t二\t三\t四\t五\t六\t");
        for(int i=1;i<=num-1;i++){
            System.out.print("\t");
        }
        for (int i=1;i<=days;i++){
            System.out.print(i+"\t");
            calendar.set(Calendar.DATE,i);
            if(calendar.get(Calendar.DAY_OF_WEEK)==7){
                System.out.println();
            }
        }
    }
}
  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值