【Java SE基础 二】Java基本语法(上)

简介: 【Java SE基础 二】Java基本语法

我们需要了解一些基础的Java 语法来进行java的学习,这里我做了一些小小的总结,具体涉及以下内容:标识符和关键字,数据类型(基本数据类型、基本数据类型的转换、引用数据类型),常量和变量,运算符,语句,方法。这部分是Java后续的基石,可以这么理解:标识符和关键字用来给接下来的各种内容起名字,数据类型用于给变量和常量设置类型,变量需要进行运算有各种运算符,这些运算可以归结为语句,循环或者判断,而语句放在方法里执行,这样我们一个整体语法基石就构建完成了。

是通过看视频,看书了解的,现在拿出来与大家分享,这部分的学习大概从2015年10月开始。首发于CSDN,于2021年1月21日二次更新和补充。

标识符和关键字

标识符和关键字就是我们在Java代码中填写的一些命名,只不过标识符是我们自己能定义的,关键字则有其特殊含义。

标识符

标识符就是一切可以起名字的地方:包名、类名、接口名、方法名,常量名、变量名等,标识符有以下的命名规则

  1. 标识符由字母、数字、_(下划线)、$符 组成
  2. 不能以数字开头
  3. 不允许单独使用下划线作为分隔符(Java9)
  4. 不能用Java中的保留字(关键字)
  5. 对大小写敏感,长度没有限制

标识符采用有意义的简单命名,一般我们用一个英文单词去命名,并且遵循如下命名规范(驼峰命名法):

  • 包名:包名一般采用全小写的格式
  • 类名和接口名:每个单词的首字母大写,其余为小写。(大驼峰即帕斯卡命名法)
  • 方法名和变量名:第二个单词起的首字母为大写,其余全为小写。(小驼峰)
  • 常量名:基本数据类型的常量名使用全部大写字母,字与字之间用下划线分隔。

以上就是一些简单的标识符命名规范。

关键字

什么是关键字呢?关键字就是在java语言中赋予特殊含义的单词,它有两个特点:1.组成的关键字的单词全是小写,2.常见的代码编辑器中,对关键字都有特殊的颜色标记,共计48个关键字:

  • 用于包的关键字[2]import(导入这个类所存在的包);package(定义包的关键字,将有关类放在一个包中)
  • 定义类、接口、抽象类[3]class(声明一个类);interface(声明一个接口);abstract(表明类或者成员方法具有抽象属性)
  • 用于建立类与类之间关系[2]implements(implements 表明一个类实现了给定的接口类);extends (表明一个类型是另一个类型的子类型,常见的类型有类和接口)
  • 用于定义访问权限修饰符[4],Java分别定义了四种访问级别:private、protected(当前包不一定为子类以及跨包子类均可)、default(默认访问限制)、public
  • 用于定义建立实例及引用实例、判断实例[4]new(用来创建新的实例对象),this(指向当前实例对象的引用),super(表明当前对象的父类型的引用或者父类型的构造方法),instanceof(用来测试一个对象是否是指定类型的实例对象)
  • 用于定义类、函数、变量修饰符【4】final(终结器,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量); static(表示具有静态属性);synchronized(线程同步,修饰一段代码表示多个线程都能同步执行) ,volatile (原子操作,表明两个或者多个变量必须同步地发生变化),native(本地用来声明一个方法是由计算机相关语言实现的(如C/C++语言等))
  • 用于异常处理【5】try(尝试一个可能抛出异常的程序块);catch(用在异常处理中,用来捕捉异常);finally(用于异常处理情况,用来声明一个基本肯定会被执行到的语句块(有没有异常都执行));throw(通常用在方法体中,并且抛出一个异常对象,程序在执行到throw语句时立即停止,它后面的语句都不执行);throws(如果一个方法可以引发异常,本身不对异常进行处理,将异常抛给调用者使程序可以继续执行下去)
  • 程序控制语句【11】break(跳出循环); continue (继续);return (返回);do (运行);while(循环);if (如果);else(反之);for (循环);switch (开关);case (返回开关里的结果); default (返回默认结果)
  • 数据类型关键字【11】boolean(布尔型);byte( 字节型);char (字符型);double (双精度);float( 浮点);int (整型);long (长整型);short (短整型);string(字符串);enum(枚举类型);strictfp(strict float point 精确浮点)。
  • 用于特殊用途【2】assert (断言,用来进行程序调试); transient(表示一个成员变量不是该对象序列化的一部分)

除了48个关键字之外,还有2个保留关键字

  • 保留关键字【2】:goto(跳转到)、const(常量)。(现在没用以后可能用到作为关键字)

剩下的都是保留字,Java保留字是指现有Java版本尚未使用,但以后版本可能会作为关键字使用:

  • 特殊直接量【3】true(正确);false(错误);null(空值)
  • 其它保留字【9】: byValue, cast,future, generic, inner,operator, outer, rest, var

也就是说,Java中48个关键字、2个保留关键字以及12个保留字,都不能作为标识符来使用,这点需要注意,其中除了9个其它关键字,以上关键字与保留关键字以及特殊直接量会编译错误,而9个其它关键字不会,但仍然不建议使用,防止以后作为关键字使用导致的历史代码无法正确运行。

java的关键字与保留字

还有要注意true,false,null,不是java的关键字,但是你不能把它们作为java标识符用。

标识符和关键字了解后可以看一个简单示例:

Java数据类型

在上文保留字中我们提到了Java涉及的一些数据类型,这些类型在常量和变量中的定义中也会用到,我们先来梳理下:

Java 语言是一种强类型语言。通俗点说,在 Java 中存储的数据都是有类型的,而且必须在编译时就确定其类型。 Java 中有两类数据类型:

  • 基本数据类型变量:存的是数据本身,基本数据类型变量里存储的是直接放在抽屉里的东西
  • 引用类型变量:存的是保存数据的空间地址,引用数据类型变量里存储的是这个抽屉的钥匙,钥匙和抽屉一一对应

需要注意的是String 是一种常见的引用数据类型,用来表示字符串。

基本数据类型

我们知道基本数据类型有8种,name接下来对基本数据类型涉及内容及转换过程做详细介绍。

基本数据类型特性

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。Java中所有的数据类型在所有的操作系统上占的位数都一样,所以可以跨平台。 各个基本类型如下所示:

  • byte【1字节】:byte 数据类型是8位、有符号的,以二进制补码表示的整数;最小值是 -128(-2^7);最大值是 127(2^7-1);默认值是 0;byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;例子:byte a = 100,byte b = -50。
  • short【2字节】:short 数据类型是 16 位、有符号的以二进制补码表示的整数最小值是 -32768(-2^15);最大值是 32767(2^15 - 1);Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;默认值是 0;例子:short s = 1000,short r = -20000。
  • int【4字节】:int 数据类型是32位、有符号的以二进制补码表示的整数;最小值是 -2,147,483,648(-2^31);最大值是 2,147,483,647(2^31 - 1);一般地整型变量默认为 int 类型;默认值是 0 ;例子:int a = 100000, int b = -200000。
  • long【8字节】:long 数据类型是 64 位、有符号的以二进制补码表示的整数;最小值是 -9,223,372,036,854,775,808(-2^63);最大值是 9,223,372,036,854,775,807(2^63 -1);这种类型主要使用在需要比较大整数的系统上;默认值是 0L;例子: long a = 100000L,Long b = -200000L。"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
  • float【4字节】:float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;float 在储存大型浮点数组的时候可节省内存空间;默认值是 0.0f;浮点数不能用来表示精确的值,如货币;例子:float f1 = 234.5f。
  • double【8字节】:double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;浮点数的默认类型为double类型;double类型同样不能表示精确的值,如货币;默认值是 0.0d;例子:double d1 = 123.4。
  • boolean【1字节】:boolean数据类型表示一位的信息;只有两个取值:true 和 false;这种类型只作为一种标志来记录 true/false 情况;默认值是 false;例子:boolean one = true。
  • char【2字节】:char类型是一个单一的 16 位 Unicode 字符;最小值是 \u0000(即为 0);最大值是 \uffff(即为65、535);char 数据类型可以储存任何字符;例子:char letter = ‘A’;。

了解了8大基本数据类型和注意事项后我们再看看它们是怎么相互转换的。

基本数据类型转换

基本数据类型之间满足以下条件可以实现互相转换:

  1. 布尔类型和其他类型不可以互相转换
  2. byte,short,char不能互相转换,在做运算之前会自动转换为int类型。
  3. 容量小的类型可以自动转换为容量大的数据类型【byte,short,char—》int—》long—》float—》double】
  • 特殊情况: Java语言整型默认为int型,声明long型常量时候需要后边加’L’或者‘l’,long l=1232323L,当赋值给long变量没有加‘ l ’或‘ L ’ ,仍旧默认成int类型。如果赋值的时候没有超出int表述范围没关系,即使超出了int的表述范围,也不用担心,不会报错但会导致数值计算错误
  1. 容量大的转换为容量小的需要强制转化,可能会丢失精度,特殊情况:
  1. 赋值的时候只要int类型的数没有超出(byte,short,char)的表述范围,可以直接byte a=23,
  2. Java语言默认浮点型常量为double型,如果要声明一个常量float型,则需要在后边加f或者F, 直接转不过去,直接转会导致溢出现象float l=1232323.45F
  1. 多种混合计算时,自动将所有数据类型转换为容量最大的一种数据类型。

以下为一些转换的代码示例:

