Java基础二

Java提升

集合

1.集合基础

1.导包

2.创建

  • ArrayList<String> array = new ArrayList<String>();

3.两种添加方法

  • array.add("hello");
  • array.add(1, "java");

3.常用方法

  • boolean remove(Object o) 删除指定的元素,返回删除是否成功
  • E remove(int index) 删除指定索引处的元素,返回被删除的元素
  • set(int index, E element) 修改指定索引处的元素,返回被修改的元素
  • int size() 返回集合的元素个数

异常

Throwable类

Error类 Exception类

        RuntimeException类(运行时异常) 其他Exception

三种处理异常的方式:

1.try catch finally

直接处理

try{

可能出现异常的语句

} 【catch(异常类型 异常名){

处理异常

}】【 finally{

此中代码不管有没有处理异常都会执行

}】

1.try catch 2.try catch fianlly 3.try finally(开发过程中较重要)

jdk1.7后

try(定义流对象){}catch(){}

jdk1.9后

定义流对象

try(输入流对象;输出流对象){}catch(){}

仍然需要throw

2.throws

2.throws

想上抛出异常,由上一级进行处理

3.throw

有一些异常jvm不会主动抛出,属于逻辑异常例如:分数应该在0到100之间,这是需要主动抛出所以需要throw

当抛出的是运行时异常时,可以不写throws,否则必须要throws

if(){

throw new 类型();

}

异常处理流程

1617780800264.png

assert关键字

jdk1.4后,确定代码执行到某行后一定是期待的结果(但只是个建议)

Debug

1.查看程序执行流畅,调试程序

lang包

Math

java.lang下的包是不需要导的

abs(int a)

ceil(double a) 大于等于double值的最小整数

floor(double a) 小于等于 最大

round(float a) 加0.5向下取整

max(int a,int b)

min()

pow(double a ,double b) a的b次幂

Random

1.导入包:

import java.util.Random;

2.初始化:

Random r = new Random();

3.使用:
int number = r.nextInt(10);随机生成0到10中的整数,包括0,不包括10;

如果要生成 1到100:

int number = r.nextInt(100) + 1;

System

System.exit(0);退出jvm

toString()(建议重写);equals(); 可以快捷重写ctrl+shift+s;

数组拷贝:public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);

获取当前日期时间数值:public static long currentTimeMillis();(实现操作耗时的统计)

进行垃圾回收:public static void gc();并不是重新定义的方法,而是使用Rantime里的gc(Runtime.getRuntime().gc())

util包

Arrays

sort(数组名); //排序

基本类型包装类

1618021050413.png

用处:更多方法来操作该数据

常用的操作之一:用于基本数据类型与字符串之间的转换

Number(abstract)

非抽象:

public byte byteValue() 从包装类中获取byte数据

public short byteValue()从包装类中获取short数据

抽象:

方法名 说明
public abstract int intValue() 普通 从包装类中获取int
public abstract long longValue() 普通 从包装类中获取long
public abstract float floatValue() 普通 从包装类中获取float
public abstract double doubleValue() 普通 从包装类中获取double

Integer

  • Integer i = Integer.valueOf(100);
  • Integer i = Integer.valueOf("100");
  • int和String的相互转换:
  • int-----String
  • public static String valueOf(int i)
  • String-----int
  • public static int parseInt(String s)

自动装箱和拆箱

装箱:把基本数据类型转换为对应的包装类类型

拆箱:把包装类类型转换为对应的基本数据类型

//装箱
Integer i = Ingter.valueOf(100);
Integer ii = 100;
//拆箱后装箱
ii += 200;
ii = ii.intValue()+200;
syso(ii);

if(ii != null){} 在开发中对于引用类型,如果做操作,最好先做是否为null的判断

大数据类

1618020988877.png

BigInteger

public BigInteger(String val);

System.out.println("加法操作:" + bigA.add(bigB));
System.outprintln("减法操作:" + bigA.subtract(bigB));
System.out.println("乘法操作:" + bigA.multiply(bigB));
System.out.println("乘法操作:" + bigA.divide(bigB));

求余:public BigInteger[] divideAndRemaininder(BigInteger val)

返回值第一个为商,第二个为余数

BigDecimal

public BigIDecimal(String val);

和BigInteger很类似

除法(可进位):(roundingMode是一个枚举类)

    public BigDecimal divide(BIgDecimal divisor, int scale, RoundingMode roundingMode)

时间日期

Date

代表了一个特定的时间,精确到毫秒

方法名 说明
public Date() 分配一个Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
public Date(long date) 分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
public long getTime() h获取的日期对象从1970年1月1日00:00:00到现在的毫秒值
public void setTime(long time) s设置时间,给的是毫秒值

SimpleDateFormat

是一个具体的类,用以区域设置敏感的方式格式化和解析日期。我们重点学习日期格式化和解析。

方法名 说明
public SimpleDateFormat() 构造,使用默认模式和日期格式
public SimpleDateFormat(String pattern) g构造一个SimpleDateFormat使用给定的模式和默认的日期格式
public final String format(Date date) 将日期格式化成日期/时间字符串
public Date parse(String source) 从给定字符串的开始解析文本已生成日期

y年,M月,d日 HH:mm:ss

Calendar

为某一时刻和一组日历字段之间的转换提供了一种方法,并为操作日历字段提供了一些方法

Calendar提供了一个类方法getInstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化:Calendarr rightNow = Calendar.getInstance();

MONTH的值从0开始

