**
**
本书使用的是Java基础案例教程 黑马程序员编著 ISBN 978-7-115-43937-6
1:编写java代码,注意的几个关键点
(1):Java中的程序代码可分为结构定义语句和功能执行语句,其中,结构定义语句用于声明一个类或方法,功能执行语句用于实现具体的功能。
(2):Java语言是严格区分大小写的。
(3):编写Java代码时,为了便于阅读,通常会使用一种良好的格式进行排版。
(4):Java程序中一句连续的字符串不能分开在两行中书写。(ps:将一个太长的字符串分在两行书写,可以先将这个字符串分成两个字符串,然后用(+)将这两个字符串连起来,在加号(+)处断行。)
例:可以写成这种形式:
System.out.println("这是一个"+
"Java程序!")
2:注释:
注释是对程序的某个功能或者某行代码的解释说明,它只在Java源文件中有效,在编译程序时,编译器会忽略这些注释信息,不会将其编译到class字节码文件中去。
(1):单行注释
int c=10; //定义一个整型变量
(2):多行注释
/* int c=10;
int x=5; */
(3):文档注释
以“ /** ”开头,并在注释内容末尾以“ */ ”结束。
3:标识符
标识符可以有字母、数字、下划线(_)和美元符号($)组成,但标识符不能以数字开头,不能是Java中的关键字。
标识符要遵循一下规则
(1):包名所有字母一律小写;
(2):类名和接口名每个单词的首字母都要大写。
(3):常量名所有字母都大写,单词之间用下划线连接。
(4):变量名和方法名的第一个单词首字母小写,从第2个单词开始,每个单词首字母大写。
(5):在程序中,应该尽量使用有意义的英文单词来定义标识符,使得程序便于阅读。
4:Java关键字
使用java关键字,需要注意的地方
(1):所有的关键字都是小写的;
(2):程序中的标识符不能以关键字命名;
(3):const和goto是保留关键字,虽然Java中还没有任何意义,但在程序中不能用来作为自定义的标识符;
(4):true、false和null不属于关键字,它们是一个单独表示类型,不能直接使用。
5:常量
(1):整型常量
二进制:以0b或0B开头;
八进制:以0开头;
十进制:
十六进制:以0x或0X开头。
(2):浮点型常量
float 单精度浮点数
double 双精度浮点数
(3):字符常量
一个字符常量要用一对英文半角格式的单引号 ‘ ’ 引起来,它可以是英文字母、数字、标点符号以及由转义序列来表示的特殊字符。
Java采用的是Unicode字符集,Unicode字符以 \u 开头,空白字符在Unicode码表中对应的值为 ‘ \u0000 ’ 。
(4):字符串常量
一个字符串常量要用一对英文半角格式的双引号( “ ” )引起来。
一个字符串可以包含一个字符或多个字符,也可以不包含任何字符,及长度为零。
(5):布尔常量
布尔常量即布尔型的两个值true和flalse,该常量用于区分一个事物的真与假。
(6):null常量
null常量只有一个值null,表示对象的引用为空。
6:Java中的变量
Java是一门强类型的编程语言,它对变量的数据类型有严格的限定。在定义变量时必须声明变量的类型,在为变量赋值时必须赋予和变量同一种类型的值,否则程序就会报错。
其中,8种基本数据类型是Java语言内嵌的,在任何操作系统中都具有相同大小和属性,而引用数据类型是在Java程序中由编程人员自己定义的变量类型。
7:变量的类型转换
(1):自动类型转换(隐式类型转换)
满足一下两个条件
第一是两种数据类型彼此兼容;
第二是目标类型的取值范围大于源类型的取值范围。
例:short、char类型的数据可以赋值给int、long类型的变量。
(2):强制类型转换(显式类型转换)
格式:目标类型 变量名 = (目标类型) 值 ;
byte b = (byte) num ;
多学一招:表达式类型自动提升
byte、short和char类型的值都被提升为int类型;
如果有一个操作数是long类型,就将整个表达式提升为long类型;
如果有一个操作数是float类型,就将整个表达式提升为float类型;
如果任何一个操作数为double类型,结果将为double类型。
8:Java中的运算符
在Java中,运算符可分为算数运算符、赋值运算符、比较运算符、逻辑运算符。
(1):算数运算符
注1:在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个整数。如果除法运算有小数参与,得到的结果会是一个小数。
例:3500/1000*3000 =3000
注:2:在进行取模(%)运算时,运算结果的正负取决于被模数(%左边的数)的符号,与模数(%右边的数)符号无关。
(-5)%3 =-2 ; 而5%(-3) =2;
(2):赋值运算符
注:在Java中可以通过一条赋值语句对多个变量进行赋值
int x ,y ,z ;
x=y=z=5; //为3个变量同时赋值
int x=y=z=5; //这样写是错误的。
(3):比较运算符
注:不能将比较运算符“==”误写成赋值运算符“=”;
(4):逻辑运算符
运算符 | 运算 |
---|---|
& | 与 |
| | 或 |
^ | 异或 |
! | 非 |
&& | 短路与 |
|| | 短路非 |
注:与和短路与的区别是什么?
运算符“&”(与)和“&&”(短路与)都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才为true,否则为false。当运算符“&”和“&&”的右边为表达式时,两者在使用上有一定的区别。在使用“&”进行运算时,不论左边为true或者false,右边的表达式都会进行运算。如果使用“&&”进行运算,当左边为false时,右边的表达式则不会进行运算,因此“&&”被称作短路与。(非与短路非是同样的道理)
9:选择结构语句
(1):if条件语句
if语句
if…else语句
if…else if…else语句
多学一招:在Java中有一种运算叫做三元运算,它和if-else语句类似,语法如下
判断条件?表达式1:表达式2
三元运算会得到一个结果,通常用于对某个变量进行赋值,当判断条件成立时,运算结果为表达式1的值,否则结果为表达式2的值。
(2):switch条件语句
switch(表达式){
case 目标值1:
执行语句1
break;
case 目标值2:
执行语句2
break;
.....
case 目标值n:
执行语句n
break;
default:
执行语句n+1
break;
}
在使用switch语句的过程中,如果多个case条件后面的执行语句是一样的,则执行语句只需书写一次即可(在最下面书写。)
关于switch参数类型问题
需要注意的是,在JDK5.0之前,switch语句中的表达式只能是byte,short,char,int类型的值,如果传入其他类型的值,程序会报错。在JDK5.0中,引入的新特性enum枚举可以作为switch语句表达式的值。在JDK7.0中也引入了新特性,switch语句可以接收一个String类型的值。
10:循环结构语句
(1):while循环语句
(2):do…while循环语句
注:while和do…while的区别:
如果循环条件在循环语句开始时就不成立,那么while循环的循环体一次都不会执行,而do…while循环的循环体还是会执行一次。
(3):for循环语句
for(初始化表达式;循环条件;操作表达式){
执行语句;
}
(4):跳转语句(break,continue)
在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现呢在循环语句中,作用是跳出循环语句,执行后面的代码。
continue语句用在循环语句中,它的作用是终止本次循环,执行下一次循环。
11:方法(函数)
方法就是一段可以重复调用的代码。
修饰符 返回值类型 方法名([参数类型 参数名1,参数类型 参数名2,...]){
执行语句
...
return 返回值;
}
修饰符:有对访问权限进行限定的,有静态修饰符static,还有最终修饰符final等;
返回值类型:用于限定方法返回值的数据类型;
参数类型:用于限定调用方法时传入参数的数据类型;
参数名:是一个变量,用于接收调用方法时传入的数据;
return关键字:用于结束方法以及方法指定类型的值;
返回值:被return语句返回的值,该值会返回给调用者。
12:方法的重载
在一个程序中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载。值得注意的是,方法的重载与返回值类型无关,它需要满足两个条件,一是方法名相同,二是参数个数或参数类型不相同。
13:数组
数组是指一组数据的集合,数组中的每个数据被称作元素。数组可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致。
下表是各类元素的默认值
数据类型 | 默认初始化值 |
---|---|
byte,short,int,long | 0 |
float,double | 0.0 |
char | 一个空字符,即’\u0000’ |
boolean | false |
引用数据类型 | null,表示变量不引用任何对象 |
在定义数组时只指定数组的长度,由系统自动为元素赋初值的方式称作动态初始化。
在定义数组的同时就为数组的每个元素赋值,称作静态初始化。
静态初始化的两种格式:
<1>:类型 [ ] 数组名 = new 类型 [ ] {元素,元素,…};
<2>:类型 [ ] 数组名 = {元素,元素, 元素,…} (常用)
注:不能写成int [ ] x = new int [4]{1,2,3,4};。这样写编译器会报错。原因在于编译器会认为数据限定的元素个数[4]与实际存储的元素{1,2,3,4}个数有可能不一致,存在一定的安全隐患。
1:请简述&和&&的区别
运算符“&”(与)和“&&”(短路与)都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才为true,否则为false。当运算符“&”和“&&”的右边为表达式时,两者在使用上有一定的区别。在使用“&”进行运算时,不论左边为true或者false,右边的表达式都会进行运算。如果使用“&&”进行运算,当左边为false时,右边的表达式则不会进行运算,因此“&&”被称作短路与。
2:简述break、continue和return语句的区别
break :
(1).结束当前整个循环,执行当前循环下边的语句。忽略循环体中任何其它语句和循环条件测试。 (2).只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出。[逐层判断,逐步跳出] (3).break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转向循环语句下面的语句。 (4).当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。 总的来说:就近原则,结束当前的整个循环。
return:
(1).return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行。 (2).return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。 (3). return后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回调用函数处。
continue:
(1).终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。 (2).结束当前循环,进行下一次的循环判断。 (3).终止当前的循环过程,但他并不跳出循环,而是继续往下判断循环条件执行语句.他只能结束循环中的一次过程,但不能终止循环继续进行.