Java基础语法

Posted best_u

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础语法相关的知识,希望对你有一定的参考价值。

Java基础语法

Java语法的组成
1、关键字 

关键字的定义和特点
定义:被Java语言赋予了特殊含义的单词
特点:关键字中所有字母都为小写
注意事项:
1) true、false、null 不是关键字!是字面量。
2) main 不是关键字!是一个特殊单词,可以被 JVM 识别,主函数是固定格式,作为程序的入口

2、标识符:给类、方法、变量起的名字。
定义合法标识符规则:
1) 必须以字母或下划线或 $ 符号开始,其余字符可以是字母、数字、$ 符号和下划线。
2) 只能包含两个特殊字符,即下划线 _ 和美元符号 $ 。不允许有任何其他特殊字符。
3) 数字不可以开头。
4) 不可以使用Java中的关键字。
5) Java中严格区分大小写。
6) 标识符不能包含空格。
* 使用驼峰命名法,为了提高阅读性,见名知意。Java中的名称规范:[参照:阿里巴巴Java开发手册.pdf]
常用的命令规范:
1) 包名(package):多单词组成时所有字母都小写。xxxyyyzzz
2) 类名接口名:多单词组成时,所有单词的首字母大写。XxxYyyZzz
3) 变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。xxxYyyZzz
4) 常量名:所有字母都大写。多单词时每个单词用下划线连接。XXX_YYY_ZZZ
3、注释:用于注解说明解释程序的文字就是注释。注释的好处:提高了代码的阅读性。
Java中的注释格式[三种]:

> 对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。[查看源文件的属性大小作比较比较直观的了解]
> 对于文档注释,是java特有的注释,其中注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,在用代码去体现。因为代码仅仅是思想的一种体现形式而已。
4、常量和变量
常量:在程序运行过程中,其值不可以改变的量。
4.1 Java中常量的分类
1) 整数常量:所有整数
2) 小数常量:所有小数
3) 布尔(boolean)型常量:较为特有,只有两个数值。true false。
4) 字符常量。将一个数字字母或者符号用单引号( \' \' )标识。
5) 字符串常量。将一个或者多个字符用双引号(" ")标识。
6) null常量。只有一个数值就是:null.
4.2 对于整数:有四种表现形式。
二进制:0,1 ,满2进1
八进制:0-7 ,满8进1. 用0开头表示。
十进制:0-9 ,满10进1.
十六进制:0-9,A-F,满16进1. 用0x开头表示。(数字0,并不是字母O)
变量(Variable):内存中一块存储空间,可保存当前数据。在程序运行过程中,其值是可以改变的。
1) 必须声明并且初始化以后使用(在同一个作用域中不能重复声明变量)!
2) 变量必须有明确类型(Java 是强类型语言)。
3) 变量有作用域(变量在声明的地方开始,到块{}结束)。变量作用域越小越好。
4) 局部变量在使用前一定要初始化!成员变量在对象被创建后有默认值,可直接用。
5) 在方法中定义的局部变量是在该方法被加载时创建。
局部变量:在方法内部定义的变量,称为局部变量(代码块里面变量).
局部变量的特点:局部变量必须先定义后使用;局部变量的内存在栈中分配。
为什么要定义变量:用来不断的存放同一类型的常量,并可以重复使用
使用变量注意:
1、变量的作用域(一对{ }之间有效)
2、定义变量的格式:数据类型 变量名 = 初始化值   => int x=3;
3、局部变量的命名规范:首字符小写,如果是多个单词构成,从第二个单词开始每个单词的首字符大写。
4、终态变量的命名规范:所有字符全部大写,多个单词构成,使用下划线分隔。
注:格式是固定的,记住格式,以不变应万变。辅助理解:变量就如同数学中的未知数。

* 变量内存分析图

注意事项:
1) 字面量、常量和变量的运算机制不同,字面量、常量由编译器计算,变量由运算器处理,目的是为了提高效率。
2) 不管是常量还是变量,必须先定义,才能够使用。即先在内存中开辟存储空间,才能够往里面放入数据。
3) 不管是常量还是变量,其存储空间是有数据类型的差别的,即有些变量的存储空间用于存储整数,有些变量的存储空间用于存储小数。

