一、 Object类
1. Object类是Java中唯一没有父类的类。
2. 其他所有的类都继承了Object类中的方法
3. 如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类
方法摘要 | |
protected Object | clone() 创建并返回此对象的一个副本。 |
boolean | equals(Object obj) 指示其他某个对象是否与此对象“相等”。 |
protected void | finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 |
Class<?> | getClass() 返回此 Object 的运行时类。 |
int | hashCode() 返回该对象的哈希码值。 |
void | notify() 唤醒在此对象监视器上等待的单个线程。 |
void | notifyAll() 唤醒在此对象监视器上等待的所有线程。 |
String | toString() 返回该对象的字符串表示。 |
void | wait() 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。 |
void | wait(long timeout) 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。 |
void | wait(long timeout, int nanos) 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。 |
==操作符与equals方法
==操作符:
引用类型比较引用(是否指向同一个对象);
Person p1=new Person(); Person p2=new Person();
if (p1==p2){…}
基本类型比较值;int a=5; if(a==6){…}
用"=="进行比较时,符号两边的数据类型必须一致(可自动转换的基本数据类型除外),否则编译出错;
equals方法:
是Object类的方法,由于所有类都继承Object类,也就继承了equals()方法。
只能比较引用类型,
在Object类的定义中,其作用与“==”相同,比较是否指向同一个对象。格式:obj1.equals(obj2)
注意:对类File、String、Date、封装类(Wrapper Class)及很多重写了equals()方法的类来说,是比较类型及内容而不考虑引用是否指向
二、 String类
Java中字符串是常量,它们的值在创建之后不能更改。
String类的引用可以指向不同的字符串,这是因为字符串对象虽然是不能修改的, 但是它们的地址可以共享。
String 类的常用方法
public boolean startsWith(String s) public boolean endsWith(String s) :判断当前字符串对象的前缀(后缀)是否是参数s指定的字符串 public int compareTo(String s):按字典序与参数s指定的字符串比较大小 public int compareToIgnoreCase(String s) public boolean contains(String s):判断当前字符串对象是否含有参数指定的字符串 s pubic String replace(char oldChar,char newChar) public String replaceAll(String old,String new) public String concat(String str) public int indexOf (String s):从头开始检索字符串 s,并返回首次出现 s 的位置 indexOf(String s ,int startpoint) lastIndexOf (String s) public String substring(int startpoint):获得一个当前字符串的子串 substring(int start ,int end) public String trim(): 得到一个去掉前后空格后的字符串对象 字符串的长度length() public String[] split(String regex)按照regex将当前字符串,拆分成多个字符串,整体构成一个字符串数组 |
三、 StringBuffer类
构造: StringBuffer() StringBuffer(int size) StringBuffer(String str) 添加: StringBuffer append(data); StringBuffer insert(index,data); 删除: StringBuffer delete(start,end):包含头,不包含尾。 StringBuffer deleteCharAt(int index):删除指定位置的元素 查找: char charAt(index); int indexOf(string); int lastIndexOf(string); 修改: StringBuffer replace(start,end,string); void setCharAt(index,char); |
StringBuffer:可变字符序列、线程安全、效率低
StringBuilder:可变字符序列、线程不安全、效率高
四、 封装类
基本数据类型 | 封装类 |
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
五、 Date类
int hour = 23; int minute = 12; Calendar calendar = Calendar.getInstance(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MMMM-dd-EEEE HH:mm:ss:SS"); System.out.println(format.format(calendar.getTime())); //获取时间 int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DATE); //设置时间 calendar.set(Calendar.HOUR_OF_DAY, hour); calendar.set(Calendar.MINUTE, minute); calendar.set(Calendar.MILLISECOND, 0); System.out.println(format.format(calendar.getTime()));
Calendar calendarCompare1 = Calendar.getInstance(); //利用构造函数设置时间 calendarCompare1.set(year, month, day, 6, 0); |
六、 内存四区
七、 IO 概述
输入:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
输出:将程序(内存)数据输出到磁盘、U盘等存储设备中
Java 的 IO 流主要包括输入流和输出流两种 ,每种输入、输出流又可分为字节流和字符流两大类:
字节流以字节为单位来处理输入、输出操作
字符流以字符为单位来处理输入、输出操作
File 类
File 类代表与平台无关的文件和目录。
File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。
如果需要访问文件内容本身,则需要使用输入/输出流。
File f = new File("D:\\temp.txt"); try { if (!f.exists()) { f.createNewFile(); } } catch (IOException e) { e.printStackTrace(); } System.out.println("是文件吗:" + f.isFile()); System.out.println("是目录吗:" + f.isDirectory()); System.out.println("名称:" + f.getName()); System.out.println("路径: " + f.getPath()); System.out.println("绝对路径: " + f.getAbsolutePath()); System.out.println("最后修改时间:" + new Date(f.lastModified())); System.out.println("文件大小:" + f.length() + "字节"); System.out.println("文件可读吗:" + f.canRead()); System.out.println("文件可写吗:" + f.canWrite()); |
IO 流的分类
IO流是用来处理设备与程序之间的数据传输
按流向(站位到程序的角度):
输入流
输出流
按处理的单位:
字节流(8bit)byte
字符流(16bit)char
按流的角色
节点流:可以从一个特定的 IO 设备读/写数据的流(访问文件相关,也叫文件流,程序直接作用在文件上)
处理流:对一个已存在的流进行连接和封装,通过封装后的流来实现数据读/写操作
IO 流体系
程序中打开的文件 IO 资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件 IO 资源。
八、 对象的序列化
对象序列化的目标是将对象保存到磁盘上,或允许在网络中直接传输对象。
序列化是RMI(Remote Method Invoke – 远程方法调用)过程的参数和返回值都必须实现的机制,而 RMI 是 JavaEE 的基础。因此序列化机制是 JavaEE 平台的基础。
如果需要让某个对象支持序列化机制,则必须让的类是可序列化的,该类必须实现如下两个接口之一:
Serializable:一个对象想要被序列化,那么它的类就要实现 此接口,这个对象的所有属性(包括private属性、包括其引用的对象)都可以被序列化和反序列化来保存、传递。
Externalizable:他是Serializable接口的子类,有时我们不希望序列化那么多,可以使用这个接口,这个接口的writeExternal()和readExternal()方法可以指定序列化哪些属性。
序列化与反序列化
序列化:把Java对象转换为字节序列的过程。
反序列化:把字节序列恢复为Java对象的过程。
使用对象流序列化对象
若某个类实现了 Serializable 接口,该类的对象就是可序列化的:
创建一个 ObjectOutputStream
调用 ObjectOutputStream 对象的 writeObject() 方法输出可序列化对象
反序列化
创建一个 ObjectInputStream
调用 readObject() 方法读取六种的对象
如果某个类的字段不是基本数据类型或 String 类型,而是另一个引用类型,那么这个引用类型必须是可序列化的,否则拥有该类型的 Field 的类也不能序列化