您的位置:首页 > 编程语言 > Java开发

Java基础7

2016-05-09 12:35 267 查看
1、volatile关键字

用来修饰被不同线程访问和修改的变量,系统每次使用它时直接从对应的内存中提取,而不会利用缓存(为提高程序运行效率,一般常用变量会从缓存中读取)。所有线程在任何时候所看到的变量值都是相同的。

//用来停止线程的常用方法

public class MyThread implements Runnable{

//若flag没有被声明为volatile,当run方法判断flag值时,使用的可能是缓存中的值,此时就不能及时获取其他线程对
//flag所做的操作,会导致线程不能及时停止

private volatile Boolean flag;
public void stop(){
flag = false;
}
public void run(){
while(flag){
//
}
}
}

2、基本数据类型

数据类型字节长度范围默认值包装类
int4-2^31~2^31-10Integer
short2-2^15~2^15-10Short
long8-2^63~2^63-10000000000000L/0lLong
byte1-2^7~2^7-10Byte
float432位IEEE754单精度范围0.0f/FFloat
double864位IEEE754单精度范围0.0Double
char2Unicode
0~65535
u0000Character
boolean1true/falsefalseBoolean
3、不可变类

指创建了这个类的实例就不允许修改它的值了。所有基本类型的包装类都是不可变类。Integer、Float....String类也是。

//不可变类,所有基本类型的包装类都是不可变类,Integer/Boolean/Float/Double/Long/Short/Character/Byte

public class StringTest {
public static void main(String[] args){

String s = "Hello";//声明了一个可以指向String类型对象的引用s,指向字符串常量“Hello”

System.out.println(s);

s = "you";//并没有改变s所指向的对象,s指向了另外一个String类型的对象,该对象的内容为"you",
//原来那个字符串常量"Hello"还存在内存中,并没有被改变,但s已经不指向它了而指向"you"

System.out.println(s);
}
}

创建不可变类:

1)类中的所有成员变量被private修饰

2)类中没有写或者修改成员变量的方法,如set()。

3)确保类中的所有方法不会被子类覆盖,可通过将类定义为final

(还有其他注意事项)

4、值传递和引用传递

1)值传递

实参把值传给形参,形参只是用实参的值初始化一个临时存储单元,因此形参和实参虽有相同的值却有不同的存储单元,因此对形参的改变不会影响实参。

2)引用传递

传递的是对象(也可看作对象的地址),这时形参和实参指向同一个存储单元,对形参的修改会影响实参。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: