Java(基础语法汇总)


文章目录

  • 零、Java基础概念
    • Java命名规范
    • 关键字
    • 标识符
    • 注释
    • 常量
    • 变量
  • 一、强类型语言
  • 二、数据类型分类
    • 1、基本数据类型
      • 整数类型
        • 四种类型所占内存空间:
        • 注意事项:
        • 整数的表示方式:
      • 字符类型
        • 字符型表现形式:
      • 浮点类型
        • 两种类型所占内存空间:
        • 注意事项:
        • 关键的无穷:
      • 布尔类型
    • 2、引用数据类型
  • 三、基本类型转换
    • 自动类型转换
    • 强制类型转换
  • 四、表达式类型的自动提升
  • 五、运算符
    • 算术运算符
    • 赋值运算符
      • 扩展赋值运算符
    • 比较运算符
    • 逻辑运算符
    • 位运算符
    • 三目运算符
    • 运算符优先级和结合性

Java基础语法部分与c++及c语言大同小异,本篇列举我容易搞混的点。
零、Java基础概念 Java命名规范
规范这种东西,当然是能遵守就遵守,你不遵守,虽然不会怎么样,但是容易被喷。毕竟代码都是给别人看的,可读性很重要。
  • Java对大小写很敏感,hello和Hello不同。
  • 英文一定要对应意思!!!不然别人真的看了会笑。拼音也就自己看的懂,随便取个a过一段时间自己都看不懂啦。
  • 源文件名必须和类名相同,即类名.java。不这样搞就错了!
  • 类名采用大驼峰命名法,即每个单词首字母大写。
  • 变量名,方法名采用小驼峰命名法,即第一个单词首字母小写,其他单词首字母大写。
  • 常量名全部大写且用_隔开。
  • 包名全部小写且用.隔开。
关键字
  • gotoconst是Java的保留字,以备扩充,也就是说,暂时不能用,以后说不定关键字不够用了,他们就上了。
  • 不能用于常量、变量和任何标识符的名称。
  • 具体的关键字有哪些,以后应该会遇到,现在写起来也没啥用,还没学到呢。
标识符
标识符就是用来命名的。
  • 关键字不能当做标识符!
  • 对大小写敏感。
  • 开头以A-Z或者a-z,美元符号$或者下划线_开始。
  • 数字不能作为开头,但可以放在中间。123hello是错 的!
注释
  • 单行://这是单行注释/*这也是单行注释*/
  • 多行注释:
    /*大家好! *这是多行注释哦! */

    接下来几种注释,在之后的面向对象学习中将会遇到,但在书上看到了,先列在这边。
  • 类注释:
    /** * Copyright ? 2019 sumerday Powered by .NET Core 3.0.0 on Linux * FileName: HelloWorld.java * 类的详细说明 * * @author 类创建者姓名 * @Date创建日期 * @version 1.00 */

  • 方法注释:
    /** * 类方法的详细使用说明 * * @param 参数 参数的使用说明 * @return 返回结果的说明 * @throws 异常类型.错误代码 注明从此类方法中抛出异常的说明 */

  • 属性注释:
    /** 提示信息 */ private String myName = null;

  • 方法内部注释:
    //背景颜色 Color backGroundColor = Color.Blue

  • 构造方法注释:
    /** * 构造方法的详细使用说明 * * @param 参数 参数的使用说明 * @throws 异常类型.错误代码 注明从此类方法中抛出异常的说明 */

常量
  • 常量就是执行程序的时候,值不发生改变的量。
  • Java中用final关键字来修饰常量,而且只能被赋值一次。例如:final int NUM = 5;
  • Java中空常量null无法输出。
变量
变量相当于一个有名称的容器,用于装不同类型的数据。
Java和c系列语言不同的是,Java对声明和定义不区分。
  • 变量的定义:变量类型 变量名称; 或者变量类型 变量名称 = 初始值;
  • 变量可以分为局部变量和成员变量,成员变量又分为实例变量和类变量,之后会进行总结。
  • 变量还可以加修饰符,之后也会提到。
  • 声明一个变量之后,一定得用赋值语句对其进行显示初始化,不能使用未初始化的变量。
    //以下会报错 double num; System.out.println(num);

一、强类型语言
Java就是一种强类型的语言,包含着以下含义:
  • 所有的变量必须在声明之后才能使用,不能用的不明不白或者用得很随意。
  • 指定类型的变量只能结束类型与之匹配的值,很好理解,种瓜得瓜,种豆得豆,这才正常。
