Java java相对路径怎么写写这个自定义class的toString方法?

JAVA中toString方法的作用 - 缺心眼的公牛 - 博客园
我每天都在成长和进步
ObjectObject&&
System.out.println(xx)&xx&StringxxtoString()
public class Orc{
public static class A
public String toString()
return "this is A";
public static void main(String[] args)
A obj = new A();
System.out.println(obj);
A obj=new A();
System.out.println(obj);
:this is A
public class Orc{
public static class A
public String getString()
return "this is A";
public static void main(String[] args)
A obj = new A();
System.out.println(obj);
System.out.println(obj.getString());
:xxxx@xxxxxxx
System.out.println(obj.getString());
:this is A
toString&println&
1 public class Zhang 2
public static void main(String[] args) 6
StringBuffer MyStrBuff1 = new StringBuffer();10 11
MyStrBuff1.append("Hello, Guys!");12 13
System.out.println(MyStrBuff1.toString());14 15
MyStrBuff1.insert(6, 30);16 17
System.out.println(MyStrBuff1.toString());18 19
值得注意的是, 若希望将StringBuffer在屏幕上显示出来, 则必须首先调用toString方法把它变成字符串常量, 因为PrintStream的方法println()不接受StringBuffer类型的参数.
1 public class Zhang2 {3
public static void main(String[] args)4
String MyStr = new StringBuffer();6
MyStr = new StringBuffer().append(MyStr).append(" Guys!").toString();7
System.out.println(MyStr);
toString()方法在此的作用是将StringBuffer类型转换为String类型.
1 public class Zhang2 {3
public static void main(String[] args)4
String MyStr = new StringBuffer().append("hello").toString();6
MyStr = new StringBuffer().append(MyStr).append(" Guys!").toString();7
System.out.println(MyStr);
关于String ,StringBuffer的性能
博客分类: java语言
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。
下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。
1.对象的生成和大小的调整。
JAVA程序设计中一个普遍的问题就是没有好好的利用JAVA语言本身提供的函数,从而常常会生成大量的对象(或实例)。由于系统不仅要花时间生成对象,以后可能还需花时间对这些对象进行垃圾回收和处理。因此,生成过多的对象将会给程序的性能带来很大的影响。
例1:关于String ,StringBuffer,+和append
JAVA语言提供了对于String类型变量的操作。但如果使用不当,会给程序的性能带来影响。如下面的语句:
String name=new String("HuangWeiFeng");
System.out.println(name+"is my name");
看似已经很精简了,其实并非如此。为了生成二进制的代码,要进行如下的步骤和操作:
(1) 生成新的字符串 new String(STR_1);
(2) 复制该字符串;
(3) 加载字符串常量"HuangWeiFeng"(STR_2);
(4) 调用字符串的构架器(Constructor);
(5) 保存该字符串到数组中(从位置0开始);
(6) 从java.io.PrintStream类中得到静态的out变量;
(7) 生成新的字符串缓冲变量new StringBuffer(STR_BUF_1);
(8) 复制该字符串缓冲变量;
(9) 调用字符串缓冲的构架器(Constructor);
(10) 保存该字符串缓冲到数组中(从位置1开始);
(11) 以STR_1为参数,调用字符串缓冲(StringBuffer)类中的append方法;
(12) 加载字符串常量"is my name"(STR_3);
(13) 以STR_3为参数,调用字符串缓冲(StringBuffer)类中的append方法;
(14) 对于STR_BUF_1执行toString命令;
(15) 调用out变量中的println方法,输出结果。
由此可以看出,这两行简单的代码,就生成了STR_1,STR_2,STR_3,STR_4和STR_BUF_1五个对象变量。这些生成的类的实例一般都存放在堆中。堆要对所有类的超类,类的实例进行初始化,同时还要调用类极其每个超类的构架器。而这些操作都是非常消耗系统资源的。因此,对对象的生成进行限制,是完全有必要的。
经修改,上面的代码可以用如下的代码来替换。
StringBuffer name=new StringBuffer("HuangWeiFeng");
System.out.println(name.append("is my name.").toString());
系统将进行如下的操作:
(1) 生成新的字符串缓冲变量new StringBuffer(STR_BUF_1);
(2) 复制该字符串缓冲变量;
(3) 加载字符串常量"HuangWeiFeng"(STR_1);
(4) 调用字符串缓冲的构架器(Constructor);
(5) 保存该字符串缓冲到数组中(从位置1开始);
(6) 从java.io.PrintStream类中得到静态的out变量;
(7) 加载STR_BUF_1;
(8) 加载字符串常量"is my name"(STR_2);
(9) 以STR_2为参数,调用字符串缓冲(StringBuffer)实例中的append方法;
(10) 对于STR_BUF_1执行toString命令(STR_3);
(11)调用out变量中的println方法,输出结果。
由此可以看出,经过改进后的代码只生成了四个对象变量:STR_1,STR_2,STR_3和STR_BUF_1.你可能觉得少生成一个对象不会对程序的性能有很大的提高。但下面的代码段2的执行速度将是代码段1的2倍。因为代码段1生成了八个对象,而代码段2只生成了四个对象。
String name= new StringBuffer("HuangWeiFeng");
name+="is my";
name+="name";
StringBuffer name=new StringBuffer("HuangWeiFeng");
name.append("is my");
name.append("name.").toString();
因此,充分的利用JAVA提供的库函数来优化程序,对提高JAVA程序的性能时非常重要的.其注意点主要有如下几方面;Java-补充 常用类库_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者贡献于
评价文档:
23页免费30页免费34页免费23页免费31页免费33页免费19页免费10页免费8页免费8页免费
喜欢此文档的还喜欢32页5下载券30页5下载券80页免费35页1下载券38页免费
Java-补充 常用类库|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:627.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢包含自定义类的Map如何转换成JSON?
[问题点数:40分,结帖人hqgcxy]
包含自定义类的Map如何转换成JSON?
[问题点数:40分,结帖人hqgcxy]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。您现在的位置: &
获取JavaScript用户自定义类的类名称的代码
获取JavaScript用户自定义类的类名称的代码
我们知道,虽然JavaScript是基于对象(object-based)的语言。但是使用其原形(prototype)特性,我们完全可以实现十分sexy的OO编成框架,这个可以看看经典论坛的文章'基本上实现&javascript&的&OOP&(0423版)'。 &&&&不过虽然我们实现了'类'这种概念,可是JavaScript的脚本系统却仍然是不认账的。我们并没有办法使用脚本系统中的typeof方法获取自定义类的类型,比如'类'JSClass定义如下: &function&JSClass() &{ &&&&this.Attribute1&=& &&&&this.Attribute2&=& &&&&this.Method1&=&function() &&&&{ &&&&&&&//&... &&&&}; &&&&this.Method2&=&function() &&&&{ &&&&&&&//&... &&&&}; &&&&this.toString&=&function() &&&&{ &&&&&&&return&'[class&JSClass]'; &&&&}; &} &&&&我们生成一个它的实例:var&jsclass&=&new&JSClass(); &&&&可是如果使用alert(typeof(jsclass)),我们只能得到'object'。而是用alert(jsclass),我们却得到'[class&JSClass]',这是对象实例默认调用toString()方法的结果。当然我们可以把类名称"JSClass"使用toString()方法来返回,不过这种依赖手动type来保证正确性的方法并不时很理想。 &&&&于是我们从类定义本身去想办法,由于JavaScript中的对象(Object)默认都实现了toString()方法,而且函数对象(Function)的toString()方法就是返回该函数的定义本身,这样我们就可以通过处理类定义来获取类名了。 &&&&我们通过对象实例的constructor属性,可以获取其构造函数的定义,而构造函数的名字也就是JavaScript用户自定义类的类名称。对于上面的例子,执行&var&strFun&=&nstructor.toString(),strFun就是构造函数的原始语句定义(和上面语句块内容相同)的字符串。我们从strFun中取出"函数名"(类名)就行了,可是这里需要注意。Function类的实例执行toString()时并不会格式化代码,比如我们把JSClass的构造函数写成如下格式: function &&&JSClass &&&( &&&) { &&&this.Attribute1&=& &&&this.Attribute2&=& &&&//&... } &&&&执行toString()后的strFun里代码也是这个样子。 &&&&所以获取类名还需要特别的小心,方法__typeof__的代码如下: &function&__typeof__(objClass) &{ &&&&&if&(&objClass&&&&nstructor&) &&&&&{ &&&&&&&&&var&strFun&=&nstructor.toString(); &&&&&&&&&var&className&=&strFun.substr(0,&strFun.indexOf('(')); &&&&&&&&&className&=&className.replace('function',&''); &&&&&&&&&return&className.replace(/(^\s*)|(\s*$)/ig,&'');&& &&&&&} &&&&&return&typeof(objClass); &} &&&&示例: &script&language="javascript"& alert(__typeof__(jsclass)); alert(__typeof__(JSClass)); alert(__typeof__(1)); alert(__typeof__([])); alert(__typeof__({})); &/script& &&&&结果分别为:"JSClass",&"Function",&"Number",&"Array"和"Object"。 &&&&这里需要注意两个地方,一是:jsclass和JSClass的区别,jsclass是类实例,而JSClass返回类型却是Function哦;第二个是如果是系统类型,使用typeof得到的类型都是小写的,比如number、array或objece啥的,而使用__typeof__获得的类型名称是和其类型名匹配的,首字母都大写。
&&&主编推荐
&&&热门试卷
&&&最新视频
&&&热门阅读
&&&最新问答
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-Java类加载原理及自定义类加载器-Java教程
||||||||||||
当前位置 &
Tag:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Java类加载原理及自定义类加载器
发表日期:
&&&&&和其他语言不同的是,Java是运行于Java虚拟机(JVM)。这就意味着编译后的代码是以
一种和平台无关的格式保存的,而不是某种特定的机器上运行的格式。这种格式和传统的可
执行代码格式有很多重要的区别。具体来说,不同于C或者C++程序,Java程序不是一个独
立的可执行文件,而是由很多分开的类文件组成,每个类文件对应一个Java类。 另外,这
些类文件并不是马上加载到内存,而是当程序需要的时候才加载。 类加载器就是Java虚拟
机中用来把类加载到内存的工具。而且,Java类加载器也是用Java实现的。这样你就不需要
对Java虚拟机有深入的理解就可以很容易创建自己的类加载器了。
&&&&&为什么要创建类加载器?
&&&&&&既然Java虚拟机已经有了类加载器,我们还要自己创建其他的吗?问得好。默认的类加载器
只知道如何从本地系统加载类。当你的程序完全在本机编译的话,默认的类加载器一般都工
作的很好。但是Java中最激动人心的地方之一就是很容易的从网络上而不只是本地加载类。
举个例子,浏览器可以通过自定义的类加载器加载类。 还有
很多加载类的方式。除了简单的从本地或者网络外,你还可以通过自定义Java中最激动人心
的地方之一:
* 执行非信任代码前自动验证数字签名
* 根据用户提供的密码解密代码
* 根据用户的需要动态的创建类
你关心的任何东西都能方便的以字节码的形式集成到你的应用中
自定义类加载器的例子
如果你已经使用过JDK(Java软件开发包)中的appletviewer(小应用程序浏览器)或者其他
Java嵌入式浏览器,你就已经使用了自定义类加载器了。Sun刚刚发布Java语言的时候,最
令人兴奋的一件事就是观看Java如何执行从远程网站下载的代码。执行从远程站点通过HTT
P连接传送来的字节码看起来有点不可思议。之所以能够工作,因为Java有安装自定义类加
载器的能力。小应用程序浏览器包含了一个类加载器,这个类加载器不从本地找Java类,而
是访问远程服务器,通过HTTP加载原始字节码文件,然后在Java虚拟机中转化为Java类。当
然类加载器还做了其他的很多事情:他们阻止不安全的Java类,而且保持不同页面上的不同
小程序不会互相干扰。Luke Gorrie写的一个包Echidna是一个开放的Java软件包,他允许在
一个Java虚拟机中安全的运行多个Java应用程序。它通过使用自定义类加载器给每个应用程
序一份类文件的拷贝来阻止应用程序之间的干扰。
java类加载器 :
java中默认有三种类加载器:引导类加载器,扩展类加载器,系统类加载器(也叫应用类加载器)
类加载器是Java最强大的特征之一。但是开发者常常忘记类加载。类加载器是在运行时负责寻找和加载类文件的类。Java允许使用不同的类加载器,甚至自定义的类加载器。
Java 程序包含很多类文件,每一个都与单个Java类相对应,这些类文件不像静态C程序,一次性加载入内存,它们随时需要随时加载。这就是类加载器与众不同的地 方。它从源文件(通常是.class 或 .jar文件)获得不依赖平台的字节码,然后将它们加载到JVM内存空间,所以它们能被解释和执行。默认状态下,应用程序的每个类由 java.lang.ClassLoader加载。因为它可以被继承,所以可以自由地加强其功能。
自定义类加载器
import java.io.*;&&&&
import java.net.*;&&&&
import java.util.*;&&&&
import java.lang.reflect.M&&&&
public class CustomClassLoader extends URLClassLoader {&&&&
&&&&ivate FileInputStream input =&&//文件输入流&&&&
&&&&private ByteArrayOutputStream out =&&//字节数组输出流&&&&
&&&&private String[] url =&&//类文件加载路径&&&&
&&&&private byte[] data = //类文件字节码&&&&
&&&&private String extensionalName = &&; //类文件扩展名&&&&
&&&&public CustomClassLoader(URL[] urls) throws Exception{&&&&
&&&&&&&&super(urls);&&&&
&&&&&&&&this.url = new String[urls.length];&&&&
&&&&&&&&for (int i = 0; i & urls. i++) {&&&&
&&&&&&&&&&&&&this.url[i] = urls[i].toURI().toString();&&&&
&&&&&&&&}&&&&
&&&&&* 解析URL&&&&
&&&&&*/&&&
&&&&private void setFilePath() {&&&&
&&&&&&&&for (int i = 0; i & this.url. i++) {&&&&
&&&&&&&&&&&&if (this.url[i].substring(0,4).toLowerCase().equals(&file&) == true) {&&&&
&&&&&&&&&&&&&&&&this.url[i] = this.url[i].substring(5);&&&&
&&&&&&&&&&&&}&&&&
&&&&&&&&}&&&&
&&&&&* 获得指定类名(包名+类名)文件的字节码&&&
&&&&&* @name name String&&&
&&&&&* @return byte[]&&&
&&&&&*/&&&
&&&&private byte[] getFileData(String name) {&&&&
&&&&&&&&try {&&&&
&&&&&&&&&&&&this.setFilePath();&&&&
&&&&&&&&&&&&for (String url : this.url) {&&&&
&&&&&&&&&&&&&&&&String fileName = url + name.replace('.', '/').concat(&.&) +&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&this.getExtensionalName();&&&&
&&&&&&&&&&&&&&&&input = new FileInputStream(new File(fileName));&&&&
&&&&&&&&&&&&&&&&if (input != null) {&&&&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&}&&&&
&&&&&&&&&&&&}&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&out = new ByteArrayOutputStream();&&&&
&&&&&&&&&&&&data = new byte[1024];&&&&
&&&&&&&&&&&&int len = -1;&&&&
&&&&&&&&&&&&while ((len = input.read(data)) != -1) {&&&&
&&&&&&&&&&&&&&&&out.write(data, 0, len);&&&&
&&&&&&&&&&&&}&&&&
&&&&&&&&&&&&data = out.toByteArray();&&&&
&&&&&&&&} catch (Exception e) {&&&&
&&&&&&&&&&&&e.printStackTrace();&&&&
&&&&&&&&} finally {&&&&
&&&&&&&&&&&&try {&&&&
&&&&&&&&&&&&&&&&if (input != null)&&&&
&&&&&&&&&&&&&&&&&&&&input.close();&&&&
&&&&&&&&&&&&&&&&if (out != null)&&&&
&&&&&&&&&&&&&&&&&&&&out.close();&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&} catch (Exception e) {&&&&
&&&&&&&&&&&&&&&&e.printStackTrace();&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}&&&&
&&&&&&&&}&&&&
&&&&&* 根据指定类名查找类文件&&&
&&&&&* @param name String&&&
&&&&&* @return Class&&&
&&&&&*/&&&
&&&&protected Class findClassByName(String name) {&&&&
&&&&&&&&try {&&&&
&&&&&&&&&&&&byte[] data = this.getFileData(name);&&&&
&&&&&&&&&&&&if (data == null) {&&&&
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}&&&&
&&&&&&&&&&&&return this.defineClass(name, data, 0, data.length);&&&&
&&&&&&&&} catch (Exception e) {&&&&
&&&&&&&&&&&&e.printStackTrace();&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&}&&&&
&&&&&* 重写loadClass()方法&&&
&&&&&* @param name String&&&
&&&&&* @return Class&&&
&&&&&*/&&&
&&&&public Class loadClass(String name) {&&&&
&&&&&&&&Class c =&&&&&&&&&&&&
&&&&&&&&try {&&&&
&&&&&&&&&&&&c = super.loadClass(name);&&&&&&&&&&&&
&&&&&&&&} catch (ClassNotFoundException e) {&&&&
&&&&&&&&&&&&e.printStackTrace();&&&&
&&&&&&&&} finally {&&&&
&&&&&&&&&&&&if (c == null) //父类默认方法没有加载到指定类时,使用自定义方法查找&&&&
&&&&&&&&&&&&&&&&c = this.findClassByName(name);&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&}&&&&
&&&&public String getExtensionalName() {&&&&
&&&&&&&&return extensionalN&&&&
&&&&public void setExtensionalName(String extensionalName) {&&&&
&&&&&&&&this.extensionalName = extensionalN&&&&
&&&&public static void main(String[] args) throws Exception {&&&&
&&&&&&&&URL[] url = new URL[] {new URL(&file:e:/&)}; //添加你想要加载类的路径&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//网络或本地均可&&&&
&&&&&&&&CustomClassLoader csl = new CustomClassLoader(url);&&&&
&&&&&&&&csl.setExtensionalName(&rs&);&&&&
&&&&&&&&Class c1 = csl.loadClass(&com.demo&);&&&&
&&&&&&&&Object obj = c1.newInstance();&&&&
&&&&&&&&Method method = c1.getMethod(&printText&, null);&&&&
&&&&&&&&method.invoke(obj, null);&&&&
上一篇: (人气:8031)
下一篇:(人气:3899)
教程搜索服务
本月文章推荐
项目外包信息
网络编程文章分类
站长工具:
实用工具:
Copyright &
All rights reserved | 沪ICP备号

我要回帖

更多关于 java接口怎么写 的文章

 

随机推荐