2.JAVA语法基础

Java语法基础

java基本代码规范,以及类的定义,基本的关键字和属性的用法,基本数据格式以及数据转换,运算符的操作

一、类的基本结构

类是组成Java程序的最小结构单元。

基本语法:

public class SyntaxBasic{
    
}

一个类的组成

有两个部分构成:类头和类体。

花括号前的部分称为类头。用来修饰一个类的特征。

  1. public称为访问修饰符

  2. class称为类关键字

  3. SyntaxBasic是类的名称,名称的命名要求要见名知意。

花括号内的部分称为类体,也就是类的主体部分。

 

二、 main方法的结构

main方法也成主方法,作为代码执行的入口,只要main方法体内存在有效代码,运行时便会输出结果。

基本语法:

public static void main(String[] args){
    
}

main方法的主要存在的一些特性

  1. public称为访问修饰符

  2. static表示静态方法

  3. void表示无参数返回值

  4. 圆括号内表示是方法能够获取到的参数也称资源。String[]表示参数类型为字串符数组类型,args为参数变量的名称

  5. 花括号称为方法体,包含代码的部分

 

三、注释、标识符、关键字、变量和常量

 

1.注释

便于给代码注释其含义的辅助文本,供编写者查看。

注释分为单行注释、多行注释和注释文档

 

注释的用法及规范

  1. 单行注释,一种是写在单行代码的后面,若内容过多,可以写在代码的上面。另一种是写在一行代码的前面,使这段代码编译被忽略但也不会消失

  2. 多行注释,对于代码中较为复杂的操作的解释,例如用在if,for循环的注释

  3. 注释文档,用于生成程序的相关信息。在实际工作中一般写在类头和方法头的上面,注解文档中可以用*号开头也可以不用

     

    规范演示

    /**
     * @author Wavesboker //作者名
     * @version //版本号
     * @since //开发用的Java版本
     * @param //参数名
     * @return //返回值
     * @throws //异常抛出情况
    */
    public class Test{
        /**
         这是文档注释
         支持多行
        */
        public static void main(String[] args){
            int num = 10;//这是单行注释
            //包含在注释中的代码编译时被忽略int score = 15;
            System.out.println("显示的值" + num);
        }
    }

     

 


 

2.标识符

给一个类、一个方法或者是变量定义的名称称为标识符。这些名称都是由程序员自定义的。

标识符的命名规则

  1. A~Z和a~z的英文字母表示(推荐使用规则)

  2. 0~9的数字(不能用来作为开头)

  3. _下划线(一般用在常量名两个单词之间的连接)

  4. $美元符号(只用在给类中类定义变量名字的特殊情况)

  5. 不能以关键字做为标识符,例如:public,class,void等

 

标识符的应用范围

  1. 类名:由英文字母命名,首字母大写。多个单词组成,单词首字母都要大写(帕斯卡命名)

  2. 方法名:由英文字母命名,首字母小写。多个单词组成,第二个单词首字母大写(驼峰命名)

  3. 变量名:由英文字母命名,方法名规则一样(驼峰命名)

  4. 常量名:英文字母全大写,多个单词之间用下划线_连接

 

实例:

定义类

public class Note{
    
}

定义变量

int number = 1;

定义方法

public void method(){
    
}

定义常量

final int MAX_VALUE = 100;

 


 

3.关键字-----

在某种语言当中表示特殊语义的特殊符号。由语言开发者定义,不能被程序员修改

关键字的种类以及作用

  1. 访问修饰符 Java中用来保护类、方法、变量和构造方法访问权限的修饰符

  • public 即公共的,访问权限最高,所有的类都可见。可以用在类、方法、变量和接口

  • default 默认的(可以不用写),在同一包当中可见。可以用在类、方法、变量和接口

  • protected

  • private

  1. 类修饰符

  • class 仅用来修饰类

 


 

4.变量

在Java中,变量用于对内存数据进行存储,获取。并且可以进行修改的标识符

变量的声明与定义

变量的声明,格式为数据类型+变量名。声明变量中没有数据

int number;

变量的赋值,格式为变量名+等号+变量值。前提先给变量声明之后,一般是将等号右边的值存放在左边的变量中

number = 10;

变量的声明并赋值,声明和赋值一起执行。一行代码完成变量声明和定义,给变量赋初始值

int age = 10;			

 

变量的作用域

作用:为了避免在复杂的系统中代码发生冲突,划分变量的使用范围。