public static void main(String[] args) {
       boolean b=true;
       System.out.println(b);
       byte b1=67;    //byte类型直接后边赋值即可,int类型可以自动赋值到byte上,只要不超过127,但是float f=0.1就不行,必须加f,虽然没超出范围。总结起来就是整型之间虽然不是int但是只要没超过int范围就没必要加强制转换或者是末尾加l,但是浮点型的不行,一定得加强制转换或者是末尾加f。
       byte b2=99;
       byte b3= (byte)(b1+b2);   //在计算之前(byte,short,char会自动转换为int,所以需要强制转换为byte)
       System.out.println(b3);    //如果直接超过127 ,不会有溢出错误,直接砍掉多余位数
       char c1='t';
       int b4=b3+c1;
       System.out.println(b4);    //char,byte,short不可以互相转,但是可以进行混合运算
       int i1=123;
       int i2=456;
       double d1=(i1+i2)*1.2; //系统将会自动把int型的转为double型的计算,因为浮点型的1.2是默认double型的,混合运算中又要取最大范围
       System.out.println(d1); 
       float f1=(float)d1;   //因为d1是double型的,所以要强制转换为float型的。
       System.out.println(f1); 
       double d2=1e200;
       float f2=(float)d2;
       System.out.println(f2); //因为d2超出了float能承受的范围,所以会溢出
       float f3=12.344343f;    //后边必须加f
       long l1=1234l;
       long l2=3455l;
       float f4=f3+l1+l2;
       System.out.println(f4);  //混合运算自动都变为float型的
       long l3=(long)f4;
       System.out.println(l3);    //强行把浮点数类型的转化为整型的会导致没有小数位,不是四舍五入,而是彻底没有小数部分。
  }

转换过程预期和纠错:

public static void main(String[] args) {
      int i=1,j=12;      //对i,j赋初始值
      float f1=(float)0.1;  //0.1f与这里的写法是有区别的,0.1f表示内存分配就分配了4个字节,而这种写法意思是8字节的double类型然后强制转换
      float f2=123;   //123默认是int类型的,可以自动转为float
      long l1 = 12345678,l2=8888888888L;   //l1这里没有超出int的范围,所以不用加l,而l2显然超过啦,所以必须加l
      double d1 = 2e20,d2=124;    //int类型自动转为double
      byte b1 = 1,b2 = 2,b3 = 127;  //只要没超过int的表述范围,赋值不需要加强制转化
      j = j+10;
      i = i/10; 
      i=(int)(i*0.1);   //这里虽然与上边相同的计算结果,过程不一样,首先计算后为double,必须加强制转化
      System.out.println(i);  //i是int型,10是int型,所以计算结果为0,也必须是int型
      i = (int)(i*0.1);  //i是int型的,乘0.1后变为double型,必须强制转化为int型
      char c1='a',c2=125;
      byte b = (byte)(b1-b2);
      char c = (char)(c1+c2-1);    //混合运算,统统转为int,运算结束后再转为char型的
      float f3 = f1+f2;
      float f4 = (float)(f1+f2*0.1);
      double d = d1*i+j;
      float f = (float)(d1*5+d2);
    }


相关文章
|
7月前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
198 1
|
7月前
|
存储 SQL NoSQL
Redis-常用语法以及java互联实践案例
本文详细介绍了Redis的数据结构、常用命令及其Java客户端的使用,涵盖String、Hash、List、Set、SortedSet等数据类型及操作,同时提供了Jedis和Spring Boot Data Redis的实战示例,帮助开发者快速掌握Redis在实际项目中的应用。
544 1
Redis-常用语法以及java互联实践案例
|
7月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1225 1
|
8月前
|
算法 Java 测试技术
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
506 0
|
8月前
|
存储 Java 容器
Java基本语法详解
本文深入讲解了Java编程的基础语法,涵盖数据类型、运算符、控制结构及数组等核心内容,帮助初学者构建坚实的编程基础。
|
9月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
397 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
9月前
|
存储 安全 Java
从基础语法到实战应用的 Java 入门必备知识全解析
本文介绍了Java入门必备知识,涵盖开发环境搭建、基础语法、面向对象编程、集合框架、异常处理、多线程和IO流等内容,结合实例帮助新手快速掌握Java核心概念与应用技巧。
218 0
|
10月前
|
设计模式 算法 Java
Java SE 与 Java EE 组件封装使用方法及实践指南
本指南详细介绍了Java SE与Java EE的核心技术使用方法及组件封装策略。涵盖集合框架、文件操作、Servlet、JPA、EJB和RESTful API的使用示例,提供通用工具类与基础组件封装建议,如集合工具类、文件工具类、基础Servlet、实体基类和服务基类等。同时,通过分层架构集成示例展示Servlet、EJB和JPA的协同工作,并总结组件封装的最佳实践,包括单一职责原则、接口抽象、依赖注入、事务管理和异常处理等。适合希望提升代码可维护性和扩展性的开发者参考。
337 0
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
|
运维 Cloud Native Java
postman发起post请求遇到报错:java.io.FileNotFoundException (文件名、目录名或卷标语法不正确。)
遇到bug报错,多猜可能的原因,控制变量反复测试,直至找到问题的关键,然后再思考如何解决或者回避。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来