5、Java的数据类型(基本数据类型、引用数据类型)
  
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间


Java引用数据类型:复合数据类型、复杂数据类型
3个引用数据类型:
类: class
接口:interface
数组:[]
数据的具体类型有2种指定的方式:显式指定,隐式指定(通常是针对字面值。由编译器默认指定)
数据类型的作用:
1) 决定了占用内存空间的大小。
2) 底层的存储的格式
3) 决定了最终显式的形式。
字符类型
char 类型:可以当作整数来对待。 无符号的短整型。没有负数.取值范围 [0-65535]
字符集:字符的集合。字符集合中的每一个字符都对应着一个唯一的整数。
1) ASCII:单字节字符集。只用到了一个字节的后7位。128个字符。
2) ISO8859-1:西欧使用的字符集,单字节字符集。256个字符。兼容了ASCII。
3) GB2312:双字节字符集。兼容了ASCII。主要收录了中文简体。
4) GBK:兼容了 gb2312.增加了繁体中文,还有各个少数民族的符号。
5) UTF-8:三字节的字符集。兼容了 ASCII。
6) Unicode:万国码。java 使用的字符集。jvm 使用的。保证所有的国家的符号都能识别。
example[常用的基本数据类型]

 1 package com.boom.test;
 2 /**
 3  * 整数默认:int        
 4  * 小数:double 双精度
 5  * @project_name testJava 
 6  * @class_name Test01
 7  * @author Dilraba
 8  */
 9 public class Test01 {
10     public static void main(String[] args) {
11         //数据类型  变量名 = 初始化值
12         byte b=3;
13         System.out.println("输出byte类型=>b="+b);
14         short s=4000;
15         System.out.println("输出short类型=>s="+s);
16         int i=12;
17         System.out.println("输出int类型=>i="+i);
18         long l=12345678;
19         System.out.println("输出long类型=>l="+l);
20         long l2=541646465464465564l;/*数值较大取值末尾+l*/
21         System.out.println("输出long类型=>l2="+l2);
22 //        float f= 2.3;/*报错:单精度*/
23         float f2=2.3f;/*强制转换f*/
24         System.out.println("输出float类型=>f2="+f2);
25         double d=2.5;
26         System.out.println("输出double类型=>d="+d);
27         char ch=\'C\';
28         System.out.println("输出char类型=>ch="+ch);
29         boolean b1=true;
30         b1=false;
31         System.out.println(b1);
32     }
33 }
常用的基本数据类型

转义字符(7种常用的转义字符)
\\t: 水平制表符 对应着键盘上的Tab键。
     作用: \\t占用的半角的个数为[1-8]。从\\t包括之前的输出的内容。总共占用的半角的位数必须是8的倍数。\\t用来补齐8个半角位的倍数的。
\\b:退格符: 对应着键盘上的 Backspace 键。
\\r: 回车符: 让光标回到当前行的行首,后续的输出从行首输出。
\\n:换行符: 让光标去下一行。
   Enter 键对应两个字符:\\r\\n 让光标去到下一行的行首。

\\\' : 字符单引号。
\\" :字符双引号。
\\\\ :字符反斜杠

6、运算符
算术运算符
概念:
1、操作数:参与运算的数据 称为操作数。
2、表达式:运算符和操作数的整体 称为表达式。单独的一个操作数也可以看作一个最简单的表达式。 int age = 1+1;
3、返回值:操作数 或者是 表达式 参与 运算的结果。
4、一元运算符:只需要一个操作数的运算符。也叫做 单目运算符。
5、二元运算符:需要两个操作数的运算符。也叫做 双目运算符。
6、三元运算符:需要三个操作数的运算符。也叫做 三目运算符。
注意:参与所有运算的数据,都是操作数 或者 表达式的 返回值 参与的。

e-image && code:

/ 和 % 的应用 [ 求随机数的千位、百位、十位、个位 ]

 1 package com.boom.test;
 2 
 3 import java.util.Scanner;
 4 
 5 /**
 6  * @project_name testJava
 7  * @class_name Test01
 8  * @author Dilraba
 9  */
