java-java.lang

java.lang

枚举

枚举的概念

我们很多现实中的对象,它们的属性其实是固定的.比如:一年里面有春/夏/秋/冬.再比如一年有多少节气?24个也是固定的.那么在我们Java就可以使用枚举来表示它.

定义一个枚举类(enum)

package day09.demo;
public enum WeekEnum {          //关于一周的枚举类.
    SUNDAY,MONDAY,TUESDAY,WENDESDAY,THRUSDAY,FRIDAY,SATURDAY;
}



package day09.demo;
public class TestWeekEnum {
    public static void main(String[] args) {
        System.out.println(WeekEnum.MONDAY);
    }
}   

enum 它和class/inteface这些同级的.

成员变量 成员方法和构造器

可以有成员变量/方法及类构造器.但构造器必须是私有的

package day09.demo;
public enum WeekEnum { // 关于一周的枚举类.
    SUNDAY("周末"), MONDAY("周一"), TUESDAY("周二"), WENDESDAY("周三"), 
    THRUSDAY("周四"), FRIDAY("周五"), SATURDAY("周六");

    private String date; // 枚举类中可以有成员变量

    public String getDate() { // 可以有成员方法
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    private WeekEnum(String date) { // 枚举类的构造方法必须为私有的.
        this.date = date;
    }
}

package day09.demo;
public class TestWeekEnum {         //调用测试
    public static void main(String[] args) {
        System.out.println(WeekEnum.MONDAY);
        System.out.println(WeekEnum.FRIDAY);
        WeekEnum.FRIDAY.setDate("星期五");
    }
}

 常用的方法

compareTo
System.out.println(WeekEnum.FRIDAY.compareTo(WeekEnum.MONDAY)); //比较    4
System.out.println(WeekEnum.FRIDAY.compareTo(WeekEnum.SATURDAY));//-1
System.out.println(WeekEnum.FRIDAY.compareTo(WeekEnum.SUNDAY));     //根据定义的顺序 5
values
for(WeekEnum we:WeekEnum.values()) {
    System.out.println(we);
}

@Override
public String toString() {      //编写了toString()方法对values会有一定的变化.
    return date;
}
ordinal
System.out.println(WeekEnum.SUNDAY.ordinal());      //顺序,0
System.out.println(WeekEnum.MONDAY.ordinal());      //1
System.out.println(WeekEnum.FRIDAY.ordinal());      //5

枚举和接口

枚举就是一个特别的类,所以类能够继承接口,枚举也可以.

package day09.demo;
public interface WEDescription {
    public void info();         //提示信息接口
}

package day09.demo;
public enum WeekEnum implements WEDescription{ // 关于一周的枚举类.

    SUNDAY("周末"), MONDAY("周一"), TUESDAY("周二"), WENDESDAY("周三"), 
    THRUSDAY("周四"), FRIDAY("周五"), SATURDAY("周六");

    private String date; // 枚举类中可以有成员变量

    public String getDate() { // 可以有成员方法
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    private WeekEnum(String date) { // 枚举类的构造方法必须为私有的.
        this.date = date;
    }

    @Override
    public String toString() {      //编写了toString()方法对values会有一定的变化.
        return date;
    }

    @Override
    public void info() {
        System.out.println("这是一个关于一周的枚举类");
    }

}

//调用
WeekEnum.MONDAY.info();
WeekEnum.TUESDAY.info();

包含抽象方法的枚举类

package day09.demo;
public enum Operation {
    PLUS {
        @Override
        public double calculate(double x, double y) {
            return x+y;
        }
    },MINUS {
        @Override
        public double calculate(double x, double y) {
            return x-y;
        }
    },MULTI {
        @Override
        public double calculate(double x, double y) {
            return x*y;
        }
    },DIVIDE {
        @Override
        public double calculate(double x, double y) {
            return x/y;
        }
    };

    public abstract double calculate(double x,double y);        //定义了一个计算的抽象接口

}

//测试
package day09.demo;
public class TestOperation {
    public static void main(String[] args) {
        System.out.println(Operation.PLUS.calculate(8, 5));
        System.out.println(Operation.DIVIDE.calculate(8, 4));
    }
}

作业

请同学根据节气,编写节气的枚举类,要求有info接口.要能够打印中文的节气名.

异常处理

异常的概念(Exception)

指我们程序运行时发生的不正确的事情.这种可以被我们的程序所处理.保证我们的程序可以一直运行下去.

比如