二、数据类型分类
Java数据类型分为基本数据类型和引用数据类型两大类。
1、基本数据类型
字符类型其实归于整数类型,是无符号整数类型。但鉴于他和其他兄弟姐妹有点不一样,所以把他单独拎出来,基本数据类型变分成了四类。
整数类型
1字节 = 8位
四种类型所占内存空间:
  • byte:在内存中占1个字节,也就是8位,表数范围:-2^7 ~2^7-1
  • short:在内存中占2个字节,也就是16位,表数范围:-2^{15} ~2^{15}-1
  • int: 在内存中占4个字节,也就是32位,表数范围:-2^{31} ~2^{31}-1
  • long: 在内存中占8个字节,也就是64位,表数范围:-2{63}~2{63}-1
注意事项:
  • 如果将一个比较小的整数(当然比byte和short要小)赋给byte和short变量,系统会自动把他们当作这两种类型处理。
  • 如果把上面那个小的整数赋给long变量,系统首先会把数值当作int处理,int类型之后自动转换成long类型。
  • 如果使用一个较大的整数值(反正比int大),系统则不会自动把他当作long处理,如果想的话,就在后面加上L或者l吧,推荐L。
整数的表示方式:
  • 二进制:以0b或者0B开头。
  • 八进制:以0开头。
  • 十进制:懂得都懂。
  • 十六进制:以0x或者0X开头。
    所有的数字在计算机底层都是以二进制的形式存在的,且以补码的形式保存所有的整数。
    • 正数的补码和原码完全相同。
    • 负数最高位符号位不变,其他去反,整体加1,就是补码。
  • 整数值默认是int类型,占32位,且最高位为符号位。最后加上L之后,转换成long类型,占64位。
  • 由于最高位符号位的存在,当强制转换时,可能会导致数据产生偏差。
字符类型
字符型的值要用单引号' ',一定是单引号!!!Java使用16位的Unicode字符集作为编码方式,所以支持任何语言。
定义方式 char varName;
字符型表现形式:
  • 直接通过单个字符表示。如A,0等。
  • 通过转义字符表示,如\t,\r,\n等。如果想输出特殊的字符,则需要加上\再次转义,例如"d:\\numert".
  • 通过Unicode值表示,如\uXXXX,XXXX代表一个16进制整数。
浮点类型
两种类型所占内存空间:
  • float:单精度浮点数,占4个字节,32位,第一位符号位,后8位为指数,后23位为尾数。
  • double:双精度浮点数,占8个字节,64位,第一位符号位,后11位指数,后52位尾数。
注意事项:
  • 默认类型为double类型,想用float类型处理,需要在后面i爱上f或者F。
  • 浮点数需要加上小数点,不然当成int处理就懵逼了。
  • 只有浮点数类型的数值才能用科学记数法:3.14e2表示3.14*10^2
关键的无穷:
Java为浮点数运算提供了三个特殊的浮点数值:正无穷大,负无穷大和非数。
  • 正无穷大:正数除以0得到->POSITIVE_INFINITY.
  • 负无穷大:负数除以0得到->NEGATIVE_INFINITY.
  • 非数:0.0处以0.0或者对负数开方得到->NaN
  • 注意:如果整数值除以0,会报错。
如果数值中位数过多,不论整数还是浮点数都可以通过下划线分割:0b0000_0000_0010_1111
布尔类型
  • 只有boolean类型,表示逻辑“真”或“假”。
  • Java中不能用0或者非0表示true或者false。
  • 其他的基本数据类型也不能转换成boolean类型。
  • boolean类型值和字符串进行连接时,会自动转换为字符串类型。
2、引用数据类型
包括类、接口和数组类型,以及特殊的null类型。
  • 之后将会提到。
三、基本类型转换 自动类型转换
  • 自动也就是系统支持的,将表数范围小的数值直接赋给表数较大的变量,就可以实现自动类型转换。
  • 其实很好理解,类似于数学里的集合,A比B大,C可以存在B里面,当然就可以存在A里面,而且空间还变大了呢,舒服。
  • 任何基本类型的值和字符串进行连接运算时,都会自动转换成字符串类型,虽然字符串为引用类型。
  • 下图为自动类型转换图:
Java(基础语法汇总)
文章图片

强制类型转换
  • 相反,自动类型转换图按反方向转换的话,就需要强制转换,格式:(目标类型)值
  • 显然,和自动类型相比,强制类型转换是有风险的,可能会溢出,造成信息丢失。
四、表达式类型的自动提升
当一个算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型会发生自动提升。
  • byte、short和char类型将自动提升为int类型。
  • 提升到最高等级操作数同样的类型。具体查看转换图,右边比左边高。
  • 易发生错误:
    //定义一个short型变量 short value = https://www.it610.com/article/4; //右边数值2为int型,所以右边自动转换为int类型,而左边是short,不匹配,错误! value = value -2;

    int val = 3; //右边两个操作数都是int型,尽管不能除尽,但仍然得到int型数,输出int值7 int value = https://www.it610.com/article/23/val;

    System.out.println("hello"+'a'+10); //输出字符串helloa10 System.out.println('a'+10+"hello"); //‘a'自动提升至int类型,得出107,之后与字符串拼接,自动转换为字符串类型,输出字符串107hello

