Browsing the archives for the J2EE category

Java的访问控制

in J2EE

包(Package)

创建自己的包时,要求 package语句必须是文件中的第一个“非注释”代码。
如果类名冲突时,可这样写java.util.Vector v = new java.util.Vector();
可能(但并常见)有一个编译单元根本没有任何公共类。此时,可按自己的意愿任意指定文件名。

访问控制

修饰符

类内部

同一个包

子类

任何地方

private

default

protected

public

类的修饰符只有public 和 default,默认时只能被同一个文件或包内访问。

1 Comment

Java运算符优先级(表格)

in J2EE

Java运算符优先级参考图表
本文来源 http://blog.csdn.net/xiaoli_feng/archive/2009/09/18/4567184.aspx

优先级

运算符

结合性

1

() [] .

从左到右

2

! +(正)  -(负) ~ ++ –

从右向左

3

* / %

从左向右

4

+(加) -(减)

从左向右

5

<< >> >>>

从左向右

6

< <= > >= instanceof

从左向右

7

==   !=

从左向右

8

&(按位与)

从左向右

9

^

从左向右

10

|

从左向右

11

&&

从左向右

12

||

从左向右

13

?:

从右向左

14

= += -= *= /= %= &= |= ^=  ~=  <<= >>= >>>=

从右向左

说明:
1、 该表中优先级按照从高到低的顺序书写,也就是优先级为1的优先级最高,优先级14的优先级最低。
2、 结合性是指运算符结合的顺序,通常都是从左到右。从右向左的运算符最典型的就是负号,例如3+-4,则意义为3加-4,符号首先和运算符右侧的内容结合。
3、 instanceof作用是判断对象是否为某个类或接口类型。
4、 注意区分正负号和加减号,以及按位与和逻辑与的区别
其实在实际的开发中,不需要去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号去进行替代,示例代码:
int m = 12;
int n = m << 1 + 2;
int n = m << (1 + 2); //这样更直观
这样书写代码,更方便编写代码,也便于代码的阅读和维护。

3 Comments

Java数据类型转换

in J2EE

1.在Java中看到象“1.39e-47f”这样的表达式时,它真正的含义是“1.39×10 的-47次方”。
2.注意如果编译器能够正确地识别类型,就不必使用尾随字符。对于下述语句:
long n3 = 200;
它并不存在含混不清的地方,所以 200后面的一个 L大可省去。然而,对于下述语句:
float f4 = 1e-47f; //10的幂数
编译器通常会将指数作为双精度数(double)处理,所以假如没有这个尾随的 f,就会收到一条出错提示,告诉我们须用一个“造型”将double 转换成 float。
3.通常,表达式中最大的数据类型是决定了表达式最终结果大小的那个类型。若将一个float 值与一个double值相乘,结果就是 double;如将一个 int和一个 long 值相加,则结果为long。
4.将一个 float或double 值造型成整数值后,总是将小数部分“砍掉”,不作任何进位处理。
5.Math.random()的输出值范围是[0,1) 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
6.小数据类型转换成大数据类型可以自动转换,不会丢失精度。大数据类型转换为小数据类型必须显式的转换,可能丢失精度。

2 Comments

Java的运算符号(逻辑与、或、非、移位运算)

in J2EE

1.只可将AND,OR 或NOT 应用于布尔值。与在C 及C++中不同,不可将一个非布尔值当作布尔值在逻辑表达式中使用。
2.在AND(&&)运算中a()&&b()&&c(),当a为false时,b与c都不再执行,因为整个表达式都是false了,没必要再执行下去,OR(||)也是一样,当有一个为true时就结束。

1
2
3
4
5
6
7
8
9
10
11
public class CalClass {
static Boolean test(int num){
System.out.println(num+">2"+(num>2));
return num>2;
}
public static void main(String[] args){
int i = 1, j =3 , k = 4;
System.out.println(test(i)||test(j)||test(k));
System.out.println("end");
}
}

