Java —— Object、Class、泛型与集合
来源:互联网 发布:c语言学习文档 编辑:程序博客网 时间:2024/05/29 04:02
一、Object 类
类层次结构的根。关键想粗略了解它有哪些基本方法。
package java.lang;public class Object { private static native void registerNatives(); static { registerNatives(); } public final native Class<?> getClass();/*返回对象的运行时的类,即该对象实际的类型*/ public native int hashCode();/*将返回一个对象的哈希码值,典型的实现方法是把该对象的内部地址转换为一个整形值,所以每个对象的此值具有唯一性*/ public boolean equals(Object obj) {/*注释中有一句:无论何时重载此方法,有必要同时重载hashCode(),这是为了维护equals相同的对象,其哈希码值也相同*/return (this == obj); } protected native Object clone() throws CloneNotSupportedException; public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());/*toHexString()即转换为16进制字符串。*/ } public final native void notify();/*唤醒在此对象上具有同步操作(Synchronized)的线程,被唤醒的每个线程都不具有可靠的权限与优势来争取操作此对象*/ public final native void notifyAll();/*唤醒其他所有等待的线程*//*注:能调用notify与notifyAll,则当前线程必须是该Synchronized变量或方法的拥有者,怎么才能成为拥有者呢?三种方法:1、执行对象的Synchronized实例方法;2、执行Synchronized 语句块;3、对于Class 类型的对象,执行sychronized 静态方法。简单理解,只有在synchronized修饰的方法或语句块中可使用notify与notifyAll*/ public final native void wait(long timeout) throws InterruptedException;/*线程进入等待状态,等待被notify或notifyAll*/ public final void wait(long timeout, int nanos) throws InterruptedException { if (timeout < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (nanos < 0 || nanos > 999999) { throw new IllegalArgumentException("nanosecond timeout value out of range"); }if (nanos >= 500000 || (nanos != 0 && timeout == 0)) { timeout++;}wait(timeout); } public final void wait() throws InterruptedException {wait(0); } protected void finalize() throws Throwable { }}
说明:
native 关键字:A native method is a Java method whose implementation is provided by non-java code。即非java语言写的方法,如构成java语言的这些最基础的方法,那它放在哪,怎么调用的?有兴趣再看。
主要列下可能会用到的方法:
public String toString(){...}public static Class<?> forName(String className) throws ClassNotFoundException{...}//重点public static Class<?> forName(String name, boolean initialize, ClassLoader loader) throws ClassNotFoundException{...}public T newInstance() throws InstantiationException, IllegalAccessException{...}public native boolean isInstance(Object obj){...}public native boolean isInterface(){...}public native boolean isArray(){...}public native boolean isPrimitive(){...}//是否是原始类public boolean isAnnotation(){...}//是否是注解public String getName(){...}//结果形式(包括分号):java.awt.Button;,若为数组,则形式为:[Ljava.awt.Button;(一维),[[Ljava.awt.Button;(二维)...public ClassLoader getClassLoader(){...}//重点public native Class<?>[] getInterfaces();//返回数组存储了该类直接实现的接口,按顺序排列public native Class<?> getComponentType();//表明数组型类的元素类型,若该类不是数组型类,则返回null。区别于getName方法,结果形式:java.awt.Button若是二维或多位数组,返回形式与getName相同,如String[][] str =new String[2][3];则str.getClass().getComponent()结果为:[Ljava.lang.String;public native int getModifiers();public String getSimpleName(){...}private String getSimpleBinaryName(){...}public Field[] getFields() throws SecurityException{...}//获取变量与方法列表。重点public Method[] getMethods() throws SecurityException{...}public Field getField(String name)throws NoSuchFieldException, SecurityException{...}。。。
1、声明时赋值,可以指向本类实例与子类实例。即一定要具有继承关系,包括接口。
//类B 是类A 的子类,或B 实现A,则:A a=new A();A b=new B();//可行B b1=new A();//反之,不可行2、声明不同,本质不同,强制转换:
//同上A a=new B();B b=(B)a;//本质类型相同,但声明类型不同时,需强制转换。强制转换只能从声明的类型转换为本质类型。3、声明相同,直接赋值。(一定记得初始化)
三、泛型Generics
JDK1.5 中推出,主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构。用泛型代表声明时不确定的类型,多个泛型用逗号相隔。
1、泛型类声明
class 类名<泛型列表>或通过extends 界定泛型范围:
class 类名<泛型T1 extends 某各类,泛型T2 >
注意:Java 中泛型类和C ++模板有很大不同,未用extends 指明为某个类的子类的泛型,只能调用最基础的Object 类的方法,如 toString,当然,我们可自己定义泛型的方法,也可重写Object 的toString 等方法。
2、泛型接口声明
interface 接口名<泛型列表>与泛型类类似。
3、怎么使用泛型?
可用泛型实现类似多态功能,但最主要的是用于集合与链表。
四、java.util 包中链表、集合、散列映射
1、泛型链表List 接口
常用的几个:LinkedList、Stack、Vector
LinkedList<E> 泛型类:
创建:
LinkedList<String> list=new LinkedList<String>();//创建String型链表添加:
add(E e);add(int index,E e);addFirst(E e);addLast(E e);//和顺序添加相同删除:
clear();//清空E remove();//删除并返回链表头元素E remove(int index);E remove(Object e);//移除并返回第一个匹配的元素E removeFirst();E removeLast();查找:
E peek();//查找第一个元素E peekFirst();E peekLast();E get(int index);E getFirst();E getLast();修改:
E set(int index,E e);//设置并返回设置元素其它:
int size();Object[] toArray();//所有元素生成数组T[] toArray(T[] a);
2、Map<K,V>泛型接口
特点:键值对存储,键不能重复,不能为null。
常用:HashMap<K,V>。此外,Properties 也实现了该接口,Properties 在Spring 中比较常用。
HashMap<K,V>:
创建:
HashMap<String,ElementClass> map=new HashMap<String,ElementClass>();
3、Set<E> 泛型接口
特点:不用元素添加的先后顺序存储,而是使用数据“大小”一层层依次排列,适合存储数值型、字符串型(会以字母判断大小)数据。
常用:TreeSet<E>、HashSet<E>
TreeSet<E>:
创建:
TreeSet<String> tree=new TreeSet<String>();添加:
boolean add(E);//返回是否成功删除:
boolean remove(Object o);void clear();查找:
E first();E last();boolean contains(Object o);//判断是否包含元素
简单总结:
List 特点:按元素添加顺序排列,顺序存储;Map 特点,以键值对方式按元素添加顺序存储;Set特点,常用的HashSet<E>是按哈希码方式判断元素,具体那种结构存储不太清楚,TreeSet<E>按二叉树结构存储,树中元素按值的大小排列。
- Java —— Object、Class、泛型与集合
- JAVA基础——Object类和Class类
- java Class object
- java Object class分析
- Java Class Object
- Java Object和Class
- Java Class&Object
- Java 冒泡排序List<Object>泛型集合对象
- java中Class与Object及反射机制
- java中Class与Object及反射机制
- java中Class与Object及反射机制
- Scala和Java的区别--Object与Class的区别
- Java基础(十一)——集合框架与泛型
- Java基础——泛型与集合
- JAVA集合与泛型
- Java 集合与泛型
- java 集合与泛型
- java集合与泛型
- 最大值
- Educational Codeforces Round 19 ABCDE题解
- 动态规划练习--18(买书)
- 代码Python入门(一、基础语法)
- poj 2524 Ubiquitous Religions
- Java —— Object、Class、泛型与集合
- Linux 信号 模拟实现sleep
- Gym
- 正则补充
- 【SSLGZ 2647】线段树练习四
- OCR车架号识别
- AJAX跨域解决方案
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) ABCD
- caffemodel做分类所有类别得分一样的解决办法