10 public class Test01 {
11     public static void main(String[] args) {
12         // 任意四位数
13         Scanner scanner = new Scanner(System.in);
14         System.out.print("请输入任意四位数:");
15         int num = scanner.nextInt();
16         int unit = num % 10;// 个位
17         int decade = num / 10 % 10; // 十位
18         int hundred = num / 100 % 10;// 百位
19         int Thousands = num / 1000 % 10;// 千位
20         System.out.println("千位:" + Thousands + "\\n百位:" + hundred + "\\n十位:" + decade + "\\n个位:" + unit);
21     }
22 }
个位、十位、百位、千位

 
i++和++i的异同之处
共同点:
1、i++ 和 ++i 都是变量自增+1,都等价于i=i+1
2、如果i++,++i是一条单独的语句,两者没有任何区别。
3、i++和++i的使用仅仅针对变量。5++和++5会报错,因为5不是变量。
不同点:
如果i++,++i 不是一条单独的语句,他们就有很大的区别。
i++ :先运算后 +1

++i : 先+1 后运算

赋值运算符

符号:  =    符合赋值运算符:[Java中:+=、-=、*=、/=、%=] => 类型自动提升
复合赋值运算符特点:
1,生成的字节码文件要稍微小一点点(内存消耗小)。
2,隐含一个强制类型的转换。强制转换的类型为 左边变量的类型
* 左值 的类型 要和 右值表达式的返回值的类型 要兼容,不然会出现精度丢失。
示例:int a,b,c;  a = b = c =3;
   int a = 3; a += 5;  => a+=5 <==> a=a+5
example

 1 package com.boom.test;
 2 
 3 import java.util.Scanner;
 4 
 5 /**
 6  *  赋值运算符 = += -= *= /= %=
 7  * @project_name testJava
 8  * @class_name Test01
 9  * @author Dilraba
10  */
11 public class Test01 {
12     public static void main(String[] args) {
13         int num = 3;
14         num += 2; // num = num +3 =5
15         System.out.println("num=" + num);// 5
16 
17         short s = 5;
18         s += 2;// 自动类型提升 s=s+2
19         /*
20          * s=s+4;//丢失精度 *报错 改成下面代码 强制转换 s=(short)+(s+4);
21          */
22         System.out.println("s=" + s);
23     }
24 }
赋值运算符 = += -= *= /= %=

比较运算符(关系运算符)
1、>、<、>=、<= :只适用于 数值型包括 char 类型的数据。
2、==  != 适用于 java支持的所有的数据类型。

example

逻辑运算符
逻辑运算符:参与逻辑运算的操作数必须是 boolean 类型的数据。逻辑表达式的 返回值 也是 boolean 类型。在Java中不可以写成3<x<6,应该写成x>3 & x<6




短路与( && ) 、条件与 (  & )区别:
&&:如果表达式左边为真,表达式右边参与运算;如果左边为假,那么右边不参与运算,直接返回整个逻辑表达式的结果为false 。
& :表达式左边运算结果无论真假,右边都进行运算。
* 短路与的效率往往高于逻辑与,通常使用短路与  &&

短路或( || ) 、 条件或 (  | )区别:
|: 无论左边运算结果是什么,右边参与运算;
||:当左边为true时,右边不参与运算;直接返回整个逻辑表达式的值 为  true

异或( ^ )与或( | )的不同之处是:只有表达式左右都为true时,结果为false,当两边都为false,结果也为false

位运算符
按位与( & ):二元运算符。
规则:低位对齐,进行按位与。 对应的位 有0则0  全1则1.
1:可以将某个整数的某些二进制位设置为0。
2:可以得到某一个数的制定区间的二进制表示的数据。

按位或( | ):二元运算符。
规则:低位对齐,进行按位或。对应的位,有1则1,全0则0

如果两个操作数 对应的位上没有全1 的,那么进行按位或和加的效果一致

按位异或( ^ ):二元运算符。
规则:对应的位上 相异为1,相同为0

特点:一个数先后和同一个数据异或两次,结果是它自身


异或简单加密应用

按位取反( ~ ) :一元运算符。
规则:所有的二进制位0--->1 1--->0
System.out.println(~0);//-1
移位运算符
<< 左移 :高位被移走,包括符号位。低位补0.

>> :带符号右移  :低位被移走,高位空出来的补符号位,正数补0 负数补1.
 

