java高级知识_Java高级实用技术知识

一. l/O集合框架

Collection接口 存储 一组不唯一、无序的数据

List 存储一组不唯一、有序(插入顺序)的数据

Set 存储一组唯一、无序的数据

ArrayList类

存储数据为数组,当前类实现了长度可变的数组操作。特点是随机访问和遍历效率高。

注:默认的数组长度为10,当数组不够存储数组时,将创建新数组。并且将原来数组中的元素复制到新数组,然后添加新元素,

新数组长度为(旧数组长度X3)/2+1;

当数组不够存储数据时,将创建新数组,并且将原来数组中的原素复制

HashSet类(Set接 口的实现类)

特点:

存储无序元素

允许元素值为空

非线程安全

迭代器

作用:实现集合元素的遍历

注:Collection接口的派生接口或类

使用步骤:

获取迭代器(iterator)

判断是否存在下一个元素{hasNext()}

如果存在下一个元素就获取下一个元素next();

LinkedList类

存储结构为链表,特点是插入和删除效率比较高。

Map 接口 存储一组键-值映射的元素

注:key是由Set存储

Value是由collection 存储

遍历Map步骤:

获取key的集合

遍历key 的集合,获取每一个key,根据key获取对应的value。

HasMap类

枚举

由一组固定的常量组成的类型

注:

1. 枚举类中常量必须在最前面,常量名之间用逗号分隔,如果只有常量可以不加分号结束。如果还有其他成员就必须用分号结束。

2. 枚举类中有属性、方法、构造方法(本身就是一个特殊的类)

包装类

Java为每一个基本类型都提供了包装类型(对象类型)

JDK1.5引入了自动装箱和自动拆箱。

自动装箱:将基本类型转换成包装类型

自动拆箱:将包装类型转换成自动类型

类型转换

将字符串转换成基本类型(Character除外)

包装类.Parse类型(值);

例:

int num = Integer.parseInt(“3”);

double number = Double.parseDouble(“3.3”);

将基本类型转换成字符串

a) 拼接一个空字符串

b) 调用包装类的tostring()方法

String result =Integer.tostring (num);

==和equals的区别

==:基本类型比较值,引用类型比较地址

Equals:Object类中equals比较2个对象的地址(实际上就是==)

String类重写了Object类的equals方法,先比较地址,地址不等再比较每一个字符。

String类

不可变的字符串

常用的方法

String mess = "hello world";

/获取字符串长度/

System.out.println("字符串长度:"+mess.length());

/返回指定索引位置的值/

System.out.println("索引位置4所对应的值"+mess.charAt(4));

/字符串拼接/

System.out.println("拼接一个字符串:"+mess.concat("xiaobai"));

/判断指定字符串是否存在/

System.out.println("是否存在hello:"+mess.contains("hello"));

/判断2个字符串是否相等/

System.out.println("是否和hello world相等:"+mess.equals("hello world"));

/忽略大小写比较字符串大小/

System.out.println(mess.equalsIgnoreCase("HELLO WORLD"));

/返回指定字符串第一次出现的位置/

System.out.println( mess.indexOf("l"));

System.out.println(mess.indexOf("world"));

/返回指定字符串最后一次出现的位置/

System.out.println(mess.lastIndexOf("l"));

/如果找不到返回-1/

System.out.println(mess.indexOf("a"));

/从索引为5开始查找第一次出现l的索引/

System.out.println(mess.indexOf("l",5));

System.out.println(mess.replace("world", "chengguanxi"));

//将字符串中的world替换为 chengguanxi

System.out.println(mess.startsWith("h"));

//判断字符串是已指定字符串作为前缀

System.out.println(mess.substring(2));

//从指定位置开始(包含)到字符串末尾截取字符串

System.out.println(mess.substring(2, 5));

//截取起始位置到结束位置之间的字符串(包含起始,不包含结束)

System.out.println(mess.toLowerCase());//将字符串转为小写

/将字符串转为大写/

System.out.println(mess.toUpperCase());

/去除字符串的前后空格/

System.out.println(mess.length());

