要理解 java中String的运作方式,必须明确一点:String是一个非可变类(immutable)。什么是非可变类呢?简单说来,非可变类的实例是不能被修改的,每个实例中包含的信息都必须在该实例创建的时候就提供出来,并且在对象的整个生存周期内固定不变。java为什么要把String设计为非可变类呢?你可以问问 james Gosling :)。但是非可变类确实有着自身的优势,如状态单一,对象简单,便于维护。其次,该类对象对象本质上是线程安全的,不要求同步。此外用户可以共享非可变对象,甚至可以共享它们的内部信息。(详见 《Effective java》item 13)。String类在java中被大量运用,甚至在class文件中都有其身影,因此将其设计为简单轻便的非可变类是比较合适的。
一、创建。
好了,知道String是非可变类以后,我们可以进一步了解String的构造方式了。创建一个Stirng对象,主要就有以下两种方式:
java 代码
String str1 = new String( "abc" );
Stirng str2 = "abc" ;
虽然两个语句都是返回一个String对象的引用,但是jvm对两者的处理 ......
本文为原创,如需转载,请注明作者和出处,谢谢!
缩放图像的基本原理是创建一个目标大小的画布,然后读取源图像,并将该图像绘制这个画布上。为了使程序通用,源图像和缩放后的目标图像应用分别使用
InputStream和OutputStream来表示,代码如下:
public
static
void
scaleImage(InputStream imgInputStream,
OutputStream imgOutputStream,
int
scale)
{
try
{
Image src
=
javax.imageio.ImageIO.read(imgInputStream);
int
width
=
(
int
) (src.getWidth(
null
)
*
scale
/
100.0
);
&n ......
package com.tonglian.test;
import java.util.TimerTask;
//TimerTask是个虚类,其中有一个run()
public class Work extends TimerTask{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("tttt/n");
}
}
//功能:每隔1秒就会调用Work中的run()方法
package com.tonglian.test;
import java.util.Timer;
public class Test {
public static void main(String[] args) {
Timer timer=new Timer();
timer.schedule(new Work(), 0,1000);
}
} ......
最近在看JVM有关东西,发现一个简单和free的HEAP DUMP查看方式(基于SUN JDK)
先使用
jmap -dump:live,format=b,file=heap.bin 9381
其中9381为JAVA 进程PID
然后执行jhat heap.bin
待显示
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
再使用WEB BROWER 登录jhat 浏览器端口即可
唯一的问题是端口不要被防火墙屏蔽了。 ......
最近由于各种原因迫使自己需要详细了解java的基本知识,之前在学校学java多线程的时候,很多很重要的知识点都是一带而过。
我们来回忆一下java中synchronized关键字的用途(一下内容属个人理解,欢迎读者修正!):
1:synchronized 修饰静态方法时候,在任何时候jvm都保证只有一个线程访问方法内部的代码,因此保证了许多静态的对象不被意外的修改,解决了多线程下静态对象的数据不同步问题。
看以下测试代码:
package thread;
public class TestSynchronized extends Thread {
/**
* 测试输出的次数
*/
private static int times;
/**
* 定义三个线程
*/
private static Thread t1 = new TestSynchronized("t1");
private static Thread t2 = new TestSynchronized("t2");
private static Thread t3 = new TestSynchronized("t3");
/**
* 开始测试时间
*/
private static long start;
TestSynchronized(String name){
super(name);
}
/**
* @param args
*/
public static void main(String[] args) {
start = System.currentTimeMillis();
t1.start(); ......
java零日漏洞,让黑客乘虚而入,在使用者的电脑上执行任意程序,以前这个说法还没有正式,最近Google安全工程师Tavis Ormandy上周揭露了Java零日漏洞。
该漏洞是因Java开发套件对参数验证不足所造成的。根据Ormandy的解释,Java原本是透过Java Web Start(JWS)让Java开发人员允许使用者藉由URL存取Java网络执行协定(。jnlp)以执行及安装应用程序,但自Java 6第十更新版后,提供了Java开发套件(Java Deployment Toolkit,JDT)来简化开发人员散布应用程序的程序。
JDT所扮演的角色是把所接收的URL字串传递给JWS注册处理程序,但Ormandy发现,JDT仅提供最基本的URL参数认证,导致他得以传递任何参数到JWS中,还能藉由命令列引数(command-line arguments)行使JWS的完整功能以让该错误成为可被攻击的漏洞。
Ormandy指出,只要是Java SE 6 update 10以后且支援微软windows的版本都受到该漏洞影响,关闭Java外挂程序功能并无法避免受到攻击,因为JDT为独立安装套件。Ormandy相信非Windows版本可幸免于难。
不过,Qualys技术长Wolfgang Kandek表示,该漏洞允许黑客在目标电脑上执行远端程序,而且使用者只要造访一个简单的网页就可能触 ......