五、运算符
Java中运算符可以分为算术、赋值、比较、逻辑、位和类型相关运算符等多种,本篇一一做出总结。
算术运算符
算术?无非就是加减乘除嘛,除此之外还有呢。
  • +:除了可做基本数据类型的加法,还可以作为字符串的拼接符。
  • /:除法也相对特殊,用作整数计算,且除数不能是0,结果也为整,就算取不到整数也得强行截断。如果至少有一个浮点数,那么就是自然除法,而且还会有无穷和非数的情况出现。
  • %:求余运算,涉及到除法运算需要注意除法运算相关事项。
  • ++:自加,只能操作一个操作数或者单个数值类型的变量(变量!!!)。
    ++mm++的区别:
    1. ++m是先把m加上1,然后再把结果放入表达式中进行计算。
    2. m++实先把m的值放到表达式中计算,然后给m值加1。
      int a =5; int b = a++; //b=5,之后a++,变为6 int c = ++a; //c=6+1=7 System.out.println(a+","+b+","+c);

  • --:同理++
Java中可以借助java.lang.Math类中的方法完成相对麻烦的数学运算,如乘方、开方等运算。
import static java.lang.Math.*;

赋值运算符
为变量指定变量值。就是把什么东西装到容器里面。
  • Java与其他语言类似,也是用=进行赋值操作。
    double pi = 3.14;

  • 赋值也可以将一个变量的值赋给另外一个变量。
    int a = 5; int b = a;

  • 可以一次为多个变量赋值,但可读性较差。
    扩展赋值运算符
    隐含强制转换类型,更具健壮性。
    tips:a+=5;与a=a+5;有些时候代表的并不相同。
    byte a = 4; a = a + 5; //报错,因为左边为byte,右边自动上升为int。 byte b = 4; b += 5; //正常,因为把b设置为(byte)(b+5)

比较运算符
就是比大小嘛,出来是个布尔值。
  • ==:
    • 如果比较的是两个数值类型的数,只要值相等,就返回true,哪怕类型不相同。5.0==5;
    • 如果都是引用类型的话,必须指向同一对象才会返回true。
    • boolean类型也可以比较。true == false; ,返回false。
逻辑运算符
用来操作两个布尔型的变量或者常量。
  • &&&:都表示着与逻辑,全真为真,有零出零。前者&&代表“短路与”,即如果判断的第一个操作数或者表达式为false,就不再对后面的操作数求值,而是直接返回false。
  • |||:都表示着或逻辑,有真出真,全零出零。前者代表“短路或”,同理于“短路与”。第一个为true,直接true,根本不管后面的相当于短路掉了。
位运算符
处理整型类型时,直接对组成整型数值的各个位完成操作。
  • &是按位与,|是按位或,~是按位非。
  • ^是按位异或,两位相同为0,不同为1。
  • <<是左移,>>是右移。
  • >>>是无符号右移,没有<<<这个符号。
    • >>>会用0填充高位,前者则是用符号位填充。
    • 对于比int类型小的操作数,总是先转换为int再移位。
    • 对于int类型a>>b,如果b>32,则移位的位数为b%32,long类型同理。
    • 移位时,如果二进制码没有发生有效数字丢失的情况,左移n位等价于乘上2的n次方,右移则是除以2的n次方
三目运算符
直接上例子!
String a; a = 2>1 ? "2比1大":"2比1小"; System.out.println(a);

  • 表达式 ? 成功语句 :失败语句;是基本定义式子。
  • 表达式为true,执行成功语句,false则执行失败语句。
  • 三目运算符不支持多个语句,但可以嵌套使用。
运算符优先级和结合性
运算符优先级自上而下逐级递减。
运算符说明 Java运算符 结合顺序(<–表示从右到左)
分隔符 . [] () {} , ; –>
单目运算符 ++ – ~ ! <–
强制类型转换运算符 (type) –>
乘,除,求余 * / % –>
加法,减法 + - –>
移位运算符 << >> >>> –>
关系运算符 < <= >= > instanceof –>
等价运算符 == != –>
按位与 & –>
按位异或 ^ –>
按位或 | –>
条件与 && –>
条件或 || –>
三目运算符 ?: <–
赋值 = += -=等 <–
【Java(基础语法汇总)】参考书籍:《疯狂Java讲义》

    推荐阅读