public class Variable{
    //全局变量
    int quantity;
    int height;
    public static void main(String[] args){
        //局部变量
        int num = 10;
        int power = 100;
        System.out.println("数量为" + num);
    }
}

按照结构划分为全局变量和局部变量

  1. 全局变量:全局变量可以在整个类中使用

  2. 局部变量:只能在方法内使用,使用范围就是整个方法的花括号内

注意点:由于案例当中的main方法为静态方法,所以也无法使用全局变量

 


 

5.常量

常量的数据是固定不变的,初始值后不能被修改

常量的类型

分为普通常量(常数)和标志性常量

  1. 普通常量体现在变量值、字串符、字符和布尔常量

int a = 12;
char b = 'z';
String name = "张三";
boolean result = true;
  1. 标志性常量是由final关键字修饰的变量

final double PI = 3.1415926;

注意:被final修饰的变量必须要赋予初始值,而且不能进行二次修改

 


 

四、数据类型

变量是来申请内存存储数值的。

内存管理系统通过变量的类型来匹配相同类型的储存空间,储存空间用来储存该类型数据。

Java中数据类型的分类

数据类型分为基本数据类型引用数据类型

基本数据类型分为整型浮点型字符型布尔型

 


 

1.整型的种类以及属性

  • byte 在JVM内存占1个字节,一个字节等于8位,数据有效范围-128~127

  • short 占16位,范围-32768~32767

  • int 最常用的整型存储类型 占32位 范围-2147483648~2147483647

  • long 占64位 范围-9223372036854775808~9223372036854775807

byte numA = 127;
short numB = 32767;
int numC = 2100000;
long numD = 920000

 


 

2.浮点型的种类以及属性

  • float 单精度类型 占32位 范围在1.4E-45~3.4028235E38

  • double 双精度 占64位 范围在4.9E-324~1.7976931348623157E308

float height = 12.5f;
double width = 5.567342;

注意点:float类型的常数需要加上f的后缀才能存放在float类型的内存中

 

浮点数据保留小数的处理

DecimalFormat 路径:Java.text.DecimalFormat

使用DecimalFormat类可以实现保留浮点数据小数点后几位数字的个数

DecimalFormat.format()方法可以将目标数据转换成字串符的格式

案例演示

import java.text.DecimalFormat;//从java中导入工具类
public class Test{
    public static void main(String[] args){
        DecimalFormat object = new DecimalFormat("0.000");//创建对象,特性是保留小数点后三位
        double num = 2.744866952;
        String numStr = object.format(num);//将浮点类型数据转换成字符串类型
        System.out.println(numStr);
    }
}

经过处理的浮点数据会采用四舍五入的方式保留

 

科学计数法的表示

在Java中若出现浮点数据过长,系统会自动将其转换为科学计数法的形式,仅用于浮点型的数据

转换规则:

double number = 4E2.8;

4E2等于4乘以10的二次方,转换结果为400.8

 


 

3.字符型的定义以及属性

字符数据类型用来储存单个字符的数据,用单引号包围。JVM对字符采用unicode无符号进行编码。

char 在JVM中占用16位 范围为0~65535 默认值为\u0000

char name = '张';

char类型兼容int类型,可以直接将字符型数据转换成整数

 

转义字符

特殊的单个字符,不能直接显示的字符要用转义字符表示

下列为常见转义字符表

微信图片_20210803220712

 


 

4.布尔型的定义以及属性

boolean型数据类型只有两种表示方式true和false,一般应用于逻辑判断。

boolean 按JVM标准占4个字节 默认值为false

boolean result = false;

 


 

五、数据类型转换

1.数据类型转换的种类

  1. 自然转换,低精度数据类型向高精度数据转换

数据类型精度从小到大排序

byte<<<short<<<int<<<long<<<float<<<double

案例

byte small = 15;
int bigger = byte;

低精度的数据可以任意的存放在高精度数据类型的内存中,只用于相兼容的数据类型,如char型不能和boolean型进行转换

 

  1. 强制转换,高精度类型数据存放在低精度类型内存中,会丢失数据精度

转换格式:

低精度数据类型变量 = (低精度数据类型关键字)高精度常量/变量;

案例

int num = (int)18.67;//double类型转int类型
double money = 1756.4457;
long bank = (long)double;

括号内的强制转换的数据类型要与低精度数据类型变量相兼容

 

扩展:源码、反码和补码

  1. 原码

原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。

例如:用8位二进制表示一个数,+9的原码为0000 1001,-9的原码就是1000 1001

  1. 反码