  • 除以0
  • 文件没有找到
  • 类型不匹配
运行时异常

java.lang.RuntimeException
非检测异常,这些异常在编译的时候不检查,程序中可以选择处理也可以不处理.如果不处理的话,运行时会中断.但是编译没有问题.

非运行时异常

检测异常,必须进行处理的异常.不处理,发生编译期错误.

 错误(Error)

程序没法处理的异常.发生错误以后,虚拟机就会选择终止程序的运行.比如虚拟机的内存溢出.

常见异常

NullPoniterException
public static void main(String[] args) {

        String s=null;
        System.out.println(s.length());

}
ArithmeticException
public static void main(String[] args) {
    int i=0;

    System.out.println(100/i);
}
IndexOutOfBoundsException
public static void main(String[] args) {

    int[] a=new int[3];

    System.out.println(a[a.length]);

    String s="hello";

    System.out.println(s.charAt(s.length()));
}
NumberFormatException
public static void main(String[] args) {
    String s="abc";
    System.out.println(Integer.parseInt(s));    //字符串转整形,会报错.
}
ClassCastException
public static void main(String[] args) {
    Object o=new Object();
    String s=(String)o;
}

捕捉异常

try{
    //可能出错的语句
}catch(Exceptin e){
    //捕捉对应的错误
}finally{   //不是必须写的.
    //捕捉错误以后最后的处理语句
}

示例

public static void main(String[] args) {

    int x = 100;
    int y = 0;
    Object o = new Object();
    try {
        System.out.println("x/y=" + x / y);     //一旦出错了程序会跳转到catch中,并且在catch中执行完语句以后,不会再返回try
        String s = (String) o;
        System.out.println("try字段结束了");     //出错后,try字段中的语句不再执行.
    } catch (ArithmeticException e) {
        System.out.println("发生数学错误,不能除以0");
        //System.out.println(e.getMessage());
        //System.out.println(e.getLocalizedMessage());
        e.printStackTrace();
    } catch (ClassCastException e3) {
        System.out.println("发生了类转换错误");
    } catch (NullPointerException e1) {
        System.out.println("空指针错误");
    } catch (Exception e2) { // 捕捉错误有顺序.
        System.out.println("出错了");
    } finally {     //捕捉对象后一定会被执行的语句.
        System.out.println("这是finally语句");
    }

    System.out.println("错误执行完了.");          //这句话在try的代码段外面,所以会继续执行.

}

作业:编写一个方法,返回一个整数.在该方法中,故意出错,在catch和finally返回不同的int值,看结果.

