java基础笔记(3)

捕获异常:

try{

......

}catch(Exception e){

......

}finally{

......

}

注意:在写多重catch时需先小后大;

自定义异常:

String字符串常用方法:

String str = "haha xixi pipi"

int i = str.length;(i = 14);返回字符串str的长度;

int j = str.indexOf("xixi");(j = 5);返回“xixi”在字符串str中的位置;

String[] arr= str.split(" ");(arr = ["haha","xixi","pipi"]);以空格为分割符,将字符串str进行切割;

String t = str.substring(5,9);(t = "xixi");返回位置为[5,9)之间的字串;

String t1 = str.toLowerCase();将字符串转换为小写;

str.charAt(1);返回索引位置为1的字符;

byte[] b  = str.getBytes();将字符串转换为字节数组;

注意:char用' ';String用" ";

StringBuilder和StringBuffer类:设置一个内容可变的字符串对象,避免频繁地新创建字符串对象,产生很多的临时变量,StringBuffer比StringBuilder的不同之处是多了实现线程安全功能,因此StringBuilder的性能较高,平时使用也优先使用StringBuilder;

StringBuilder类常用的方法:

append(参数):追加内容到StringBuilder对象的末尾;

insert(位置,参数):将内容插入对象的指定位置;

toString():将StringBuilder对象转换为String对象;

length():获取字符串长度;

包装类:将基本数据类型包装成对象那样来操作;

包装类提供的两大类方法分别是:提供本类和其他基本数据类进行转换;将字符串和本类及包装类进行相互转换;

注:大部分的包装类名是基本数据类型的首字符变成大写,如byte-->Byte;而int的包装类是Integer,char的包装类是Character;

  

拆箱装箱:基本数据类型转换为包装对象类即装箱,包装类转为基本数据类型即拆箱;都可手动或自动,自动拆装箱需要求基本数据类型和包装类是相对应的,如byte对应Byte;

基本数据类型和字符串的转换:

转为字符串:

int c =10;

  1. String str1 = String.valueOf(c);
  2. String str2 = Integer.toString(c);
  3. String str3 = c + " " ;

转为基本数据类型:

String str = "ab"

  1. int a = integer.parseInt(str);
  2. int b = integer.valueOf(str);

表示时间:常用两大类Date和SimpleDateFormat

Date()返回当前时间,格式是

 显然与我们日常生活中的常见格式有所区别,为了将其转换,需用到SimpleDateFormat类,里面提供了个format()方法,将时间格式转换为指定格式;如:

Date t = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String date = sdf.format(t)

此时的date字符串显示的就是我们刚指定的时间格式了;

相反的,我们可以将文本格式字符串格式转换为Date类型,此时用到的的parse()方法;

如:

package com.lzj;
import java.util.*;
import java.text.*;
public class test2 {
    public static void main(String[] args) {
    String day = "2018-11-04 10:30:20";
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try{Date date = df.parse(day);
    System.out.println(date);
    }catch(Exception e) {
    }
}
}

运行结果:

操作时间,Date类本身也带有操作时间的方法,不过并不是很推荐,推荐的是使用Calendar类来进行时间和日期的处理;

Calendar类是java.util中的一个抽象类,通过getInstance()来获取Calendar对象,获取对象时本身就会初始化当前时间,并通过get()方法来获取信息值,如:

Calendar c = Calendar.getInstance();

int year = c.get(Calendar.YEAR);

其中的Calendar.YEAR是类中定义的一个静态常量;

除此之外,Calendar类还提供了另一些常用的方法:

Date date = c.getTime();将时间从Calendar对象转换为Date对象;

Long time = c.getTimeMillis();获取当前的毫秒数;

Math类:

Math类位于java.lang包中,是静态方法,因此可以直接通过类名调用方法,常用的方法有:

double a = 12.885;

  1. long y1 = Math.round(a);返回四舍五入后的数值;
  2. double y2 = Math.floor(a);返回小于参数的最大整数;
  3. double y3 = Math.ceil(a);返回大于参数的最小整数;
  4. double y4 = Math.random();产生[0,1)之间的随机数字;

java集合框架

 List接口与它的实现类:List的元素是可重复有序,可以精确控制每个元素的插入或删除;ArrayList是List的一个重要实现类;

ArrayList实现类的常用方法add();可直接添加元素,也可指定位置添加元素:add(index,xxx);

