2、java基础
1、注释 -----> 注释不会出现在字节码文件中。即Java编译器编译时会跳过注释语句。
- // 单行注释 ,注释内容从//到本行末尾
- /* */ 多行注释,/* */ 注释不能嵌套
- /** */文档注释,可以通过JDK提供的Javadoc命令,生成程序的API文档
2、标识符 -------> 常量、变量、方法、类和包等的名称
- 规则:
• 必须以字母、_下划线、美元符$开头。
• 其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合
• 大小写敏感,长度无限制。
• 不可以是Java的关键字。
- 注意:Java不采用通常语言使用的ASCII字符集,Java采用unicode这样的标准的国际字符集。
3、字符集
• ASCII 英文字符集 1个字节
• ISO8859-1 西欧字符集 1个字节
• BIG5 台湾的大五码,表示繁体汉字 2个字节
• GB2312 大陆使用最早、最广的简体中文字符集 2个字节
• GBK GB2312的扩展,可以表示繁体中文 2个字节
• GB18030 最新GBK的扩展,可以表示汉字、维吾尔文、藏文等中华民族字符 2个字节
• Unicode 国际通用字符集 2个字节
4、数据类型:Java是一种强类型语言。常量是有数据类型的。变量都必须声明其数据类型。
5、变量
• Java是一种强类型语言,每个变量都必须声明其类型。Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。变量在使用前必须对其声明, 只有在变量声明以后,才能为其分配相应长度的存储单元。
• 声明格式为:type varName [=value] [{,varName[=value]}] ;
• 注意事项:
每个变量都有类型,类型可以是基本类型,也可以是引用类型。
变量名必须是合法的标识符。
• 变量分类:
局部变量:方法或语句块里定义的变量,生命周期是从定义到方法或语句块结束。局部变量必须先赋值即初始化,才可以使用。
成员/实例变量:在类里部,方法外部定义的变量。它属于对象,生命周期伴随着对象。如果不赋值进行初始化,它会自动进行初始化。
静态变量:使用static修饰,从属于类。生命周期始终伴随类--->类加载到卸载。
6、常量
- 常量表示不能改变的数值。在Java里通常用final修饰常量,这个常量就不可以修改了。
- final String NAME = "hello" ----> 这个苍凉不能改变。
7、数据类型详细说明
-
整型
(1)整型常量:默认是int类型,声明long类型需要在数值后面加上L。
• 十进制整数,如:99, -500, 0
• 八进制整数,要求以 0 开头,如:015
• 十六进制数,要求 0x 或 0X 开头,如:0x15
(2) 整型变量
- 浮点型
(1)浮点常量:默认是double,如果需要转化为float,需要在数值后面加上F/f。浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要引用
BigDecimal类。
• 十进制数形式,例如:3.14 ;314.0 ;0.314
• 科学记数法形式,如 314e2; 314E2 ;314E-2
(2)浮点变量:
• float类型:单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。
• double类型:双精度类型 精度是float类型的两倍,绝大部分应用程序都采用double类型。
- 字符--占用2个字节。
• 单引号用来表示字符常量。例如‘A’是一个字符,它与“A”是不同的,“A”表示含有一个字符的字符串。
• char 类型用来表示在Unicode编码表中的字符。
• Unicode编码被设计用来处理各种语言的所有文字,它占2个字节,可允许有65536个字符;ASCII码占1个字节,可允许有128个字符(最高位是0),是Unicode编码表中前128个字符。
• Java 语言中还允许使用转义字符 ‘\’ 来将其后的字符转变为其它的含义,char c2 = '\n'; //代表换行符
• char类型在内存中存储的是该字符的Unicode编码值,所以char类型可以当做int类型来处理
- 布尔
• boolean类型有两个值,true和false
• boolean 类型用来判断逻辑条件,一般用于程序流程控制
• 实践:请不要这样写:if ( is == true && done == false ) ,只有新手才那么写。对于任何程序员 if ( whether && !done ) 都不难理解吧。所以去掉所有的==fasle 和 ==true。
8、运算符
• 算术运算符: +,-,*,/,%,++,--
• 赋值运算符 =
• 扩展赋值运算符:+=,-=,*=,/=
• 关系运算符: >,<,>=,<=,==,!=
• 逻辑运算符: &&,||,!
• 位运算符: &,|,^,~ , >>,<<,>>> (了解!!!)
• 条件运算符 ?:
• 二元运算符类型提升:
• 整数运算:
• 如果两个操作数有一个为Long, 则结果也为long
• 没有long时,结果为int。即使操作数全为shot,byte,结果也是int.
• 浮点运算:
• 如果两个操作数有一个为double, 则结果为double.
• 只有两个操作数都是float, 则结果才为float.
• 一元运算符(++, --):
int a = 3;
int b = a++; //执行完后,b=3。先给b赋值,再自增。
int c = ++a; //执行完后,c=5。先自增,再给b赋值
• 关系运算符用来进行比较运算
• 关系运算的结果是布尔值:true/false
• 逻辑运算符与布尔操作数一起使用,组成逻辑表达式
• 逻辑表达式的结果是布尔值
• &和&&的区别
• “&”:无论任何情况,“&”两边的表达式都会参与计算。
• “&&”: 当“&&”的左边为false,则将不会计算其右边的表达式。即左false则false
• “|”和“||”的区别与“&”和“&&”的区别类似。
• 条件运算符
• 语法格式: x ? y : z
• 执行过程: 其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则整个三目运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值。
9、基本数据类型之间的转换
(1)自动转换
- 算术运算时的转换
操作数1类型 操作数2类型 转换后类型
byte、short、char int int
byte、short、char、int long long
byte、short、char、int、long float float
byte、short、char、int、long、float double double
- 赋值运算时的转换
• 类型转换的方向
• 低------------------------------------------------------>高
• byte —> short,char—>int —>long—>float —>double
(2)强制转换
• 强转时,当心丢失数据或失真
• 当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值。
(3)总结
• =右侧:所有变量先转换为字节数最多的数据类型,再计算
• =两侧:左侧宽度>右侧宽度 自动转换
• 左侧宽度<右侧宽度 强制转换
• 特例:可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围
• short b = 12; //合法
• short b = 1234567; //非法
10、流程控制语句
- if 单分支选择结构
double i i = 6 * * Math. random (); double j = 6 * * Math. random (); double k = 6 * * Math. random (); int count = ( int ) (i i + j + k); if(count > 15 ) { System. out .println“ (“ 今天手气不错 ”); } } if(count >= 10 && count <= 15) { // 错误写法: 10<count<15 System. out .println“ (“ 今天手气很一般 ”); } } if(count < 10) { System. out .println“ (“ 今天手气不怎么样 ”); } } System. out .println" (" 得了 " + count + " 分 "); 要求必须是布尔表达式
- if-else双分支选择结构
double r = 4 * * Math. random (); double area = Math.I PI * * Math. pow (r, 2); double circle = 2 * * Math.I PI * * r; System. out .println“ (“ 半径为: ” + r); System. out .println“ (“ 面积为: ” + area); System. out .println“ (“ 周长为: ” + circle); if(area >= circle) { System. out .println“ (“ 面积大于等于周长 ”); } else { System. out .println“ (“ 周长大于面积 ”); } }
- If-else if-else多分支选择结构
int age = ( int ) (100 * * Math. random ()); System. out .print“ (“ 年龄是 ” + age + “, 属于 ”); if (age < 15) { System. out .println“ (“ 儿童, 喜欢玩! ”); } else if (age < 25) { System. out .println“ (“ 青年, 要学习! ”); } else if (age < 45) { System. out .println“ (“ 中年, 要工作! ”); } else if (age < 65) { System. out .println“ (“ 中老年, 要补钙! ”); } else if (age < 85) { System. out .println“ (“ 老年, 多运动! ”); } else { System. out .println“ (“ 老寿星, 古来稀! ”); } }
- switch多分支选择结构
switch (表达式) { case 值1 : 语句序列; [break]; case 值2: 语句序列; [break] ; … … … … … [default: 默认语句 ;] }
- switch多值选择结构
char c = ‘a’; int rand =( int ) (26* * Math.random ()); char c2 = (char)( c+rand; ); System.out.print (c2 + “: ”); switch (c2) { case ‘a’: case ‘e’: case ‘i i: ’: case ‘o’: case ‘u’: System.out.println“ (“ 元音 ”); break; case ‘y’: case ‘w’: System.out.println“ (“ 半元音 ”); break; default: System.out.println“ (“ 辅音 ”); } }
- while循环 --->四个结构:初始化、条件判断、循环体、迭代。 先判断,后执行。
1 public class WhileTest { { 2 public static void main(String[] args ) { 3 int i i = 0; 4 int sum = 0; 5 while (i i <= 100) { 6 sum += i i ; //sum = sum+i ; 7 i ++; 8 } } 9 System.out.println ("Sum= " + sum); 10 } } 11 } }
- do-while循环-->先执行,后判断。
While 和 do while 的区别:
Do while 总是保证循环体会被至少执行一次!
这是他们的主要差别
int a = 0; while(a<0){ System. out .println (a); a++; } } System. . out .println (“-----”); a=0; do{ System. out .println (a); a++; } while (a<0);
- for循环
• 语法形式
for (初始表达式;布尔表达式;步进) {
循环体;
}
• 注意事项
• for循环在执行条件测试后,先执行程序部分,再执行步进。
• 在for语句的初始化部分声明的变量,其作用域为整个for循环体
• “初始化”和“循环条件表达式”部分可以使用逗号来执行多个操作, 如果三个部分都为空语句(分号不能省),相当于一个无限循环
- 跳转语句---break和continue
• 在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句还可用于多支语句switch中)
• continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
生成 0-100 随机数,直到生成 88 为止,停止循环 int total = 0; System.out.println(“Begin”); while(true) { total++; int i = (int)Math.round(100 * Math.random()); if(i == 88) break; } System.out.println("Game over, used " + total + " times.");
把 100~150 之间不能被3整除的数输出 for (int i = 100; i < 150; i++) { if (i % 3 == 0) continue; System.out.println(i); }
- 跳转语句---return
• return语句从当前方法退出,返回到调用该方法的语句处,并从该语句的下条语句处继续执行程序。
• 返回语句的两种格式(具体到方法时详细讲解)
1、return expression
返回一个值给调用该方法的语句。
返回值的数据类型必须和方法声明中的返回值类型一致或是精度低于声明的数据类型。
2、return
当方法声明中用void声明返回类型为空时,应使用这种返回类型,它不返回任何值。