Java:基础语法汇总

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里面,而且空间还变大了呢,舒服。
  • 任何基本类型的值和字符串进行连接运算时,都会自动转换成字符串类型,虽然字符串为引用类型。
  • 下图为自动类型转换图:

强制类型转换

  • 相反,自动类型转换图按反方向转换的话,就需要强制转换,格式:(目标类型)值
  • 显然,和自动类型相比,强制类型转换是有风险的,可能会溢出,造成信息丢失。

四、表达式类型的自动提升

当一个算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型会发生自动提升。

  • byte、short和char类型将自动提升为int类型。

  • 提升到最高等级操作数同样的类型。具体查看转换图,右边比左边高。

  • 易发生错误:

    //定义一个short型变量
    short value = 4;
    //右边数值2为int型,所以右边自动转换为int类型,而左边是short,不匹配,错误!
    value = value -2;
    
    int val = 3;
    //右边两个操作数都是int型,尽管不能除尽,但仍然得到int型数,输出int值7
    int value = 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讲义》

发布了79 篇原创文章 · 获赞 62 · 访问量 3471

猜你喜欢

转载自blog.csdn.net/Sky_QiaoBa_Sum/article/details/104326182