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关键字定义的类就默认继承了此类。

枚举结构

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

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

能看懂就可以

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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