Java基本语法(一)

58 阅读3分钟

关键字和保留字

  • 关键字:被Java赋予特殊含义,用作专门用途的字符串(单词)

特点:关键字中所有字母均为小写

  • 保留字(reserved word):现有Java版本尚未使用,但是后续版本可能作为关键字使用的。
  • oracle官方地址

标识符(Identifier)

定义:对各种变量、方法、类、接口、包等命名时使用的字符序列

注意:凡是自己可以起名字的地方都叫标识符。

合法标识符规则:

  1. 26个英文字母大小写、0-9、_或者$组成。
  2. 数字不能开头。
  3. 不能使用keyword和reserved word,但可以包含。
  4. 严格区分大小写,长度不限制
  5. 标识符不能包含空格

Java中的命名规范:

  1. 包名:xxyyzz
  2. 类名、接口名:XxxYyyZzz
  3. 变量名、方法名:xxxYyyZzz
  4. 常量名:XXX_YYY_ZZZ

注意:

  1. 见名知意
  2. 不要用汉字起名

变量

Java是强变量语言;定义不再赘述。

按照数据类型划分:

基本数据类型

  • 整型:

byte(1B)、 short(2B)、int(4B)、long(8B)

其中关于long的声明,必须赋值时数字末尾加上 “L” / “l”。

整型常量默认为int

  • 浮点型:

float(4B)、double(8B)

float定义,数字末尾以 “f” / “F” 结尾。

浮点型常量默认为double

  • char(1字符=2B):

    1.用 ' ' 来声明;

    2.熟悉一些转义字符:

    \b退格
    \n换行
    \r回车
    \t制表符
    "用\将”转义为普通的“
    \‘同上,普通’
    \普通\

    3.Unicode值来表示字符型常量,如char c1 = '\u0043',此为‘C’字符

  • boolean

只能取值为true/fasle


类型转换


自动类型提升

容量小的和容量大的数据类型做运算,结果自动提升为容量大的类型。

容量:表示数的大小范围。

byte、char、short < int < long < float < double

特别的:其中byte、char、short互相运算的结果是int

 class LittleTypeTest{
     static public void main(String[] args){
         //char+byte
         char char_1 = 'a';
         byte byte_1 = 2;
         //byte sum_1 = char_1 + byte_1;//错误: 不兼容的类型: 从int转换到byte可能会有损失
         //char sum_2 = char_1 +byte_1;//错误: 不兼容的类型: 从int转换到char可能会有损失
         //用int接收
         int right_sum1 = char_1 + byte_1;
         System.out.println(right_sum1);//99 
         
         
         //char + short
         char char_2 = 'a';
         short short_1 = 10;
         //short sum_3 = char_2 + short_1; //错误: 不兼容的类型: 从int转换到short可能会有损失
         //char sum_4 = char_2 + short_1; //错误: 不兼容的类型: 从int转换到char可能会有损失
         
         int right_sum2 = char_2 + short_1;
         System.out.println(right_sum2); //107
         
         
         //byte + short
         byte byte_2 = 'a';
         short short_2 = 50;
         //byte sum_5 = byte_2 + short_2; //错误: 不兼容的类型: 从int转换到byte可能会有损失
         //short sum_6 = byte_2 + short_2;   //错误: 不兼容的类型: 从int转换到short可能会有损失
         
         int right_sum3 = byte_2 + short_2;
         System.out.println(right_sum3);//147
         
         
         //注意!!!
         //以byte + byte为例, 也得用int接收
         byte temp1 = byte_1 + byte_2;
         System.out.println(temp1);//从int转换到byte可能会有损失
     }
 }

强制类型转换

 class VariableTest3{
     static public void main(String[] args){
         //1.double 强转 int
         double double1 = 12.9;
         int result1 = (int)double1;
         System.out.println(result1);//12,存在截断误差0.9
         
         //2.int 强转 byte
         int int1 = 128;
         byte result2 = (byte)int1;
         System.out.println(result2);//-128,补码问题
     }
 }

引用数据类型

类(class)

接口 (interface)

数组(array)


String类型及其运算:

 /*
 1.String属于引用数据类型
 2.用双引号""声明
 3.String可以和8种基本数据类型做运算,只能用+ 
 4.运算的结果还是String
 */
 ​
 class StringTest{
     static public void main(String[] args){
         //1.定义String,并输出
         String s1 = "wkmyyy";
         System.out.println(s1);//wkmyyy
         
         //2.String与int用+进行连接
         int num = 1011;
         String s2 = "number:";
         System.out.println(s2 + num);//number:1011
         
         
     }
 }

运算符

算数:

  • +、-、*、/、%

    关于%结果的符号:

     class ArithmeticTest{
         static public void main(String[] args){
             int dividend1 = 12;
             int divisor1 = 5;
             System.out.println(dividend1 % divisor1);//2
             
             int dividend2 = -12;
             int divisor2 = 5;
             System.out.println(dividend2 % divisor2);//-2
             
             int dividend3 = 12;
             int divisor3 = -5;
             System.out.println(dividend3 % divisor3);//2
             
             int dividend4 = -12;
             int divisor4 = -5;
             System.out.println(dividend4 % divisor4);//-2
             
             //因此,取模运算结果的符号与被除数符号一致
         }
     }
    
  • (前/后)++、(前/后)--;

  • +:用于字符串连接


赋值:

=、+=、-=、*=、/=

比较(结果为true/false):

==、!=、<、>、>=、<=、instanceof


逻辑:

逻辑与 &(短路与&&)、逻辑或 |(短路或 ||)、!、^(逻辑异或)

&和&&、|和||的区别:

 class LogicTest{
     static public void main(String[] args){
         //逻辑与
         boolean b1 = false;
         int n1 = 10;
         if(b1 & (n1++ > 0)){
             System.out.println("b1 & n1++ is true");
         }else{
             System.out.println("b1 & n1++ is false");
         }
         
         System.out.println(n1);//11
         
         //短路与
         boolean b2 = false;
         int n2 = 10;
         if(b2 && (n2++ > 0)){
             System.out.println("b2 & n2++ is true");
         }else{
             System.out.println("b2 & n2++ is false");
         }
         
         System.out.println(n2);//10
         
         /*结论:逻辑与中即使b1为假,仍然判断n1++ > 0的语句
                 短语与的逻辑和c语言的&&一样,发现左侧为假直接不判断右侧条件
         */
         
         
         //短路或
         boolean b3 = true;
         int n3 = 10;
         if(b3 || (n3++ > 0)){
             System.out.println("b3 & n3++ is true");
         }else{
             System.out.println("b3 & n3++ is false");
         }
         System.out.println(n3); // 10
         
         //逻辑或
         boolean b4 = true;
         int n4 = 10;
         if(b4 | (n4++ > 0)){
             System.out.println("b4 & n4++ is true");
         }else{
             System.out.println("b4 & n4++ is false");  
         }
         System.out.println(n4);// 11
         // 类比&和&&的结论
     
         
         
     }
 }

位运算符:

运算符运算
<<算数左移
>>算数右移
>>>逻辑右移
&按位与
|按位或
^按位异或
~按位取反

三元:

(条件表达式)? 表达式1:表达式2

 int a = 10, b = -5, c = 24;
 int max = (((a > b)? a : b) > c) ? ((a > b)? a : b) : c;
 System.out.println(max); // 24
 //简洁但可读性差

注意三元运算符的表达式1和表示式2的数据类型必须一致,如:

    Object a = true ? new Integer(1):new Double(2.3);
    System.out.println(a);//1.0
    //因为要保证类型一致,所以只能对表达式1Integer提升为Double