- 浏览: 1151042 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (411)
- Java Foundation (41)
- AI/机器学习/数据挖掘/模式识别/自然语言处理/信息检索 (2)
- 云计算/NoSQL/数据分析 (11)
- Linux (13)
- Open Source (12)
- J2EE (52)
- Data Structures (4)
- other (10)
- Dev Error (41)
- Ajax/JS/JSP/HTML5 (47)
- Oracle (68)
- FLEX (19)
- Tools (19)
- 设计模式 (4)
- Database (12)
- SQL Server (9)
- 例子程序 (4)
- mysql (2)
- Web Services (4)
- 面试 (8)
- 嵌入式/移动开发 (18)
- 软件工程/UML (15)
- C/C++ (7)
- 架构Architecture/分布式Distributed (1)
最新评论
-
a535114641:
LZ你好, 用了这个方法后子页面里的JS方法就全不能用了呀
页面局部刷新的两种方式:form+iframe 和 ajax -
di1984HIT:
学习了,真不错,做个记号啊
Machine Learning -
赵师傅临死前:
我一台老机器,myeclipse9 + FB3.5 可以正常使 ...
myeclipse 10 安装 flash builder 4.6 -
Wu_Jiang:
触发时间在将来的某个时间 但是第一次触发的时间超出了失效时间, ...
Based on configured schedule, the given trigger will never fire. -
cylove007:
找了好久,顶你
Editable Select 可编辑select
Marker interfaces:
又叫Tagging Interfaces。标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。常见的有Serializable Cloneable Remote EventListener
你当然可以任意定义没有任何方法和属性的接口,但肯定不应该称为标识接口,因为JDK里的“标识接口”不光是“只有个名字”这么简单,更重要的是,实现这些标志接口的类,确实多了功能,尽管你看不到这些功能是怎么实现的。比如,Serializable,实现了这个接口,那这个序列化的工作,到底是谁做的那?Cloneable,实现了这个接口,并在重写的clone()方法里只是调用了一下super.clone(),就产生了一个全新的对象,要知道Object里的clone()方法是没有任何实现的,这个克隆的工作,到底是谁完成的那?JVM or Reflection,但是你看不到它们。
关于标志接口的对于错,争论是有的:
标志接口是对接口的误用,应该被避免,使用标志接口的类,都是一些相当古老的类。Java 5 加入 注解 特性后,标志接口更不会再有出现的必要。
http://www.coderanch.com/how-to/java/Java-FAQ#marker
http://www.artima.com/intv/issuesP.html
也有持不同意见的,详见 Effective Java Item 37.
常用的标识接口:
Serializable:
1 类变量和标记为transient的变量不会被序列化;
2 序列化使用 ObjectOutputStream ,反序列化使用FileInputStream
3 如果对象在序列化及反序列化的过程中需要做一些特殊的处理,那么你需要在对象所在类里加入下面的方法:
private void writeObject(ObjectOutputStream oos) throws IOException { oos.defaultWriteObject(); // Write/save additional fields oos.writeObject(new java.util.Date()); } // assumes "static java.util.Date aDate;" declared private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { ois.defaultReadObject(); // Read/initialize additional fields aDate = (java.util.Date)ois.readObject(); }
http://java.sun.com/developer/technicalArticles/ALT/serialization/
http://www.tutorialspoint.com/java/java_serialization.htm
http://bluepopopo.iteye.com/blog/486548
http://www.ibm.com/developerworks/cn/java/j-lo-serial/index.html
Cloneable & Object.clone():
1
引用
浅拷贝:只复制一个对象(包括其为基本类型、String的属性),对象内部存在的指向其他对象数组或者引用则不复制
深拷贝:对象,对象内部的引用均复制
为了更好的理解它们的区别我们假设有一个对象A,它包含有2对象对象A1和对象A2:
对象A进行浅拷贝后,得到对象B但是对象A1和A2并没有被拷贝:
对象A进行深拷贝,得到对象B的同时A1和A2连同它们的引用也被拷贝:
在理解了深拷贝和浅拷贝后,我们来看看Java的深拷贝和浅拷贝实现。java.lang.Object的clone()方法默认是返回一个浅拷贝对象。因此如果要用clone()方法实现一个深拷贝,我们必须对每个对象的clone()方法进行特别实现。当对象层次复杂的时候,这样做不但困难而且浪费时间和容易出现错误,特别有时候你不但需要深拷贝同时你也对这个对象进行浅拷贝的时候,你会发现写这个clone()方法真不是一个好的解决方案。
那么除了clone()方法,我们还可以怎么实现呢?答案是序列化,实现步骤和思路是把要拷贝的对象输出成byte array,然后再利用ObjectInputStream转换出新的对象。下面是代码:
深拷贝:对象,对象内部的引用均复制
为了更好的理解它们的区别我们假设有一个对象A,它包含有2对象对象A1和对象A2:
对象A进行浅拷贝后,得到对象B但是对象A1和A2并没有被拷贝:
对象A进行深拷贝,得到对象B的同时A1和A2连同它们的引用也被拷贝:
在理解了深拷贝和浅拷贝后,我们来看看Java的深拷贝和浅拷贝实现。java.lang.Object的clone()方法默认是返回一个浅拷贝对象。因此如果要用clone()方法实现一个深拷贝,我们必须对每个对象的clone()方法进行特别实现。当对象层次复杂的时候,这样做不但困难而且浪费时间和容易出现错误,特别有时候你不但需要深拷贝同时你也对这个对象进行浅拷贝的时候,你会发现写这个clone()方法真不是一个好的解决方案。
那么除了clone()方法,我们还可以怎么实现呢?答案是序列化,实现步骤和思路是把要拷贝的对象输出成byte array,然后再利用ObjectInputStream转换出新的对象。下面是代码:
public static Object copy(Object oldObj) { Object obj = null; try { // Write the object out to a byte array ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bos); out.writeObject(oldObj); out.flush(); out.close(); // Retrieve an input stream from the byte array and read // a copy of the object back in. ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream in = new ObjectInputStream(bis); obj = in.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); } return obj; }
发表评论
-
J2SE Evolution
2013-04-11 15:39 1188Java 7 New Features Java SE 7 ... -
未完 Java: IO & NIO(new I/O)
2013-01-11 20:56 2062适用: event and data-driven apps ... -
未完 java设计: naming convention | 命名规范
2012-11-20 16:45 2134应该遵循的规范: 类/接口/属性名,使用名词或形容词 ... -
未完 Java: enum 枚举
2012-11-19 20:29 1826http://stackoverflow.com/que ... -
Java多线程之 concurrent 并发包
2012-11-01 07:47 2028Java Tutorials -> Concur ... -
未完 Java Tips & Tricks & Notes
2012-09-12 10:00 1134Hidden Features of Java: h ... -
未完 Java Socket
2012-09-12 08:42 1023Java SocketJava SocketJava Sock ... -
Java For-each Loop & Iterable | 增强型For循环和Iterable接口
2012-09-11 21:50 2066增强型For循环没什么好说的,Just see link ... -
未完 Java Collections | 容器
2012-09-06 11:35 1841Sources: http://docs.oracle.com ... -
Java object Initialization (class Instantiation) | 对象的初始化(即类的实例化)
2012-09-03 09:12 3011类实例即对象 ... -
未完Java class&interfac 's Loading, Linking and Initializing | 类与接口的加载、链接和初始化
2012-08-31 19:01 1681JVM装载一个类的时候,首先检查他有没有父类,如果有父类则装载 ... -
未完 java Static 总结
2012-08-31 18:47 1407static可以用来修饰: 字段 Fields 方法 Meth ... -
未完 JVM Runtime Data Areas & Java Memory Model | 内存分配模型 & Java数据存储
2012-08-31 18:43 1892Java虚拟机内存分配模型 需精读:Chapter 5 of ... -
Java Data Types & Literals | 数据类型 和 字面量
2012-08-30 18:12 3954Java数据类型划分: OR http:// ... -
未完 Variables 变量 (Instance/Class/Local)
2012-08-29 10:59 1712Local/Instance/Class Variables ... -
未完 Regular Expressions | 正则表达式
2011-08-25 11:43 1532Extended Regular Expression ... -
java Date(util.Date/sql.Date/sql.Timestamp/sql.Time) & Oracle DATE Type 时分秒 精度问题
2011-05-17 09:32 3971遇到的问题描述: 数据库为Oracle,其jdbc驱动为ojd ... -
Java byte code (bytecode)
2011-05-04 02:55 3890keys: bytecode, byte code, opco ... -
Java Classloading Mechanism : ClassLoader & ASM & 动态字节码增强
2011-04-21 13:29 2431Setting the class path: http:// ... -
class literal & instance.getClass() & Class.forName(String className)
2011-04-20 12:33 2342常用的几种取得Class类实例的方式: 1 class lit ...
相关推荐
联想旭日C430系列机型支持Vista&7系统BIOS及“Marker”文件。 联想昭阳E390&旭日420系列机型支持Vista&7系统BIOS及“Marker”文件。 注意:此附件marker文件适用于伟创(Wistron)所有主板机型,其中包括:昭阳E390/...
联想旭日C430系列机型支持Vista&7系统BIOS及“Marker”文件。 联想昭阳E390&旭日420系列机型支持Vista&7系统BIOS及“Marker”文件。 注意:此附件marker文件适用于伟创(Wistron)所有主板机型,其中包括:昭阳E390/...
本项目聚焦于在Android平台上如何利用百度地图SDK实现自定义Marker,以满足个性化需求。 首先,我们需要理解百度地图SDK的基本用法。在Android项目中,需要引入百度地图的SDK库,这可以通过在`build.gradle`文件中...
Student.java 定义一个用来序列化的类 ThreadIn.java 接收数据用的线程类 ThreadOut.java 发送数据用的线程类 TypeFile.java 显示文件内容的类 useScanner.java 用Scanner接收用户的输入 第8章 示例描述:本章...
接下来,创建一个地图fragment或activity,并初始化百度地图。在onCreateView或onCreate方法中设置地图控件并加载地图: ```java MapView mapView = findViewById(R.id.map_view); BaiduMap baiduMap = mapView....
标识接口(Marker Interface)如`Serializable`,没有任何方法,仅仅表示实现该接口的类具有特定的性质。常量接口(Constant Interface)虽然可以用来存储常量,但不推荐这样做,因为这违反了接口的设计原则,更好的...
在使用高德地图进行开发时,我们经常需要在地图上展示一些特定的点,并且有...例如,你可以根据图片内容为不同的marker设置不同的图标,或者使用图片序列来创建动态效果。总的来说,这需要结合实际项目需求来具体实现。
Marker 5.01:深入解析笔记本标记工具的高效使用》 Lenovo&TinkPad; Marker 5.01是一款专为Lenovo和TinkPad笔记本设计的标记工具,旨在提升用户在工作和学习中的效率。这款工具的主要功能在于帮助用户在屏幕上进行...
在Android开发中,高德地图API提供了一个强大的功能,即让地图上的Marker实现平滑移动。这个功能在很多场景下非常实用,比如模拟导航、展示动态数据等。本示例项目"Android_Move_Example-master"显然是一个专为演示...
`TestActivity.java`很可能是项目的主活动,其中包含了地图的初始化、marker的添加以及事件监听等逻辑。在这个活动中,开发者可能使用了百度地图SDK提供的`MapView`类来加载地图,并调用`BaiduMap`对象的`addOverlay...
标题中的“联想所有机型marker”可能是指一个包含联想公司各种型号电脑硬件配置、规格或标识符的集合。在IT行业中,"marker"这个词在这种上下文中可能是标记、指示器或者特征的意思,用来区分不同型号的联想产品。这...
1. **创建Marker对象**:首先,你需要实例化一个新的Marker对象,指定其位置。例如: ```javascript var marker = new google.maps.Marker({ position: {lat: -34.397, lng: 150.644}, // 坐标位置 map: map, // ...
在实际应用中,你可能还需要处理Marker的点击事件,可以通过`MapView`的`OnMarkerClickListener`接口实现。当用户点击Marker时,可以在回调方法`onMarkerClick()`中处理相关逻辑: ```java map....
在开发Web应用时,地图组件常常扮演着重要角色,而百度地图API则为开发者提供了丰富的功能,包括在地图上添加标记(marker)。本教程将详细讲解如何利用百度地图API和CSS3来实现marker的动画效果。 首先,让我们...
在本实例中,我们将探讨如何利用SuperMap iClient 6R for JavaScript来添加marker(标记)并进行连线,以实现地理空间数据的可视化。 首先,我们需要了解JavaScript中的marker是什么。Marker通常表示地图上的一个...
在开发基于地图的应用时,尤其是使用百度地图API时,可能会遇到一个常见的问题——当需要在地图上显示大量标记(marker)时,地图加载会变得卡顿,用户体验显著下降。这个问题通常由于JavaScript处理大量DOM元素导致...
3. **创建Marker**:使用MapKit提供的接口创建Marker对象,设置其位置、图标等属性,并将其添加到地图上。 4. **监听Marker拖动**:注册OnMarkerDragListener,重写onMarkerDragStart、onMarkerDrag和...
Matlab画图时Marker过多的解决方法 一、问题描述 在Matlab中画图时,Marker的数量过多会使图像变得拥挤不清晰,影响图像的美观性和可读性。这种情况在写论文时尤其常见,特别是在画曲线图时,Marker的密集会使图像...
在使用百度地图API进行开发时,经常会遇到一个问题:在实现地图上的marker聚合功能时,当marker数量过多,为了提高用户体验,我们会使用聚合技术将多个marker合并为一个大的标记点。然而,一旦添加了label(标记文字...
2. 初始化ClusterManager:高德地图API中的ClusterManager是负责管理Marker并进行聚合的类。你需要实例化一个ClusterManager对象,并将其与地图视图关联。 3. 添加Marker到ClusterManager:将之前创建的Marker对象...