JAVA基础-语法基础
1.学习java注意的地方 Java语言拼写上严格区分大小写; 一个Java源文件里可以定义多个Java类,但其中最多只能有一个类被定义成public类; 若源文件中包括了public类,源文件必须和该public类同名; 一个源文件中包含N个Java类时,编译后会生成N份字节码文件,即每个类都会生成一份单独的class文件,且字节码文件名和 其对应的类名相同; 我的总结:一个Java源文件只定义一个类,不同的类使用不同的源文件定义; 将每个源文件中单独定义的类都定义成public的; 保持Java源文件的主文件名与源文件中的类名一致; 2、Java语法格式 任何一种语言都有自己的语法规则,Java也一样,既然是规则,那么知道其如何使用就可以了。 代码都定义在类中,类由class来定义,区分 public class 和 class; 代码严格区分大小写,如main 和 Main 是不一样的; Java中的标识符与关键字; 注释; main方法的作用: 程序的入口 保证程序的独立运行 被JVM调用 3、代码注释:单行//,多行/* */,文档注释/** */ 1.单行注释 //: //后到本行结束的所有字符会被编译器忽略; 2.多行注释 /* */: /* */之间的所有字符会被编译器忽略 3.文档注释 /** */: 在/** */之间的所有字符会被编译器忽略,java特有的(用于生成文档); 我的总结:多行和文档注释都不能嵌套使用。 4、Java中的标识符 可简单理解为在Java程序中为了增强阅读性自定义的名称。比如:类名,方法名,变量名等。 命名规则: (1) 由字母、数字、下划线、$组成,不能以数字开头 注意:此处的字母还可以是中文,日文等; (2) 大小写敏感 (3) 不得使用java中的关键字和保留字 (4) 别用Java API里面的类名作为自己的类名。 5、java中的常量和变量 变量的概念: 占据着内存中的某一个存储区域; 该区域有自己的名称(变量名)和类型(数据类型); 该区域的数据可以在同一类型范围内不断变化; 为什么要定义变量: 用来不断的存放同一类型的常量,并可以重复使用; 使用变量注意: 变量的作用范围, 初始化值 定义变量的格式: 数据类型 变量名 = 初始化值; 注:格式是固定的,记住格式,以不变应万变。 作用范围:定义开始到定义它的代码块结束; 同一范围内,不允许多个个局部变量命名冲突 6、Java成员变量和局部变量 局部变量:不是声明在类体括号里面的变量; 局部变量使用前必须初始化值; 局部变量没有默认初始化值; 局部变量的作用域是从定义开始到定义它的代码块结束; 成员变量:在方法体外,类体内声明的变量,又称字段(Field)或全局变量; (其实Java中没有全局变量,由于Java是面向对象语言 ,所有变量都是类成员) 成员变量的作用域是整个类中; 我的总结:注意成员变量和局部变量的区别
1 package reviewDemo; 2 3 public class Demo2 { 4 public static void main(String[] args) { 5 int i; 6 System.out.println(i); 7 } 8 }
备注:局部变量调用前没有初始化,所以编译的时候就会报错!
1 package reviewDemo; 2 3 public class Demo2 { 4 static int i; 5 public static void main(String[] args) { 6 System.out.println(i); 7 } 8 }
备注:此时i为全局变量,未初始化会被赋予默认的初始化值!程序正确! 我的总结: 局部变量是定义在方法中的变量,,,出了该方法就不能访问该变量了.... 成员变量是在类中定义,,,,并且在类的成员方法中都能访问的变量.. 7、基本数据类型 在数据类型中,最常用也是最基础的数据类型,被称作基本数据类型。可以使用这些类型的值来代表一些简单的状态。 Java 语言的基本数据类型总共有以下8 种,下面是按照用途划分出的4 个类别: 定点类型: 整数型是一类代表整数值的类型。当需要代表一个整数的值时,可以根据需要从4 种类型中挑选合适的,如果没有特殊要求的话,一般选择int 类型。4 种整数型区别主要在每个数据在内存中占用的空间大小和代表的数值的范围。 浮点类型: 小数型是一类代表小数值的类型。当需要代表一个小数的值时,可以根据需要从以下2 种类型中挑选合适的。如果没有特殊要求,一般选择double类型。 由于小数的存储方式和整数不同,所以小数都有一定的精度,所以在计算机中运算时不够精确。根据精度和存储区间的不同,设计了两种小数类型。 字符型: 字符型代表特定的某个字符,按照前面介绍的知识,计算机中都是以字符集的形式来保存字符的,所以字符型的值实际只是字符集中的编号,而不是实际代表的字符,由计算机完成从编号转换成对应字符的工作。Java 语言中为了更加方便国际化,使用Unicode 字符集作为默认的字符集,该字符集包含各种语言中常见的字符。在程序代码中,字符使用一对单引号加上需要表达的字符来标识,例 如’A’、’a’等,当然也可以直接使用字符编码,也就是一个非负整数进行表示。 布尔型: 布尔型代表逻辑中的成立和不成立。Java 语言中使用关键字true 代表成立,false 代表不成立。布尔型是存储逻辑值的类型,其实很多程序中都有逻辑值的概念,Java 把逻辑的值用布尔型来进行表达。 8、基本数据类型转换之向上转型和向下转换 向上转换: 整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则: 容量小的类型可自动转换为容量大的数据类型; byte,short,char → int → long → float → double byte,short,char之间不会相互转换,他们在计算时首先会转换为int类型。 boolean 类型是不可以转换为其他基本数据类型。 Eg: int i = 123; long l = i; //自动转换,不需强转 float f = 3.14F; double d = f; 向下转换: 整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则: 容量小的类型可自动转换为容量大的数据类型; byte,short,char → int → long → float → double byte,short,char之间不会相互转换,他们在计算时首先会转换为int类型。 boolean 类型是不可以转换为其他基本数据类型。 Eg: long l = 123L; int i = (int) l;//必须强转 double d = 3.14; float f = (float) d; 我的总结:类型转化 小转大,自动!自动类型转换(也叫隐式类型转换) 大转小,强转!强制类型转换(也叫显式类型转换) 9、Java的运算符 运算符是一种特殊符号,用以表示数据的运算、赋值和比较等共分以下几种: 算术运算符(+ 、- 、* 、/ 、%) 赋值运算符(= 、+=、-=、*=、/=,、%=) 关系运算符(>、>=、<、<=、!=) 条件运算符(&&、||、!&、|、^) 位运算符(&、|、^、~、>>、<<、<<<、>>>) 我的总结: 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。 “&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。 “|”和“||”的区别同理,双或时,左边为真,右边不参与运算。 “ ^ ”与“|”不同之处是:当左右都为true时,"^"结果为false。 10、表达式和三目运算符 是由数字、运算符、数字分组符号(括号)等以能求得数值的有意义排列的序列; a + b 3.14 + a (x + y) * z + 100 boolean b= i < 10 && (i%10 != 0) 表达式的类型和值: 对表达式中操作数进行运算得到的结果是表达式的值。 表达式值的数据类型即为表达式的类型。 表达式的运算顺序 应按照运算符的优先级从高到低的顺序进行; 优先级相同的运算符按照事先约定的结合方向进行; “三目运算符”,语法格式: x ? y : z; 其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算符的结果是表达式y的值,否则就是z的值。
1 package reviewDemo; 2 3 public class Demo2 { 4 public static void main(String[] args) { 5 String s = "lz"; 6 s = (s == "lz" ? "正确" : "错误"); 7 System.out.println(s); 8 } 9 }
输出:正确 11、程序流程控制 顺序结构 分支结构(条件结构) 循环结构 控制循环结构 顺序结构: 如果代码里没有流程控制,程序是至上而下一行一行执行的,一条语句执行完之后继续执行下一条语句,直到程序的最后。 if语句: 基本语法:if(表达式){方法体}else if(表达式){方法体}else(方法体) 几种形式: 三种格式: if(条件表达式){执行语句;} if(条件表达式){执行语句;}else{执行语句;} if(条件表达式){执行语句;}else if (条件表达式){执行语句;}……else{执行语句;}
1 public class If3 2 { 3 public static void main(String args[]) 4 { 5 int i = 3; 6 if (i > 5) 7 { 8 System.out.println("变量i大于5"); 9 } 10 else if (i > 4) 11 { 12 System.out.println("变量i小于4"); 13 } 14 else 15 { 16 System.out.println("其他"); 17 } 18 } 19 }
switch控制语句 格式: switch(表达式) { case 表达式可能的结果值1: 执行语句; break; case 表达式可能的结果值2: 执行语句; break; ... default: 执行语句; break;//最后这个一般不写 } 备注: case之间与default没有顺序。先执行第一个case,都没有匹配的case值执行default。 结束switch语句的两种情况:遇到break,switch语句执行结束。 如果匹配的case或者default没有对应的break,那么程序会从第一次匹配的case语句开始继续向下执行,运行可以执行的语句,直到遇到break或者switch结束为止。
1 class switch2 2 { 3 public static void main(String[] args) 4 { 5 int a = 7,b = 5; 6 switch(a-b) 7 { 8 case 3://表达式可能的值; 9 { 10 System.out.println("33!"); 11 } 12 break; 13 14 case 4: 15 { 16 System.out.println("44!"); 17 } 18 break; 19 default://都没有执行则 执行该语句! 20 System.out.println("其它的"); 21 22 } 23 } 24 }
注意:switch语句只能使用byte、char、short、int四种基本类型以及它们的包装类和枚举 12、三大循环结构: 用于处理需要重复执行的操作; 根据判断条件的成立与否,决定程序段落的执行次数,而这个程序段落我们称为循环体; while:事先不需要知道循环执行多少次; do while:同上,只是至少要执行一次(先做,后判断); for:需要知道循环次数; 循环结构(while & do while) while语句 格式: while(条件表达式值为true) { 执行语句; } do while语句 格式: do { 执行语句; } while(条件表达式值为true); 我的总结:do while特点是无论条件是否满足,循环体至少被执行一次。 循环里的条件表达式不能直接写false或直接写结果是false的表达式,不过可以使用变量来传递false值; 循环结构(for) 格式: for(初始化表达式(1);循环条件表达式(2);循环后的操作表达式(3)) { 执行语句;(4) } 执行顺序:(1) → (2) → (4) → (3) → (2) → (4) → (3) 备注: 1, for里面的3个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。 2, while与for可以互换,区别在于for为了循环而定义的变量在for循环结束就在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。 3, 最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。 Eg: 用三种循环控制求出100以内前5个3的倍数的数字;
1 class while 2 { 3 public static void main(String[] args) 4 { 5 int i = 1,k = 0; 6 while(i<=100) 7 { 8 if(i%3==0) 9 { 10 if(k<5) 11 System.out.println(i); 12 k++; 13 } 14 i++; 15 } 16 } 17 } 18 19 class dowhile 20 { 21 public static void main(String[] args) 22 { 23 int i = 1,k = 0; 24 do{ 25 if(i%3==0) 26 { 27 if(k<5) 28 System.out.println(i); 29 k++; 30 } 31 i++; 32 } 33 while(i<=100); 34 } 35 } 36 37 class for 38 { 39 public static void main(String[] args) 40 { 41 int i = 1,k = 0; 42 for(;i<100;i++) 43 { 44 if(i%3==0&&k<5) 45 { 46 System.out.println(i); 47 k++; 48 } 49 } 50 } 51 }
13、嵌套循环与流程控制 嵌套循环:循环里套循环 假设外循环的循环次数是m次,内循环的循环次数是n次,那么内层循环的循环次数需要 m * n次。 Eg:利用for循环语句的嵌套打印出乘法口诀表
1 class break1 2 { 3 public static void main(String[] args) 4 { 5 for(int i=1;i<=10;i++)//定义i与j的值必须在for循环里面,否则每次跳出循环重新执行就无法取值 6 { 7 for(int j=1;j<=10;j++) 8 { 9 if(j<=i) 10 System.out.print(j+"*"+i+"="+i*j+" ");//小注意:print()括号里面 11 必须传递参数,println()无限制! 12 } 13 System.out.println(); 14 } 15 } 16 }
流程控制 break语句、 continue语句; break:终止该层循环; continue:跳过该层循环 注: ①:若这两个语句离开应用范围,存在是没有意义的。 ②:这个两个语句后面都不能有语句,因为执行不到。 ③:continue语句是跳过本次循环,继续下次循环。 ④:标签的出现,可以让这两个语句作用于指定的循环。
1 package reviewDemo; 2 3 public class Demo2 { 4 public static void main(String[] args) { 5 int i = 1; 6 for (; i < 10; i++) { 7 System.out.println(i); 8 if(i == 8){ 9 break;//流程控制,不会完全执行! 10 } 11 } 12 } 13 }