System.out.println(mess.trim().length());

StringBuffer类

可变的字符串对象,通常字符串拼接时使用

StringBuilder类

和SringBuffer类用法基本一致,StringBuffer是线程安全的,StringBuilder非线程安全,所以相对而言速度快

(轻安全,速度快)

Java.util.Date类

日期时间类

New.Date();表示获取当前系统时间

格式化

将日期时间类型转成文本

解析

将文本转成日期时间类型

通过SimpleDateFormat 类实现格式化和解析

一连串流动的字符,是以先进先出的方式发送和接收数据的通道

输出(写)

程序(内存) 文件

输入(读)

流的分类

按流向分

输入流

输出流

按处理数据单元分

字节流

字符流

注:以程序(内存)为参照物,从程序往文件(介质),叫输出流,从文件等(介质)往程序(内存),叫输入流。

输入流对应的操作为读,输出流对应的操作为写。

处理流的步骤:

创建流的对象(输入流/输出流)

操作流(读/写)

关闭流

包装类的处理步骤:

创建流对象(输入流/输出流)

创建包装类,包装流对象

操作流(读/写)

关闭流

序列化

将对象的状态存储到特定介质中的过程

实现序列化

将要序列化的对象所属类实现序列化接口(Serializable)

创建对象字节输出流(ObjectOutStream),包装输出流

调用方法(writeObject()),将对象写入节质中

关闭流

反序列化

将存储介质中的对象读取到程序中的过程

实现反序列化

创建对象字节输入流(),包装输入流

读取节质中的对象信息(read()Object())

关闭流

序列化的算法

当我们试图序列化一个对象时,首先会检测当前对象是否已经被序列化

如果没有被序列化,那么分配序列号,并序列化对象

如果已经被序列化,那么就直接输出序列号,不在重新序列化。

注:

当某些属性不希望被序列化,可以为属性添加transiant修饰符

反序列化无需通过构造器生成对象

按照序列化的顺序反序列对象

如果反序列化的对象有父类,那么父类应该事先序列化接口,或者有无惨构造,否则会报错

反射

在运行的状态中,动态获取信息以及动态调用对象方法的功能

Field类

Method类

Constructor类

注:getField()方法只能获取public访问权限的属性

getDeclaredField()方法可以获取所有访问权限的属性

获取一个类的class对象

类名.class

对象.getClass();

Class.forName(“类的全路径”)

通过反射动态创建对象

通过class对象的newInstance()创建(是通过无参构造创建对象)

先获取指定的构造函数对象,通过指定的构造函数来创建对象

注解分解

内建注解(JDK5.0)

元注解(用来修饰其他的注解定义)

自定义注解(用户自己定义的注解类型)

程序

是对数据描述与操作的代码的集合

进程

是程序的一次动态执行的过程,它对应了从代码加载、执行至执行结束的完整过程。

线程

线程是进程中执行运算的最小单位,进程在其执行过程中可以产生多个线程,而线程必须在某个进程内执行。

如何实现线程操作

编写类继承Thread类

编写类实现Runnable接口

注:

调用run()和start()是否一样?

答:不一样,调用run()表示调用一个普通方法,调用start()表示启动一个线程,本质上不一样。

线程是否可以反复启动?

答: 不可以,线程一旦启动就变成可运行状态,在当前的生命周期中,要么切换到阻塞状态,要么到死亡状态。不可以重写启动(一个线程对应了他的生命周期,生命周期是不可逆的)

如果想再次完成任务,需要重新创建线程对象,启动新的线程

线程的优先级

优先级高的线程可以抢占优先级低的线程资源

优先级最大的为10,最小的为1 ,默认为5

同步

如果多个线程访问同一个资源,那么可能会出现错误的情况,

实现线程同步的方式

同步方法

访问修饰符synchronized 返回值类型

方法名(参数){

}

不同代码块

Synchronized(收益对象){

}

注:

同步方法本身是互斥的,就是当同步方法被一个线程调用时,其他线程不允许访问。必须等待这个同步方法调用完成才能继续访问。

同一个类中的同步方法也是互斥的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值