反码是数值存储的一种,多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。反码的表示方法是:正数的反码与其原码相同;负数的反码是对正数逐位取反,符号位保持为1。

例如:+11的反码为0000 1011,-11的反码为1111 0100

  1. 补码

正数:正数的补码和原码相同。负数:负数的补码则是符号位为“1”。并且,这个“1”既是符号位,也是数值位。数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。

例如:+7的补码为0000 0111,-7的补码为1111 1001

 

当数据类型从高转低发生溢出时,最终输出的结果会发生改变

案例

public class Test{
    public static void main(String[] args){
        int num = 130;
		byte result = (byte)num;//当int型转换byte型内存溢出后 结果会变成负数
		System.out.println("转换内存溢出结果:"+result);
    }
}

从案例中得出最终转换结果为-126,因为数据的溢出,导致结果变成了负数

 

原理解析:

由于计算机底层是以数字二进制的源码、反码和补码来进行表示

根据原理分析

由于int类型的130强制转换为byte类型,byte类型数值位是8位,130转换成二进制为1000 0010,最高位是“1”

所以是一个负数为000 0010。在通过补码表示负数,转换成反码为111 1101,再+1等于111 1110

111 1110转换成十进制结果就是-126

 


 

各进制的表示方式和换算

1.进制的前缀表示

  • 二进制:前缀为0b,范围:0和1

  • 八进制:前缀为0o或者0,范围:0-7

  • 十进制:没有前缀,所有表示的数字都是十进制,范围:0-9

  • 十六进制:前缀为0x,后缀为H,范围:0-9,A-F,a为10

 

2.各进制的运算机制

二进制转十进制

int t = 0b1111;
System.out.println(t);

运算过程:

t变量赋值的是一个二进制的数值

输出的值运算方法:

是从0开始右往左数2的0次方乘以第一位数加上2的1次方乘以第二位数加上2的2次方乘以第三位数……以此类推

每一位数运算的结果从右往左排再相加1+2+4+8=15

 

八进制转十进制

int i = 012;
System.out.println(i);

运算过程:i变量赋值的是一个八进制的数值

输出的值运算方法:

同样从右往左数8的0次方乘以2加上8的1次方乘以1加上8的2次方乘以0

每一位数运算的结果从右往左排再相加2+8+0=10

 

十六进制转十进制

int y = 0xc8;
System.out.println(y);

运算过程:y变量为十六进制

输出的值运算方法:

16的0次方乘以8加上16的1次方乘以12

结果为8+192=200

 

二进制转八进制

例:0b110101

由于2的3次方为8,可以将二进制代码从右往左每三个数字分成一组,每组按照4 2 1法则组合,110=6,101=5,组合起来是65

例:0b1011

若遇到不能每三个分成一组的,从右往左数,最后一个不能三个数分成一组的补0,001011,001=1,011=3,组合起来是13

 

二进制转十六进制类似于二进制转八进制,但是2的4次方为16,所以需要将二进制代码每四个组成一个数,每组按照8 4 2 1法则组合

 


 

六、运算符

运算符按照功能大致分为算数运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符和特殊运算符

1.算数运算符

通常使用1个或2个操作数进行数学运算来得出结果。按照操作数个数分为双目运算符和单目运算符。

双目运算符

+加 -减 *乘 /除 %取余

public class DataCount {

    //双目运算符
    public static void main(String[] args) {
        int a = 20;
        int b = 5;
        System.out.println("已知a等于20,b等于5");
        System.out.println("相加运算:" + (a + b));
        System.out.println("相减运算:" + (a - b));
        System.out.println("相乘运算:" + (a * b));
        System.out.println("相除运算:" + (a / b));
        System.out.println("取余运算:" + (a % b));
    }
}

 

单目运算符

++自增 --自减

public class DataCount {

    //单目运算符 自增和自减特性相同
    public static void main(String[] args) {
        int a = 1;
        int b = a++;
        System.out.println("++在后先赋值后自增 a =" + a + " b = " + b);
        b = ++a;
        System.out.println("++在前先自增后赋值 a =" + a + " b = " + b);
    }
}

 


 

2.赋值运算符

用来将一个数据赋值给一个变量

=赋值 +=加赋值 -=减赋值 *=乘赋值 /=除赋值 %=取余赋值

测试

=赋值

int num = 10;//将10赋值给变量num

+=加赋值

int a = 1;
a += 1;//分解公式为a=a+1

-=减赋值

int b = 2;
b -= 1;//b=b-1

*=乘赋值

int c = 2;
c *= 2;//c=c*2

/=除赋值