三元运算符( 条件运算符 )
Java 中唯一的三目运算符。 需要三个操作数。可以是java 支持的任意的表达式。两个表达式的返回值的类型 需要兼容。
格式:条件表达式 ? 表达式1 : 表达式2
1)条件表达式为true,返回表达式1;
2)条件表达式为false,返回表达式2;

示例:Example

两值互换的几种方法:
1、定义第三方变量进行互换

2、数值直接运算   缺:数值过大超过int取值范围,出现强制转换,数据发生变化

3、异或:一个数异或同一个数两次,结果还是这个数(阅读性差)

运算符的优先级
1:乘除取余 大于 加减。
2:一元运算符 大于 二元运算符 的优先级。
3:二元运算符的优先级高于三元运算符的优先级。
4:赋值运算符优先级最低。
5:配合小括号使用。

附加:random随机数
1、Math.random();返回值是一个随机的double 值
语句:Math.random() * (MAX-MIN) + MIN

取整:int value = (int)(Math.random() * (MAX-MIN) + MIN);

2、导入import java.util.Random产生随机数
位移运算符:一条语句产生随机数:int value = (random.nextInt()>>>1)%(MAX-MIN)+MIN;

练习:随机数+三目运算符应用[ 求三个数的最大值 ]

 1 // 获得随机数
 2 import java.util.Random;
 3 public class RandomNumber{
 4     public static void main(String[] args){
 5         // 定义随机数区间
 6         final int MIN = 1,MAX = 100;
 7         Random random = new Random();
 8         int num1 = (random.nextInt()>>>1)%(MAX-MIN)+MIN;
 9         int num2 = (random.nextInt()>>>1)%(MAX-MIN)+MIN;
10         int num3 = (random.nextInt()>>>1)%(MAX-MIN)+MIN;
11 
12 //        int num1 = (int)(Math.random()*(MAX-MIN)+MIN);
13 //        int num2 = (int)(Math.random()*(MAX-MIN)+MIN);
14 //        int num3 = (int)(Math.random()*(MAX-MIN)+MIN);
15         
16         
17         int max = num1 > num2 ? num1:num2;
18         max = max > num3 ? max:num3;
19         System.out.print("num1 = "+num1+"\\tnum2 = "+num2+"\\tnum3 = "+num3+"\\tmax=>"+max);
20         
21     }
22 }
View Code

7、基本数据类型转换

方式:自动类型转换(也叫隐式类型转换), 强制类型转换(也叫显式类型转换)
类型转换:java 不支持 不同类型之间的运算。如果有不同类型之间的数据做运算的话,那么首先第一步做同类型转换。编译器来完成这种转换的。自动的完成的。
转换的规则
1:所有的 byte、short、char 的值将被提升到int型。
2:如果一个操作数是long型,计算结果就是long型;
3:如果一个操作数是float型,计算结果就是float型;
4:如果一个操作数是double型,计算结果就是double型。System.out.println(6 % 123456L);// 2.0
上述的转换都是 编译器 来完成的。自动完成的。在编译期完成类型的转换,也就是将小类型的数据 当作大类型的数据来使用(如果需要)。
注意:1 和 2 自动转换 是 绝对安全的。 3、4 有可能存在精度的损失。java 语法上这样是允许的

自动类型提升

强制类型转换。语法:(强制转换为的类型)(被转换的数据);