 抛出错误

throws

声明抛出的错误让调用的程序段处理

public class ThrowDemo {
    public static void main(String[] args) throws FileNotFoundException {
        ThrowDemo throwDemo=new ThrowDemo();
        throwDemo.doSomething();
    }
    public void doSomething() throws FileNotFoundException {
        FileReader fr=new FileReader(new File("a.txt"));
    }
}
throw

抛出错误

public static void main(String[] args) throws FileNotFoundException {
        ThrowDemo throwDemo=new ThrowDemo();
        if(throwDemo.i<18)
            try {
                throw new Exception("这是我自定义的错误");
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        throwDemo.doSomething();
    }

自定义错误

package day10;

public class NotTooOldException extends Exception{

    public NotTooOldException() {

    }

    public NotTooOldException(String errorMessage) {
        super(errorMessage);
    }
}

try {
//throw new Exception("这是我自定义的错误");
    throw new NotTooOldException("你不到18岁,不能参加非诚勿扰!");
} catch (NotTooOldException e) {
    System.out.println(e.getMessage());
}

Log4J

作用

记录日志

 使用
1. 下载Jar包

百度搜:maven log4j->下载对应jar

2. 添加到工程中
  • 添加到自定义的用户库
  • 直接拷贝复制,并添加到Build Path
3. 在src中创建配置属性文件

log4j.properties

4. 创建Logger对象
static Logger logger = Logger.getLogger(Log4JDemo.class.getName());
5. 记录日志
logger.error("除以0错误!");
logger.debug("除以0错误!");
logger.info("除以0错误!");
logger.warn("除以0错误!");

包装类

Java的基本类型:boolean/char/short/int/long/float/double/byte

对应的包装类

  • Boolean
  • Character
  • Short
  • Integer
  • Long
  • Float
  • Double
  • Byte

定义

Integer i1=new Integer(10);
常用的方法
parseXXX->字符串转换类型
String s="10";
int j=Integer.parseInt(s);
double k=Double.parseDouble(s);
toString->类型转字符串
String s1=i1.toString();
xxxValue()->包装类转成基本类型
Integer i1=new Integer(10);
int i2=i1.intValue();
Double d1=new Double(10);
double d2=d1.doubleValue();

装箱和拆箱

  • 装箱:把基本类型封装包装类
  • 拆箱:把包装变成基本类型

从JDK1.5开始,Java自动装箱和拆箱.

Integer i3=10;      //装箱.
int i4=i3;          //拆箱
面试题目
1. 自动装箱第一题
//创建了新的对象,引用不同.==符号回去判断引用的地址是否相同.所以不相等.
        Integer i5=new Integer(300);
        Integer i6=new Integer(300);
        System.out.println(i5==i6);             //false

        Integer i7=new Integer(100);
        Integer i8=new Integer(100);
        System.out.println(i7==i8);             //false

        Integer i9=100;                 //自动装箱
        Integer i10=100;
        System.out.println(i9==i10);            //true

//      Integer.valueOf(100);           自动装箱的方法

        Integer i11=300;                //自动装箱
        Integer i12=300;
        System.out.println(i11==i12);           //false
2. 面试题二
Double d3=100.0;
Double d4=100.0;
System.out.println(d3==d4);             //false

//Double.valueOf(100.0);        自动装箱方法
3. 面试题三
package day10;

public class KengDemo {

    public static void main(String[] args) {

        Integer a=1;
        Integer b=2;
        Integer c=3;
        Integer d=3;
        Integer e=321;
        Integer f=321;
        Long g= 3L;
        Long h= 2L;

        System.out.println(a==b);           //false
        System.out.println(e==f);           //false
        System.out.println(c==(a+b));       //true,自动转成基础类型进行比对
        System.out.println(c.equals(a+b));  //true
        System.out.println(g==(a+b));       //true
        System.out.println(g.equals(a+b));  //false equals会先比对类型,再比对值.
        System.out.println(g.equals(a+h));  //true int+long=long

    }

}

Math

常用的方法

1. abs
System.out.println(Math.abs(-1));
2. ceil
System.out.println(Math.ceil(4.7));     //比它大的最小的整数 5
3.floor
System.out.println(Math.floor(4.7));    //比它小的最大的整数 4
4. max
System.out.println(Math.max(4.7, 3.9)); //求最大值 4.7
5. min
System.out.println(Math.min(4.7, 3.9)); //求最小值 3.9
6. random
System.out.println(Math.random());      //随机数[0-1)之间
7. round
System.out.println(Math.round(4.7));    //四舍五入
8. pow
System.out.println(Math.pow(2, 3));     //2的3次方

String

定义

String s1="abcdefg";
String s2=new String("abcdefg");

常用的方法

1. charAt
System.out.println(s1.charAt(0));       //返回指定位置的字符
2.concat
System.out.println(s1.concat(s2));      //在末尾连接字符串
3. indexOf
System.out.println(s1.indexOf("bcd"));  //查找bcd字符串在s1中出现的位置 答案1
System.out.println(s1.indexOf("abd"));  //找不到,返回-1
4. length
System.out.println(s1.length());        //7
5. replace
System.out.println(s1.replace("bc", "cb"));//替换,第一个参数为旧的字符串,第二个参数为新的字符串
6. substring
System.out.println(s1.substring(3));    //截取字符串defg
System.out.println(s1.substring(3, 4)); //d
7. trim
String s3=" as a part ";
System.out.println(s3.trim());          //裁剪前后位置的空格

作业

要求定义一个字符串,比如”328103”,不适用Integer.parseInt的方法,将它转换为int.

提示:可以使用switch…case.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值