int d = 10;
d /= 5;//d=d/5

%=取余赋值

int e = 9;
e %= 2;//e=e%2

 

3.关系运算符

用来对2个操作数进行比较运算,并得出布尔数据类型的结果。

  • (a > b) 表示a是否大于b 如果大于为真

  • (a < b)表示a是否小于b 如果小于为真

  • (a <= b)表示a是否小于等于b 如果是为真

  • (a >= b)表示a是否大于等于b 如果是为真

  • (a == b)表示a是否等于b 如果等于为真

  • (a != b)表示a是否不等于b 如果不等于为真

案例演示

//关系运算符 返回值为true false

        int a = 30;
        int b = 50;

        System.out.println("输出结果为:" + (a > b));
        System.out.println("输出结果为:" + (a < b));
        System.out.println("输出结果为:" + (a == b));
        System.out.println("输出结果为:" + (a != b));


        int c = 5;
        int e = ++c;

        System.out.println("输出结果为:" + (e == c));

 

4.逻辑运算符

对操作数使用逻辑运算,只能返回true和false 所以只能用Boolean类型

  • && 与逻辑 两个操作数都为真 则为true 否则为false

  • || 或逻辑 两个操作数有一个为真 则会true 否则为false

  • ! 非逻辑 将最后表达的结果取反

短路逻辑运算现象:

使用与逻辑时 当第一个操作数结果为false,不用第二个操作数判断,则最终结果就为false

使用或逻辑时 当第一个操作数结果为true直接判断最终结果就为true

案例演示

//逻辑运算符  &与 |或 !非  应用于Boolean值 返回值为true false

        boolean a = true;
        boolean b = false;

        System.out.println("a && b ="+(a && b));
        System.out.println("a || b ="+(a || b));
        System.out.println("a && b="+!(a && b));
        System.out.println("!(a || b)="+!(a || b));

        /*短路逻辑运算
        当进行与逻辑运算时,若第一个值为false 不管后面的值是否为true 判定为false
        当进行或逻辑运算时,若第一个值为true 不管后面的值是否为false 判定为true
        */
        int c = 100;
        System.out.println("输出结果为:" + ((c > 100) && (c == 100)));
        System.out.println("输出结果为:" + ((c == 100) || (c < 100)));

 

5.位运算符

位运算符是针对二进制代码的运算,不能对浮点型操作。

案例演示

/*
        位运算符
        & | ^ ~ 位与 位或 位异或 位非 << >> 左移 右移
        例 有两个二进制数据
        A = 0010 0110
        B = 1010 0001
        ==========================================
        & = 0010 0000 两个都是1 才为1 否则为0
        | = 1010 0111 两个都是0 为0 否则为1
        ^ = 1000 0111 相同为0 否则为1
        ~ B = 0101 1110 取反
        << 左移多少位 就是乘以2的几次方
        >> 右移多少位 就是除以2的几次方
         */
        int a = 63; //a = 0011 1111
        System.out.println("a << 2 = "+ (a << 2));//a = 252

 

6.条件运算符

对三个操作数进行条件判断的运算 第一个操作数是条件,第二个操作数是结果为true所返回的值,第三个操作数是结果为false所返回的值,一般用于简单的两种比较结果,使用条件运算符会更加简洁并且提高阅读性。

案例演示

        /*	条件运算符 也称三目运算符
        	例 a ? b : c
        	当a的结果为true 执行b 结果为false 执行c
         */
        int a = 10;
        int b = 20;
        int c = 30;
        boolean g = (a > 10);//设置条件a > 10

        System.out.println("输出结果为:" + (g ? b : c));//结果为true输出b的值 结果为false输出c的值

 

7.特殊运算符

  • new 创建某个引用类型的对象

  • . 用于访问类或者是方法

  • () 所包围的内容为优先被运算的表达式或者是方法内的参数

  • [] 表示为数组的类型

  • instanceof 用于判断某个对象是否属于某个类,结果为布尔值

综合案例:

		//new运算符
        Scanner scan = new Scanner(System.in);//创建Scanner类型的对象

        System.out.println("请输入文本");

        //.访问对象的方法
        int num = scan.nextInt();//此括号内表示无参数

        //[]表示数组的类型
        int [] arr = {1,2,3};

        //intanceof判断并储存boolean值 格式:对象 instanceof 类
        boolean result =  scan instanceof Scanner;
        System.out.println("结果为" +result);

 


 

posted @ 2022-05-08 22:03  海涛布克  阅读(67)  评论(0编辑  收藏  举报