example[ 类型自动提升 && 强制类型转换 ]

 1 /*类型提升&强制转换*/
 2 class VarDemo2
 3 {
 4     public static void main(String[] args) 
 5     {
 6         
 7         int x=2; 
 8         byte b=1;
 9         x=x+b;//占用较小的自动提升为int型
10         System.out.println("x="+x);//x=3
11         
12         byte b1=2;
13         b1=(byte)(b1+5);//强制类型转换
14         System.out.println("b1="+b1);
15         //a=65+1=66 =>b
16         System.out.println("转换后输出字符:"+(char)(\'a\'+1));//强制转换为char 输出b
17         
18 
19         byte b2=3;
20         byte b3=7;
21         int s;/*强制转换*/
22         s=b2+b3;//s=10
23         System.out.println("s="+s);
24 
25         //Integer.MIX_VALUE int类型最大最小值
26         int max=Integer.MAX_VALUE;
27         int min=Integer.MIN_VALUE;
28         System.out.println("int_MAX="+max+"\\n"+"int_MIN="+min);
29     }
30 }
View Code


&& 得到一个随机字符[A-Z]or[a-z](大小写也随机)

 1 // 得到一个随机字符[A-Z]or[a-z](大小写也随机)
 2 import java.util.Random;
 3 public class RandomCharTest{
 4     public static void main(String[] args){    
 5         final int MAX = \'Z\'+1;
 6         final int MIN = \'A\';
 7         // 得到随机大写字符
 8         char ranChar =(char)(Math.random()*(MAX - MIN)+MIN);
 9         System.out.println("随机大写字符:"+ranChar);
10         
11         Random random = new Random();
12         // 大小写随机 三目运算符进行判断
13         boolean isUpperCase = random.nextBoolean();
14         ranChar = isUpperCase ? ranChar : (char)(ranChar+32);
15         System.out.println("得到随机字符:"+ranChar);
16         
17     }
18 }
View Code

8、Java流程控制[ 顺序、分支、循环]
if 单分支

条件:必须是一个 boolean 表达式。返回值为 boolean 值的表达式。
if 代码块:一个使用 一对花括号{ } 封闭的代码块。代码块组成可以是java 支持的任意行数的代码。
执行过程:
1:首先计算条件 的返回值。如果是 返回值 为 true。那么执行 if 代码块中所有的内容。
2:如果条件的返回值 为 false。那么就跳过所有的 if 代码块中的内容

&& IfTest小练习

 1 //求两个随机数的最大值  范围[0-20].
 2 //需求:产生一个随机数,范围[0-20]. 来代表一个年龄 age,
 3 //使用if 语句,如果 age [0-3] 输出 还没有上学 [4-6] 幼儿园小朋友  [7-12] 小学生 [13-15] 中学生 [16-18]  高中生 [19-22] 大学生。
 4 import java.util.Random;
 5 public class IfTest {
 6     public static void main(String[] args) {
 7         // 定义最大最小值
 8         final int MAX = 21;
 9         final int MIN = 0;
10         // 产生两个随机数
11         int num1 = (int)(Math.random()*(MAX - MIN)+MIN);
12         int num2 = (int)(Math.random()*(MAX - MIN)+MIN);
13         System.out.println("num1=" +num1 +"\\nnum2=" +num2);
14         
15         // 求两个随机数的最大值
16         //  最大值赋值给num1
17         int max = num1;
18         if(num1 < num2) {
19             max = num2;
20         }
21         System.out.println("max="+max);
22 
23         System.out.println();
24 
25         //产生一个随机的年龄
26         int age = (int)(Math.random()*(MAX-MIN)+MIN);
27         System.out.println("age="+age);
28         if(age >=0 && age <=3) {
29             System.out.println("还没有上学!");
30         }
31         if(age >=4 && age <=6) {
32             System.out.println("幼儿园小朋友!");
33         }
34         if(age >=13 && age <=15) {
35             System.out.println("初中生!");
36         }
37         if(age >=7 && age <=12) {
38             System.out.println("小学生!");
39         }
40         if(age >=16 && age <=18) {
41             System.out.println("高中生!");
42         }
43         if(age >=19 && age <=22) {
44             System.out.println("大学生!!");
45         }
46 
47     }
48 }
View Code

if-else 双分支

执行过程:
1:如果if 后的条件成立   true 那么就执行 if 代码块中的内容。 不执行 else 中的内容。
2:如果if 后的条件不成立 false ,那么不会执行 if 代码块中的内容, 执行 else 中的内容。

注意:
1:else 代码块不能单独存在。
2:如果 if 代码块 或者是 else 代码块中的内容为一条java 语句,那么两个大括号都可以省略。建议大括号添加。
3:if else 两个代码块 执行且必须要执行某一个代码块中的内容。 条件互斥的。
当 if else运算后有具体的结果,可简化三元运算符

&& if-else小练习以上是关于Java基础语法的主要内容,如果未能解决你的问题,请参考以下文章

Java 基础语法方法的使用

7.JSP基础语法,指令和标签以及Java Bean

JSP简介和基础语法

Java Web学习总结JSP

Java Lambda

如何进行 Java 代码阅读分析?