- 浏览: 224377 次
- 性别:
- 来自: 烟台
文章分类
最新评论
-
KateAndNomi2333:
kunchong21 写道tinguo002 写道List l ...
ArrayList深拷贝的一种实现方法 -
kunchong21:
tinguo002 写道List list1 = new Ar ...
ArrayList深拷贝的一种实现方法 -
suihr:
你设置的操作系统的时区正确吗?
Tomcat5.5时区设置 -
xiao_Yao:
我用windows8 tomcat5.5无法 使用 呀
Tomcat5.5时区设置 -
hftgoodgood:
hftgoodgood 写道 ...
通用权限管理系统设计篇(三)——概要设计说明书
http://blog.csdn.net/wjp553650958/archive/2009/09/28/4601103.aspx
JAVA_高级特性(hashCode,clone,比较器,Class反射,序列化)
//HashCode方法,JAVA中的对象都有自身的HashCode码
class Person02{
private String name;
private int age;
public Person02(String name,int age){
this.name=name;
this.age=age;
}
public String toString(){
return "姓名:"+this.name+"年龄:"+this.age;
}
//复写equals 和 HashCode 方法
//HashCode 方更多的是表示对象 的地址
public boolean equals(Object obj){
return true;
}
public int hashCode(){
return this.name.hashCode()+this.age*1000;
}
}
public class AdvDemo02 {
public static void main(String[] args) {
Map m=new HashMap();
m.put(new Person02("zhansan",30),"zhansan");
m.put(new Person02("zhansan",20),"zhansan");
//如果不覆写equals 和 HashCode 方法的话是不能查找的得到 的
System.out.println(m.get(new Person02("zhansan",30)));
System.out.println(m.get(new Person02("zhansan",10)));
}
}
//对象序列化
//对象序列化是指把对象写入到流中,对象的反序列化是指从流中恢复对象
//其优点是:即使程序运行结束,对象仍然可以保存下来。必须实现Serializable接口
//一个类想实现序列号,必须实现Serializable接口
//如果某个属性不要求进行序列化,则用关键字transient。
class Person implements Serializable
{
private String name;
//private int age;
//如果某个属性不要求进行序列化
private transient int age;
public Person(String name,int age){
this.name = name;
this.age = age ;
}
public String toString(){
return this.name+" "+this.age ;
}
}
//Serializable接口
//此接口只是一个声明接口,表示实现此接口的类可以被实例化
//如果某个属性不要求进行序列化,则用关键字transient。
public class SerializableTest
{
public static void main(String args[])throws Exception{
Person p = new Person("liuwei",23);
//序列化。谁为ObjectOutputStream对象实例化就向哪里输出
ObjectOutputStream oos = null;
oos = new ObjectOutputStream(new FileOutputStream(new File("c:\\123.txt")));
oos.writeObject(p);
//反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("c:\\123.txt")));
Person p1 = (Person)ois.readObject();
System.out.println(p1);
ois.close();
oos.close();
}
}
//克隆方法的使用,必须实现Cloneable接口
//而且必须覆写Object类的clone方法
//protected Object clone()throws CloneNotSupportedException
//Cloneable也是一个标识接口。和类似于Serializable
class Person03 implements Cloneable{
public String name;
private int age;
public Person03(String name,int age){
this.name=name;
this.age=age;
}
public String toString(){
return "姓名:"+this.name+" 年龄:"+this.age;
}
//扩大父类的权限为公共的
@Override
public Object clone()
throws CloneNotSupportedException{
return super.clone();
}
}
public class AdvDemo03 {
public static void main(String[] args) throws Exception {
Person03 p=new Person03("zhansan",12);
Person03 p2=(Person03) p.clone();
p2.name="lisi";
System.out.println(p);
System.out.println(p2);
//System.out.println(p2.age);
}
}
//比较器:Array类是一个专门用于数组排序的,可以对任何数据进行排序
//对象排序的内容必须实现Comparable接口,覆写compareTo方法定义规则
//还可以用在TreeSet上实际上TreeSet也需要比较器的支持
class Person5 implements Comparable{
private String name;
private float score;
private int age;
public Person5(String name,int age,float score){
this.name=name;
this.age=age;
this.score = score ;
}
public String toString(){
return "姓名:"+this.name+" 年龄:"+this.age+"分数"+this.score;
}
@Override
public int compareTo(Object obj){
Person5 p=(Person5)obj;
if(p.score>this.score){
return 1;
}else if(p.score<this.score){
return -1;
}else{
//如果成绩相等则判断年龄
if(p.age>this.age){
return 1;
}else if(p.age<this.age){
return -1;
}else{
return 0;
}
}
}
}
public class AdvDemo5 {
public static void main(String args[])
{
/*Person5 p[] = new Person5[5] ;
p[0] = new Person5("张三",20,96) ;
p[1] = new Person5("李四",19,96) ;
p[2] = new Person5("王五",19,97) ;
p[3] = new Person5("赵六",21,78) ;
p[4] = new Person5("孙七",20,80) ;
Arrays.sort(p) ;
for(int i=0;i<p.length;i++)
{
System.out.println(p[i]) ;
}*/
//如果把compareTo方法除掉,则会包类型转换异常java.lang.ClassCastException
Set s = new TreeSet() ;
s.add(new Person5("张三",20,96)) ;
s.add(new Person5("李四",19,96)) ;
s.add(new Person5("王五",19,97)) ;
s.add(new Person5("赵六",21,78)) ;
s.add(new Person5("孙七",20,80)) ;
Iterator iter = s.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}
//Class类的用法:反射
class Person7
{
private String name ;
private int age ;
private float score ;
public Person7(String name,int age,float score)
{
this.name = name ;
this.age = age ;
this.score = score ;
}
public String toString()
{
return "姓名:"+this.name+",年龄:"+this.age+",成绩:"+this.score ;
}
};
public class AdvDemo7
{
public static void main(String args[]) throws Exception
{
Person7 p = null ;
// 通过Class实例化Person7对象
// p = (Person7)Class.forName("Person7").newInstance() ;
// 根源在于,程序实例化时需要使用构造方法
Class cl = Class.forName("Person7") ;
Object obj[] = {"张三",new Integer(30),new Float(89)} ;
Constructor c = cl.getConstructors()[0] ;
p = (Person7)c.newInstance(obj) ;
System.out.println(p) ;
}
};
发表评论
-
eclipse下启动tomcat出现Setting property 'source' to 'org.eclipse.jst.jee.server: '错误的
2012-09-19 13:52 943eclipse下启动tomcat出现Setting pr ... -
java List remove 时的小问题
2011-11-16 17:33 1643From:http://hi.baidu.com/xia ... -
HP ProLiant DL380 G6 服务器 - 内存的插法详解
2011-11-15 14:05 2505HP ProLiant DL380 G6 服务器 - 内 ... -
Tomcat5.5时区设置
2011-10-21 11:00 2007项目中遇到Tomcat时间跟系统时间不一致的情况,在网上 ... -
记录tomcat控制台输出日志
2010-11-11 10:23 1728今天把用了2年的tomcat重新整了下,终于解决了日志的记录 ... -
成功配置tomcat的log4j日志系统,格式:HTML+每天以yyyy-mm-dd.log命名的日志文件
2010-11-11 10:19 6233http://www.blogjava.net/flysky1 ... -
关于img src值为空时,2次请求问题的深入调研
2010-08-25 14:19 1380http://hi.baidu.com/bdui/blog ... -
java String.getBytes()编码问题
2010-07-29 16:11 1681http://hi.baidu.com/miserce/b ... -
Java 中的位运算
2010-06-28 09:50 1092移位运算符 包括: “>> 右移 ... -
设置eclipse启动参数解决内存不足问题
2010-03-16 16:17 2018http://www.21jn.net/html/62/n-5 ... -
com.mysql.jdbc.CommunicationsException: Communications link failure due to under
2010-01-16 14:08 2580com.mysql.jdbc.CommunicationsEx ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2010-01-13 16:01 963PO(persistant object) 持久对 ... -
Eclipse下插件安装
2009-11-09 14:09 936Eclipse plugin resource center ... -
Java/J2EE中文问题终极解决之道
2009-10-21 14:23 723Java/J2EE中文问题终极解 ... -
ArrayList深拷贝的一种实现方法
2009-09-16 11:29 15906大家应该理解浅拷贝和 ... -
ADO封装类实现文件
2009-09-14 15:51 1318http://developer.51cto.com 2 ... -
使用Java多线程实现任务分发
2009-09-14 10:28 1027使用Java多线程实现任 ... -
ExecutorService来进行线程池的方式实现多线程
2009-09-12 10:16 2176ExecutorService来进行线程池的方式实现多线程 ... -
openssl 生成pem 建立CA
2009-08-24 13:45 2310openssl 生成pem 建立CA 关 ... -
Java删除目录及目录下的所有文件
2009-08-21 15:45 2561Java删除目录及目录下的所有文件 java中删除目录事 ...
相关推荐
综上所述,这些知识点覆盖了Java高级工程师面试中常见的几个领域,包括内存管理、垃圾回收机制、IO流处理、并发编程、锁机制、反射机制、类加载过程、对象序列化以及分布式唯一ID生成策略等。掌握这些核心概念和技术...
- **ObjectInputStream/ObjectOutputStream**:用于对象序列化和反序列化的流。 - **Scanner类** - `Scanner`类主要用于从标准输入或其他输入源读取数据,支持多种数据类型的解析。 ### 正则表达式 正则表达式是...
Java八股文主要涵盖Java语言的基础知识,包括对象方法、数据类型、序列化、字符串处理、方法重载与重写、反射、动态代理以及集合框架等核心概念。下面将逐一详细解析这些知识点。 1. **Object类相关方法** - `...
Java对象可以通过new关键字、clone方法和反序列化创建。 二十五、不可变对象 27. 什么是不可变对象?好处是什么? 不可变对象是指对象的状态不能被修改,好处是线程安全和数据安全。 二十六、值传递和引用传递 ...
- **实现Serializable接口是Java对象序列化的前提条件。** - **允许对象被序列化和反序列化。 #### 四十六、显式指定serialVersionUID的原因 - **保证序列化兼容性:** 如果类的结构发生变化,serialVersionUID保持...
《Effective Java》是Java开发领域的经典著作,由Joshua Bloch撰写,中文版为Java开发者提供了深入理解语言特性和最佳实践的机会。这本书包含了大量实用的编程建议,旨在帮助程序员写出更高效、更可靠、更可维护的...
- 数据序列化与反序列化:理解对象序列化的过程,以及Serializable接口的使用。 以上内容涵盖了Java核心知识的主要方面,对于初学者和有经验的开发者都是很好的复习资源。通过深入学习和实践,可以有效提升Java...
Class类是Java反射机制的关键部分,它表示运行时的类信息。以下是一些重要的Class类方法: 2.1 `forName(String className)`:静态方法,根据给定的全限定类名返回对应的Class对象,如果没有找到对应类,会抛出`...
13. **使用可序列化接口谨慎**:实现Serializable接口使得对象能够被序列化,但也增加了安全风险和版本控制的复杂性。 14. **使用finally块来确保资源的释放**:无论try-catch块的结果如何,finally块中的代码总会...
- 序列化和反序列化:对象序列化成字节流,然后再反序列化为新的对象。 10、**switch语句与String**:在Java 7及以上版本,`switch`语句支持`String`类型,但不支持`long`类型。 11、**Object类中的公共方法**: ...
序列化接口的 id 用于标识对象的版本号,以便在反序列化时可以正确地还原对象。 22. hashCode 方法的作用? hashCode 方法用于返回对象的哈希码,以便在哈希表中存储对象。 23. 构造器 Constructor 是否可被 ...
27. **Java创建对象的方式**:包括new, clone, 序列化,反射等。 28. **能否自定义java.lang.String类**:不建议也不容易,因为String类在JVM中被特殊处理。 29. **Return和finally语句块的顺序**:finally块先于...
- **枚举实现**:线程安全,无需担心反射和序列化问题,但无法做到延迟加载。 3. **Comparable 和 Comparator**: - **Comparable**:接口用于实现对象的自然排序,比如String、Integer等类已经实现了Comparable...
这确保序列化版本在类的实例之间一致。 12. **UCF_USELESS_CONTROL_FLOW**:无用的控制流,可能是逻辑错误。检查条件分支是否确实必要。 13. **BC_IMPOSSIBLE_CAST**:不可能的类型转换,表明代码可能存在错误。...
- 使用反射`Class.forName().newInstance()`。 - 通过序列化`ObjectInputStream.readObject()`。 - **5.8 能否自己定义一个java.lang.String类:** - 不推荐自行定义`java.lang.String`类,因为该类位于标准库中...
Java反射的作用与原理** - **作用**:动态获取类的信息并操作对象。 - **原理**:通过Class对象获取类型信息,利用反射API创建实例和调用方法。 **31. List, Set, Map三者的区别** - **List**:有序集合,元素可...
- 转换流和对象流:ObjectInputStream和ObjectOutputStream用于序列化和反序列化。 6. **反射** - 类的加载:了解ClassLoader的工作原理。 - 获取类信息:Class类的使用,获取类的构造器、方法和字段。 - 动态...
9. **创建对象的几种方式**:通过`new`关键字、反射、`clone`方法和序列化机制。其中,反射和序列化可以降低耦合性,`new`关键字的耦合度最高。 10. **switch语句**:在Java 1.7之前不支持字符串作为参数,但从1.7...
Java IO中,流分为字节流和字符流,序列化用于持久化对象,字节流和字符流主要区别在于处理单元,PrintStream等流类用于格式化输出。 JVM内存结构包括堆、栈、方法区、程序计数器、本地方法栈等,垃圾收集算法有...