方法名 说明
public int get(int field) 返回给定日历字段的值
public abstract void add(int field, int amount) 根据日历的规则,将指定的时间量添加或减给定的日历字段
public final void set(int year, int month, int date) s设置当前日历的年月日
1617628883856.png

答案:局部变量不能被static修饰,只能被final修饰

Annotation注解

从jdk1.5之后提出的一个新的开发技术结构,利用annotation可以有效的减少程序配置的代码,可以进行结构化的定义

@Override 准确的覆写

@Deprecated 过期声明

@SuppressWarning 警告压制

Object类

可以解决参数的统一问题

可以接收数组

toString();

equals();

public boolean equals(Object obj) {
    if(!(obj instanceof Person)){
        return false;
    }
    if (obj == null) {
        return false;
    }
    if (this == obj) {
        return true;
    }
    Person per = (Person) obj;
    return this.name.equals(per.name) && this.age == per.age;
}

泛型

为了解决ClassCastException问题,慢慢解决向下转型不安全问题

Object会存在安全隐患,因为Object涵盖的范围太广,运行时不会报错

泛型:类的属性和方法的参数与返回值的类型可以由对象实例化的时候动态决定。

默认的泛型:如果不设置泛型类型会自动定义为Object

注意:

泛型之中只允许设置引用类型,如果现在要操作基本类型必须使用包装类

从jdk1.7后Point<Interger> point = new Point<>(); 后面可以省略

泛型类

泛型类在创建对象的时候没有指定泛型类型,则按照Object类型操作

泛型类不支持基本数据类型

同意泛型类,根据不同的数据类型创建的对象,本质上是同一类型,而逻辑上我们认为不同的。

派生子类

  • 子类也是泛型类,子类和父类的泛型类型要一致

  • class ChildGeneric<T> extends Generic<T>

  • 子类不是泛型类,父类要明确泛型的数据类型

  • class CildGeneric extends Generic<String>

类型通配符

  • 类型通配符一般是使用"?"代替具体的类型实参
  • 所以,类型通配符是类型实参,而不是类型形参

这是一个重要的概念,学习系统类库是会有大量的通配符使用,为了解决引用传递的问题(用通配符可以避免方法改变里面的数据,而允许获取)

? extends 类(Number):设置泛型的上限,及?只能是Number或其子类

? super 类(String) :设置泛型的下限,及?只能是String或其父类

泛型接口

两种处理1.实现类继续使用泛型2.实现类指定接口的类型

泛型方法

泛型方法不一定非要出现在泛型类中

public static <T> T add(T arg){

}

传统的工厂类可能出现工厂类太多

的问题,故使用泛型改进。

及工厂类的方法设置为泛型方法

包project

实际开发之中,所有的类都在包里

包名称要使用小写字母的方式定义

包.* 只会加载需要的,不需要的不回加载(但两个相同的包中可能有相同的类)

静态导入

import java.uitl.MyMath.*;

方法直接定义在主类中一样

UML图形

UML是统一的建模语言,类关系描述

工具:powerDesgner

类图

1617764075301.png

往往抽象类使用斜体描述在加一个abstract

属性:访问权限 属性名称 :属性类型。 public (+)、protected(#) 、private(-)

时序图

会有一个流程化的描述

用例图

程序的执行分配

单例设计模式

主要是一种控制对象实例化产生的个数

class Singleton{
    private Singleton() {
        System.out.println("test");
    }
     private static final Singleton SIN = new Singleton();
     public static Singleton getSin() {
         return SIN;
     }
}

在很多情况下,某些类是不需要重复产生对象的,例如windows的回收站,全部磁盘都共享一个回收站,回收站只有一个。

多例设计模式

class Color{
private String title;
private Color(String color) {
title = color;
}

private static final Color RED = new Color("红色");
private static final Color GREEN = new Color("绿色");
private static final Color BLUE = new Color("蓝色");

public static Color getInstance(String color) {
    switch(color) {
    case "red":
        return RED;
    case "green":
        return GREEN;
    case "blue":
        return BLUE;
    default:
        return null;
    }
}
public void getinfo() {
    System.out.println(title);
}

枚举enum

用于定义有限个数对象的一种结构(多例设计),枚举属于多例设计,其更加简单,且可以检测的错误多

可以与Switch结合

enum Color1 {
    RED,BLUE,YELLOW,GREEN;
}

public class enumDemo {
    public static void main(String[] args) {
        Color1 c = Color1.RED;
        System.out.println(c);
        for(Color1 cc: Color1.values()) {
            System.out.println(cc);
        }
    }
}

Enum类

enum本质是一个类继承自Enum类

面试题:

请解释enum与Enum的区别?

enum:是从JDK1.5之后提供的一个关键字,用于定义枚举类

Enum:是一个抽象类,所有使用enum关键字定义的类就默认继承了此类。

枚举结构

基本和类形同,不过可以定义抽象方法,之后在实现(没什么意义)

使用枚举来都确定对象的范围例如性别(男,女)

能看懂就可以

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • 1. Hive总结-常用函数 学习书目:https://zhuanlan.zhihu.com/p/82601425...
    虎不知阅读 170评论 0 0
  • package hhh; class Person { static int count=0; protected...
    所念皆归故渊阅读 138评论 0 0
  • File 类概述和构造方法 File:它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对...
    四季宝的守护神阅读 148评论 0 1
  • 课堂代码public class Courier extends Person{private String co...
    陈龙阅读 88评论 0 0
  • //给你两个有序整数数组nums1和nums2,合并两个数组,使nums3成为一个有序数组 public clas...
    Lfovikh9_阅读 85评论 0 0