黑马程序员-Java基础总结02——Java基本语法(一)
-------android培训、java培训、期待与您交流! ----------
1、关键字:被Java语言赋予了特殊含义的单词(该单词所以字母均小写)。
用于定义数据类型的关键字 |
||||||||
class |
interface |
byte |
short |
int |
||||
long |
float |
double |
char |
boolean |
||||
void |
|
|
|
|
||||
用于定义数据类型值的关键字 |
||||||||
true |
false |
null |
|
|
||||
用于定义流程控制的关键字 |
||||||||
if |
else |
switch |
case |
default |
||||
while |
do |
for |
break |
continue |
||||
return |
|
|
|
|
||||
用于定义访问权限修饰符的关键字 |
||||||||
private |
protected |
public |
|
|
||||
用于定义类,函数,变量修饰符的关键字 |
||||||||
abstract |
final |
static |
synchronized |
|
||||
用于定义类与类之间关系的关键字 |
||||||||
extends |
implements |
|
|
|
||||
用于定义建立实例及引用实例,判断实例的关键字 |
||||||||
new |
this |
super |
instanceof |
|
||||
用于异常处理的关键字 |
||||||||
try |
catch |
finally |
throw |
throws |
||||
用于包的关键字 |
||||||||
package |
import |
|
|
|
||||
其他修饰符关键字 |
||||||||
native |
strictfp |
transient |
volatile |
assert |
2、标识符:程序中可自定义的一些名称(不可数字开头及使用关键字,Java区分大小写)
*包名:多单词组成时所有字母都小写:xxxyyyzzz ,例:packagestudent ;
*类名接口名:多单词组成时,所有单词首字母大写:XxxYyyZzz (classHello);
*变量名和函数名:单个单词时均小写,而多单词组成时,除第一个单词首字母小写外其他首字母均大写:xxxYyyZzz(intboy);
*常量名:所有字母都大写,多单词时用下划线连接:XXX_YYY_ZZZ (final int A = 5)。
3、注释:用于注解说明解释程序的文字,提高了代码的阅读性。
Java中的注释格式:
单行注释: //注释文字
多行注释: /* 注释段落 */
文档注释: /** 注释文档内容 */
4、常量:表示不能改变的数值。
Java中常量的分类:
1、整数常量:所有整数;
2、小数常量:所有小数;
3、布尔(boolean)型常量:特殊,仅true、false两数值。
4、字符常量:将一个数字字母或者符号用单引号( ' ' )标识。
5、字符串常量: 将一个或者多个字符用双引号(“”)标识。
6、null常量:只有一个数值就是: null.
对于整数:有四种表现形式:
二进制:0、1 ,满2进1.
八进制:0—7 ,满8进1. 用0开头表示。
十进制:0—9 ,满10进1.
十六进制:0—9,A—F,满16进1. 用0x开头表示。
负数的二进制表现形式:
对应的正数的二进制取反加1;
详解: 正数用原码来表示,而负数用补码来表示。
(其中二进制的最高位为符号位:正 为0 ,负则为1)。
反码:将原码中的0、1置换,即7的反码为:1111 1111 1111 1000;
(或 —7可由6的反码的得到: 1111 11111111 1001)
原因:因为2进制最高位为符号位,所以最高只有14次幂(和则为15次幂减1),
即2字节能容纳最大正数为
5、变量:
*内存中的一个存储区域;
*该区域有自己的名称(变量名)和类型(数据类型);
*该区域的数据可以在同一类型范围内不断变化;
目的:用来不断的存放同一类型的常量,并可以重复使用。
注意事项:
A、变量的作用范围(一对{}之间有效,)
变量根据使用可分为成员变量(定义于类,有效于该类范围)、
局部变量(定义于方法/函数,有效于该方法,外部程序无法访问)。
B、初始化值;
定义变量的格式:数据类型
声明:int i;
声明并初始化赋值:int i = 20;
理解:变量就如同数学中的未知数。
6、数据类型:
因此:根据需要合理选择数据类型,可减少程序对内存空间的使用/占用。
数据类型:
|——基本数据类型
|——字符型(char)
|——布尔型(boolean)
|——引用数据类型
|——类(class)
|——接口(interface)
|——数组(Array/[])
PS: 字符串String不属于数据类型,是一个特殊对象,字符串都是常量(例"abc"),因而它们存放在内存中的常量池(中的字符串池)。
1、字符(char): 用单引号‘’来表示,例:‘A’、‘2’;
例: char x =‘5’不同于int y = 5;
字符串(String):用双引号“”来表示,例如:“abc”、“234”;
2、byte : 字节,(1字节= 8 位/bit),范围:-128至127;
(例:127 : 0111 1111,首位为符号位,正数为0,负数为1)
short:占2字节,16位,范围:-2^15 至2^15-1;
int:占4字节,32位,范围:-2^31 至2^31-1;
long:占8字节,64位,范围:-2^63 至2^63-1;
char:占2字节,16位,最高位不是符号位,unicode字符集有65535个,要观察某个字符在unicode表中的顺序位置,必须用int类型显示转换,如(int)‘a’。
(不能使用short类型,因为char的最高位不是符号位,所以short无法满足存储)
float:占4字节,32位,用f来修饰:34.5f ;
double:占8字节,64位,用d来修饰(因为小数默认是double,所以可省略);
【注意:英语字符a占一个字节,而汉字字符则占两个字节,单个字符均能用char来装,
但ab虽然是两个字节但算是两个字符,不能用char。】
3、类型转换:
*自动类型转换(也叫隐式类型转换)
*强制类型转换(也叫显式类型转换)
注意:使用float类型时该数值必须要加f说明,因为整数默认是int;小数默认是double。
示例(提醒):
*自动类型提升
byte b = 3;
x = x + b;
强制类型转换
byte b = 3;
b = (byte)b+4;//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b。
*思考:
byte b1=3,b2=4,b;
b=b1+b2;(失败)
哪句是编译失败的呢?为什么呢?
因为b1、b2是变量不是具体数值,3和4是具体数值
7、运算符:
算术运算符:
取模(%,即除法求商舍去余数)、
自增(++)前后[++x、x++]、自减(--)前后[--y、y--]、
字符串相加(+,即"He"+"llo"——"Hello");
(字符串与任何数据使用“+”连接,最终都会变成字符串)
【如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论】
赋值运算符:
符号:= , +=,-=, *=, /=, %= ;(均为单个运算符)
比较运算符(结果都是boolean型,true或false):
小于等于(<=)、大于等于(>=)、
instanceof:检查是否是类的对象,例如:"Hello" instanceof String ; (true)
逻辑运算符(用于连接boolean类型的表达式):
& :AND(与) :false & true
| :OR(或):false | true
^ :XOR(异或) true^ false
!:Not(非)
&& :AND(短路) 与& 类似,但当左边能决定结果是不执行右边;
|| :OR(短路)与| 类似,但当左边能决定结果是不执行右边;
位运算符(用于二进制):
(>>>主要用于负数,右移时最高位均用0来填充,则无论正负数均会减小) ;
小知识点:
三元运算符:
格式
(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
示例:
获取两个数中大数。
intx=3,y=4,z;
z =(x>y)?x:y;
8、程序流程判断
*判断结构: if语句
三种格式:
|
if(条件表达式) |
if语句特点:
*选择结构
switch(表达式)
{
执行语句;
}
//(实质:由表达式得出一数值,在case中选择对应的数,执行该语句,如果无对应值则执行default语句。)
switch语句特点:
A、switch语句选择类型只有四种:byte、short、int、char。
B、case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
C、结束switch语句的两种情况:遇到break,或直到执行至switch语句结束。
D、如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
PS: JDK1.5起switch语句支持Enum枚举值,JDK1.7起支持String类型(但不能比较null值/传入或case语句都不行,因为底层是通过javac编译调用str.equals(String)方法)。
*循环结构:while 、do while 、for 三种语句
while(条件表达式) { } |
do while语句格式: do { }while(条件表达式); do while特点: 是条件无论是否满足,循环体至少执行一次。 |
for(初始化表达式;循环条件表达式;循环后的操作表达式) { |
注:
a,for里面的两个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。
b,while与for可以互换,区别在于for为了循环而定义的变量在for循环结束时就在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。
c,最简单无限循环格式:while(true) , for( ; ; ),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。
其他流程控制语句:
break(跳出):应用于 选择结构switch和 循环结构,跳出单重循环;
continue(继续):应用于循环结构,跳过此次循环(单重循环的单次循环)。
注:
A、这两个语句离开应用范围,存在是没有意义的。
B、continue语句是结束本次循环继续下次循环,而break是不再执行该语句,直接跳出;
C、标号的出现,可以让这两个语句作用于指定的范围。
特殊:
跳出多重循环的方法:
A、return的特殊应用: 在方法语句中,即使是多重循环,当执行到return语句时除了方法中还有的finally语句会执行,其他都终止。
public class ReturnDemo {
public static void main(String args[]){
int[] arr = new ReturnDemo().getNumber();
for()
}
public int[] getNumber(){
int[] arr = new int[2];
for(int i=1;i<100;i++){ //让i循环99次
for(int j=1;j<=i;j++){
if(i*j==81){
int[0] = i; int[1] = j;
return arr; //返回指定数据,结束方法执行;
} } }
return arr; //由于方法必须返回数据,如果上述判断代码中发生异常,那么就会返回默认的数据;
}
}
B、带标记的break 跳出多重循环(类似C语言的goto语句应用):
public class BreakDemo {
public static void main(String args[]){
OK: //设置一个标记 使用带此标记的break语句跳出多重循环体
for(int i=1;i<100;i++){ //让i循环99次
for(int j=1;j<=i;j++){
if(i==10){
break OK; //跳出标记为OK的多重循环;
}
System.out.print(i + "*" + j + "=" + i*j) ;
System.out.print(" ") ;
}
System.out.println() ;
}
}
}
其他: * 循环嵌套(多重循环0
* 语句的嵌套应用
* 累加求和,计数器
提醒:
1、多行注释中运行单行注释,但不允许多行注释;
2、在各种表达式中:当出现多个表达式时只需用“,”来隔开[例:while(x<1,y>2)等];
3、变量有自己的作用域,例for的初始化表达式中的变量仅在for语句中有效,完毕则在内存中释放;