addall():直接增加一个数组List,如添加的数组类型不是List,则需通过Arrays.asList()来将其转换;如:

 同样的,它也可以通过指定参数index来选择插入的位置;

size():返回大小;

get(index):返回指定位置的元素;

iterator():将集合转为迭代器,再通过迭代器Iterator自身的方法来操作集合,如通过迭代器遍历集合。例:

 set(index,xxx);把指定位置的元素改成xxx;

remove();删除元素,可直接指定元素名,也可直接指定索引名,同样的removeAll()方法也可以删除一个数组的元素;跟addAll()方法类似;

contains(xxx)/containsAll(xxx);判断集合是否包含xxx对象或xxx小集合,注意:就算对象的属性,方法都一样,但如果是不同对象,还是会返回false;

如果想让其只要某个属性相等就返回true,则需要在对象中重写equals方法,因为contains()方法的本质就是通过equals方法对比每个对象是否相等;

重写的模板如下参考:

 

 indexOf(xxx)方法;返回xxx对象的索引位置;如果有多个xxx对象,返回的是第一个出现的位置索引,如果没有,返回-1;

泛型:规定了集合的类型以及其子类型对象,默认集合是可以增加各种类型数据的,编译时也不会报错,取出来的元素类型的Object类型,如果设定了泛型,则规定该集合只能存放规定类型的泛型,编译时存入不同的类型就会报错,取出来的也是规定的类型而不需有时还要进行强制转换;

List<Course> coursesToSelect ;定义泛型时格式;

this.coursesToSelect = new ArrayList<Course>();构造实例化List时格式;

注意:泛型是不可以使用基本类型,需使用他们的包装类或者是自己自定义的类;

set接口以及它的实现类HashSet;

set接口及实现与List中的方法类似,但由于set是无序不重复的集合,因此和List集合相比其方法没有set()方法,遍历的时候只能通过迭代器或foreach,不能用get()方法,因为是无序的,所以是不能指定位置的;set可以添加一个空对象null;contains()方法中除了要重写equals()方法外,还需重写hashCode()方法,该方法会返回一个哈希码,Set接口的实现类HashSet其定义的contains()方法需要判断哈希码以及对象相等后,才会返回true,这一点要区别于List中的contains()方法;

Map提供了一种映射,通过key-value的形式存储,可根据key快速查找value,key不可以重复,value可以,一个key只能映射一个value;

Map是支持泛型,形式如:Map<K,V>;方法:

put(key,value):增加对象;如果已有key值,则修改原有的value值;

remove(key):如有包含指定key,则删除对应的值;

keySet()、values()、entrySet():返回Map中key的集合、values值的集合以及键值对的集合;

注意:entrySet返回的键值对类型要这样表示:Set<Map.Entry<K,Y>> xxx =?;

HashMap类是Map接口的重要实现类,HashMap中的Entry对象的无序的,key和values都可以是null,但是只能有一个key是null(key值不能重复)

 containsKey();判断是否包含某个Key值

containsValue();判断是否包含某个Value值;

注意:同样的,这两个判断包含方法也要重写equals()方法和hashCode()方法,要不然只能判断是不是同一个对象;

Collections类:定义了用来操作集合框架的方法;

常用方法:

sort(xxx);对xxx集合进行排序;注意:要实现排序,要确保集合里的对象实现了Comparable接口,其实现类需实现compareTo()方法,返回正数则表示大于比较对象,负数则小于,0则相等;而这个接口是定义默认的比较规则,因此可以比较;

而当我们集合里的对象不是Intager这种类似基本数据类型的包装类,而是自定义的对象时,直接使用sort()方法是会报错的,因为没有实现Comparable接口;

为了让我们自定义的对象可以使用sort()方法,我们可以将对象继承Comparable接口并重写compareTo()方法;通过传入一个对象,对比传入对象的某个属性和自身this对象的对应属性;

Comparator接口:定义临时的比较规则类,;实现类的compare()方法里传入两个对象,用于比较;

将定义好的Comparator实现类传入sort()方法中,并根据这个实现类定义的比较规则进行排序:

如:studentList是储存了自定义Student对象的集合,StudentComparator是自定义Comparator类的实现类,里面必需包括compare()方法;

 注意:Comparable类和Comparator类都是带有泛型的;

而无论是Collections类、Comparable类还是Comparator类,都是java集合框架中的类:

猜你喜欢

转载自www.cnblogs.com/lzj-learn/p/11793722.html