J2SE基础知识

1. 变量的变量名、作用域、生存周期

1. 变量名的命名规范

1. 标识符可包含字母、数字、下划线(_)和美元符号($);不能以数字开头。不要用字符$命名标识符,习惯上,$标识符只用在机器自动产生的源代码中。
2. 区分大小写。例如:Str和str代表不同的变量;
3. 不可以使用关键字和保留字;(关键字:其实就是某种语言赋予了特殊含义的词。保留字:其实就是还没有赋予特殊含义,留作将来使用的词。)
4. 常量习惯上用大写字母表示;
5. 标识符采取驼峰命名法,每个词的的第一个字母大写(标识符首字母一般不大写;类名大写字母开头,没有限制必须大写或者小写开头,只是一般大家都遵循规范);
6. 标识符一般用全名称,根据字面意义就可以了解标识符的含义(不过真的看个人习惯吧,什么都老长,一个程序下来估计会大不少,有适当的文档说明变量含义就好);

2. 变量的作用域和生命周期

作用域决定了变量的可见性和声明周期,java中的变量可分为全员变量和局部变量。
成员变量:在类的所有方法外声明的变量,可被系统初始化(整型默认为0,浮点型默认为0.0;字符串、布尔型、对象默认都是null)。
静态成员变量:用static修饰,在类被加载时被创建。
类成员变量:在类的实例被创建时产生,其生命周期与该类的实例对象的生命周期相同;作用域为整个类,在类中通过属性名直接访问,类.属性名的方式不建议使用。
实例成员变量:只能在类对象实例化后,通过属性的setter、getter方法访问(直接访问会报错)。
局部变量:区别于全员变量,只存在于对应的方法体中;它的作用域在成对的花括号代码块内(不是定义变量的整个方法体);必须显式初始化。

2. 数据类型

1. 八大基本数据类型

    数值型:byte(1个字节)、short(2个字节)、int(4个字节)、long(8个字节);
    浮点型:float(4个字节)、double(8个字节);
    字符型:char(2个字节)

    布尔型:boolean(true和false)

数据类型

数据类型

范围

占用存储空间

数值型

byte

-27(-128)~ 27-1(127)

8位

数值型

short

-215(-32 768)~215-1(32 767)

16位

数值型

int

-231(-2 147 483 648)~231-1(2 147  483 647)

32位

数值型

long

-2-63~263-1

64位

数值型

float

负数范围:-3.4028235E+38~-1.4E-45
正数范围:1.4E-45~3.4028235E+38

32位,标准IEEE754

数值型

double

负数范围:-1.7976931348623157E+308

~-4.9000000E-324

正数范围:4.9E-324~ 1.7976931348623157E+308

64位,标准IEEE754

布尔值类型

boolean

true或者false

 

字符类型

char

UTF-16编码描述一个代码单元

16


1.整型默认int类型,long类型后须加上L,当值未超过int的表示范围不加也不报错,超过int的范围不加就报错(建议加上);浮点型默认double,浮点数默认double,可以为double带上D,float的不加F就会报错;
2.byte、char、short相互计算时,自动转int,数据不会失真。int、long计算超过数值范围数据会失真。float和double的值用指数表示后计算结果一般也会出现偏差;
如:byte b = 127;
      byte b1 = 2;
      System.out.println(b + b1);//129(byte只能表示-128~127,两个byte之和按理说是-127,但byte、char、short会自动转为int,结果并未超过int的表示范围,为129)
      int i = 2147483647;
      int i1 = 2;
      System.out.println(i + i1);//-2147483647(int表示范围-2147483648~2147483647,数据超过数值范围后失真)

另外java.math包中有BigIntegerBigDecimal,这两个类可以包含任意长度数字序列的数值;

BigInteger类实现了任意精度的整数运算,BigDecimal类实现了任意精度的浮点数运算。

2. 自动类型转换

byte→short(char)→int→long→float→double;(从左到右级别由低到高,数值自动转换为更高级别数据类型)
强制类型转换:将某数据类型转换为其他类型;
如:long l = 2147483649L;
      int i1 = (int)l;
      System.out.println(i1);//-2147483647

3. 强制转换

byte i = (byte) 100; 强制类型的值如果超过转换后值的数值范围就会出现数据位溢出,数据失真。

4. Java自动装箱、拆箱