3.对于布尔值,按位运算符(如&)具有与逻辑运算符(如&&)相同的效果,只是它们不会中途“短路”。
移位运算符
左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补 0)。“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java 也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。
若对char,byte 或者short 进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个 int数里移动不切实际的位数。若对一个long 值进行处理,最后得到的结果也是long。此时只会用到右侧的 6个低位,防止移动超过 long 值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。若对 byte 或short 值进行右移位运算,得到的可能不是正确的结果(Java 1.0 和Java 1.1 特别突出)。它们会自动转换成int 类型,并进行右移位。但“零扩展”不会发生。
http://www.blogjava.net/rosen/archive/2005/08/12/9955.html
“>> 右移”;“<< 左移”;“>>> 无符号右移”
例子:
例子:
-5>>3=-1
1111 1111 1111 1111 1111 1111 1111 1011
1111 1111 1111 1111 1111 [...]

6 Comments

java变量的作用域

in J2EE

1
2
3
4
5
6
7
8
9
10
11
12
13
public class OneClass {
static int x;//会赋值默认值0
public static void main(String[] args){
//int x = 2;
//不能在同一个方法内定义同一个变量,不然会报错 Duplicate local variable x
System.out.println("第一个x:"+x);
{
int x = 5;//在方法内的变量必须初始化,否则x会是随机值而不是0
//如果不赋值会报错The local variable x may not have been initialized
System.out.println("第二个x:"+x);
}
}
}

1 Comment

Java的主要类型及它们的取值范围

in J2EE

Java的主要类型

主类型

默认值

大小(位)

最小值

最大值

封装器类型

boolean

false

1

-

-

Boolean

char

‘\u0000′(null)

16

Unicode 0

Unicode 2^16-1

Character

byte

(byte)0

8

-128

127

Byte

short

(short)0

16

-2^15

+2^15-1

Short

int

0

32

-2^31

+2^31-1

Integer

long

0L

64

-2^63

-2^63-1

Long

float

0.0f

32

IEEE754

IEEE754

Float

double

0.0d

64

IEEE754

IEEE754

Double

对于float:共32个bits,Bit 31是MSB(Most Significant Bit),Bit 0是LSB(Least Significant Bit),则
Bit 31是符号位,接下来的8位是指数位,指数位被视为一个无符号的数,它与127的差就是以2为底的指数的部分。 最后的23位是小数部分。
在byte(8位)中的取值范围为-128 到 127的问题
在电脑用是使用补码来存储数字的,我搜索了很多,还不是很明白。以前的反码之类的没认真学习。。。
因为 -0 和 +0 在补码中是不一样的,把 1000 0000 作为-128(补)  ,127(补)=0111 1111,0(补) = 0000 0000, -127(补) = 1111 1111, -128在9位中表示应该为 1 1000 0000,取低八位就变成了  1000 0000
摘录一篇文章如下,更详细可以点链接查看
http://topic.csdn.net/t/20050828/10/4235813.html
在机器中
负数的补码是这样算的:
先将该负数取绝对值,再用二进制表示出这个绝对值
对该二进制数进行取反加一操作就得到负数的补码了
-128   绝对值是   128
128的二进制表示为:
1000   0000
取反
0111   1111
加1
1000   0000
这就是-128的补码

0 Comments

重新学习Java基础

in J2EE

想要重新学习Java基础,因为基础实在是太差了,很多概念都搞不清楚,而笔试题中大部分是基础题,加强基础还是很有必要的,苦于没有学习的条目,所以上网搜索到下面的文章,吓死我了,这位同学看了N本书,应该还写了N多的读书笔记~哎,学习没有捷径,唯有苦功夫。大概按照这来看着,看来我要买本《Thinking in Java》,看电子书不太舒服。
以下原文地址:学习java的步骤和一些必看的书籍

0 Comments

使用json-lib遍历数组与对象(JSONArray与JSONObject)

in J2EE

使用json-lib遍历数组与对象

//遍历json数组
String json1 = "{data:[{name:'Wallace'},{name:'Grommit'}]}";
jsonObjSplit = new JSONObject(json1);
JSONArray ja = jsonObjSplit.getJSONArray("data");
for (int i = 0; i < ja.length(); i++) {
JSONObject jo = (JSONObject) ja.get(i);
System.out.println(jo.get("name"));
}
 
//JSONObject遍历json对象
String json2 = "{name:’Wallace’,age:15}";
jsonObj = new JSONObject(json2);
 
for (Iterator iter = jsonObj.keys(); iter.hasNext();) {
String key = (String)iter.next();
System.out.println(jsonObj .getString(Key));

1 Comment