基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。 
一般我们要创建一个类的对象实例的时候,我们会这样:
Class a = new Class(parameter);
当我们创建一个Integer对象时,下面两种方式等价;编译器调用编译器调用的是static Integer valueOf(int i)

Integer i = 100;//注意:不是 int i = 100;
Integer i =new Integer(100);

基本数据类型不是对象,无法调用方法。
自动拆箱(unboxing),也就是将对象中的基本数据从对象中自动取出。

Integer i = 10; //装箱
int t = new Integer(i); //拆箱,实际上执行了 int t = i.intValue();
八大基本数据类型对应的装箱类型:

Primitive typeWrapper class
booleanBoolean
byteByte
charCharacter
floatFloat
intInteger
longLong
shortShort
doubleDouble
Java装箱、拆箱可参考: http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html        http://javarevisited.blogspot.com/2012/07/auto-boxing-and-unboxing-in-java-be.html(此地址已无法访问)

尽管Java编译器能够帮组我们自动进行相应基本数据与引用类型的相互转化,但是不太建议编程中大量使 用,因为存在二次转化,考虑性能。

3. 运算符

1. 算数运算符

加(+)、减(-)、乘(*)、除(/)、求模(%)(PS:求模就是求余数)、++(自加)、--(自减)

 除数为0,则java文件无法编译;
 
整数间的操作得到的结果始终是整数(不能整除的结果仍为整数);
 
含浮点数的操作始终会得到浮点数(不能整除的结果就会含小数位);
 +
还可以作为字符串连接符;

2. 关系运算符

大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=

3. 逻辑运算符

逻辑运算符有:&& || !^ & |
   &&
&(与):有false,结果为false
   ||
|(或):有true,结果为true
   &
|运算是把逻辑表达式全部计算完,而&&||运算具有短路计算功能。
  
对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。
   !
(非):true返回falsefalse返回true
   ^
(异或):相同为false,相异为true

4. 位运算符

按位与'&',按位或'|',按位非'~',按位异或'^',右移'>>',左移'<<'0填充的右移'>>>'
  
按位与:有00;按位或:有11;按位非:0结果为1,1结果为0;按位异或:相同为0,相异为1

5. 赋值运算符和其他运算符

  赋值运算符:赋值(=)、加等于(+=)、减等于(-=)、乘等于(*=)、除等于(/=)、求模等于(%=);
如:a+=2;a = a + 2; a *= 3a = a *3;
同时+=也可以用于字符串的拼接;

6. 运算符优先级

优先级自上而下,级别由高到低。

三目运算符:可替代简单的条件运算符,但其结合性从右往左使其不能应用于复杂的条件运算;

例子:判断各级对象是否为空,最后为了获取用户的部门名称(中间应该判断user.getDeptId()是否为空,这里省略)

String deptName =(user==null?"":user.getDeptId().getDeptName()==null?"":user.getDeptId().getDeptName());(刚好前几天看到一个同事的例子就是这个类似的获取值;因为他不清楚三目运算符的结合方向所以报错;我用三目运算符不知道怎么去实现这个效果了,哈哈);

4. 流程控制语句

1. 顺序流程控制语句

按语句的先后顺序执行

2.选择流程控制语句

if分支语句

if(条件){
	...
}

if(条件){
	...
}else{
	...
}

if(条件1){
	...
}else if(条件2){
	...
}else{
	...
}

switch分支语句

switch(表达式){
    case 值1 :语句1;
    case 值12 :语句2;
    ……
    [default:语句n;]
}
Java7 之前, switch 只能支持 byte short char int 或者其对应的封装类以及 Enum 类型。 Java7 加上了 String

3. 循环流程控制语句

//while语句
while(循环条件){
	...
}

//do-while语句
do{
	...
}while(循环条件);

//for语句
for(初始化表达式;检测表达式;更新表达式){
	...
}
//foreach语句;不用与for一样,根据index一个个获取对象的值;好处在于可不用管数据集合的长度;for则必须明确数据集合的长度;
for(元素类型t 元素变量x : 遍历对象obj){
     引用了x的java语句;
}

do-while先执行,再判断条件是否为真,为真则继续执行。所以至少可以执行一次

break:终止分支语句;

continue:结束本次循环,进入下一轮循环;

return:结束函数体;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值