JavaSE:基础语法

注释

Java中的注释有三种:

  • 单行注释:只能注释当前行,以//开始,直到行结束

//输出HelloWorld!

  • 多行注释:注释一段文字,以/ * 开始以 * / 结束!

/* 这是我们Java程序的主入口, main方法也是程序的主线程。 */

  • 文档注释:用于生产API文档,配合JavaDoc。

    /**再按回车键生成文档注释

平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己写的,但是当项目结构一旦复杂起

来,我们就需要用到一个注释了,注释就类似于我们上学时候写的笔记,我们看着笔记就知道自己写的

什么东西了!平时我们一定要养成编写注释的习惯。

标识符

Java语言中,对于变量,常量,函数,语句块也有名字,我们统统称之为Java标识符。标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。

关于 Java 标识符,有以下几点需要注意:

  • 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始

  • 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合

  • 不能使用关键字作为变量名或方法名。

  • 标识符是大小写敏感的

  • 合法标识符举例:age、$salary、_value、__1_value

  • 非法标识符举例:123abc、-salary、#abc

关键字

Java关键字是对Java编译器有特殊含义的字符串,是编译器和程序员的一个约定,程序员利用关键字来告诉编译器其声明的变量类型、类、方法特性等信息。Java语言共定义了如下所示的关键字。

abstract assert boolean break byte
case catch char class const
continue default do double else
enum extends final finally float
for goto if implements import
instanceof int interface long native
new package private protected public
return strictfp short static super
switch synchronized this throw throws
transient try void volatile while
关键字 含义
abstract 表明类或者成员方法具有抽象属性
assert 断言,用来进行程序调试
boolean 基本数据类型之一,声明布尔类型的关键字
break 提前跳出一个块
byte 基本数据类型之一,字节类型
case 用在switch语句之中,表示其中的一个分支
catch 用在异常处理中,用来捕捉异常
char 基本数据类型之一,字符类型
class 声明一个类
const 保留关键字,没有具体含义
continue 回到一个块的开始处
default 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现
do 用在do-while循环结构中
double 基本数据类型之一,双精度浮点数类型
else 用在条件语句中,表明当条件不成立时的分支
enum 枚举
extends 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
finally 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
float 基本数据类型之一,单精度浮点数类型
for 一种循环结构的引导词
goto 保留关键字,没有具体含义
if 条件语句的引导词
implements 表明一个类实现了给定的接口
import 表明要访问指定的类或包
instanceof 用来测试一个对象是否是指定类型的实例对象
int 基本数据类型之一,整数类型
interface 接口
long 基本数据类型之一,长整数类型
native 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
new 用来创建新实例对象
package
private 一种访问控制方式:私用模式
protected 一种访问控制方式:保护模式
public 一种访问控制方式:共用模式
return 从成员方法中返回数据
short 基本数据类型之一,短整数类型
static 表明具有静态属性
strictfp 用来声明FP_strict(单精度或双精度浮点数)表达式遵循[IEEE 754](https://baike.baidu.com/item/IEEE 754?fromModule=lemma_inlink)算术规范
super 表明当前对象的父类型的引用或者父类型的构造方法
switch 分支语句结构的引导词
synchronized 表明一段代码需要同步执行
this 指向当前实例对象的引用
throw 抛出一个异常
throws 声明在当前定义的成员方法中所有需要抛出的异常
transient 声明不用序列化的成员域
try 尝试一个可能抛出异常的程序块
void 声明当前成员方法没有返回值
volatile 表明两个或者多个变量必须同步地发生变化
while 用在循环结构中

数据类型

Java是一种强类型语言,每个变量都必须声明其类型。

强弱类型语言:

强类型语言:也称为强类型定义语言。要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。也就是说,一旦一个变量被指定了某个数据类型,如果不经过转换,那么它就永远是这个数据类型了。安全性高,运行效率相对较慢,鱼和熊掌不可兼得!Java、.NET、C++等都是强制类型定义的。

弱类型语言:也称为弱类型定义语言。与强类型定义相反。像vb,php等就属于弱类型语言· 在VBScript中,可以将字符串‘12’和整数3进行连接得到字符串‘123’,也可以把它看成整数123,而不需要显示转换。

Java的数据类型分为两大类:基本类型(primitive type)和引用类型 (reference type)

基本数据类型:

数值类型:

整数类型:

​ byte占1个字节 范围:-128-127

​ short占2个字节 范围:-32768-32767

​ int占4个字节 范围:-2147483648-2147483647

​ long占8个字节 范围:-9223372036854775808-9223372036854775807

浮点类型:

​ float占4个字节

​ double占8个字节

字符类型:

​ char占2个字节

boolean类型:

​ 占一位只有true或者false两个

引用类型:

​ 类,接口,数组

注意:

字符串String类型也是一个类也属于引用类型。引用类型的大小统一为4个字节记录其引用对象的地址。java语言的整数类型默认为int浮点类型默认double。

浮点数使用总结:

  1. 默认是double。

  2. 浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。

  3. 避免比较中使用浮点数。

类型转换

由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换。

数据类型转换必须满足如下规则:

  • 不能对boolean类型进行类型转换。

  • 不能把对象类型转换成不相关类的对象。

  • 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

  • 转换过程中可能导致溢出或损失精度,例如:

    int i =128;
    byte b = (byte)i;
    

    因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。

  • 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入。

    (int)23.7 == 23;
    (int)-45.89f == -45
    

    自动类型转换

    自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。

    例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。

强制类型转换

​ 强制类型转换的语法格式: (type)var ,运算符“()”中的type表示将值var想要转换成的目标数据类型。 条件是转换的数据类型必须是 兼容的。

注意:当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值,溢出。

变量

变量是什么:就是可以变化的量!

我们通过变量来操纵存储空间中的数据,变量就是指代这个存储空间!空间位置是确定的,但是里面放置什么值不确定!

这就好像我们家里有一个大衣柜,里面有十分多的小格子,我们给格子上贴上标签,放衣服,放鞋子,放手表等等,此时我们知道了哪里该放什么,但是,我们并不知道里面到底放的是什么牌子的鞋子,是衣服还是裤子。那个标签就相当于我们的变量,我们给他起了个名字,但是里面要放什么需要我们自己去放。

Java是一种强类型语言,每个变量都必须声明其类型。

注意事项:

  • 每个变量都有类型,类型可以是基本类型,也可以是引用类型。

  • 变量名必须是合法的标识符。

  • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束。

变量作用域

变量根据作用域可划分为三种:

  • 类变量(静态变量: static variable):独立于方法之外的变量,用 static 修饰。

  • 实例变量(成员变量:member variable):独立于方法之外的变量,不过没有 static 修饰。

  • 局部变量(lacal variable):类的方法中的变量。在使用前必须先声明和初始化(赋初值)。局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

常量

常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。常量名一般使用大写字符。

注意命名规范:

  1. 所有变量、方法、类名:见名知意

  2. 类成员变量:首字母小写和驼峰原则 : monthSalary

  3. 局部变量:首字母小写和驼峰原则

  4. 常量:大写字母和下划线:MAX_VALUE

  5. 类名:首字母大写和驼峰原则: Man, GoodMan

  6. 方法名:首字母小写和驼峰原则: run(), runRun()

运算符

Java 语言支持如下运算符:

  • 算术运算符: +,-,*,/,%,++,--

  • 赋值运算符 =

  • 关系运算符: >,<,>=,<=,==,!= instanceof

  • 逻辑运算符: &&,||,!

  • 位运算符: &,|,^,~ , >>,<<,>>>

  • 条件运算符 ?:

  • 扩展赋值运算符:+=,-=,*=,/=

注意:

在整数运算中:如果两个操作数有一个为Long, 则结果也为long没有long时,结果为int。即使操作数全为shot,byte,结果也是int。

在浮点数运算中:如果两个操作数有一个为double, 则结果为double.只有两个操作数都是float, 则结果才为float。

在取模运算中:负数%负数=负数;负数%正数=负数;正数%负数=正数;

自增自减运算中:

public static void main(String[] args) {
	int a = 3; int b = a++; //执行完后,b=3。先给b赋值,再自增。 
	int c = ++a; //执行完后,c=5。先自增,再给b赋值 
}

在逻辑运算中:逻辑与和逻辑或采用短路的方式(&& ||)。从左到右计算,如果确定值则不会再计算下去。在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。

逻辑与(&&)只要有一个为false, 则直接返回false。

逻辑或(||)只要有一个为true, 则直接返回true。

在位运算中:右移一位相当于除2取商。左移一位相当于乘2。

在字符串连接运算中:“+” 运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。

在三目条件运算中:x ? y : z 其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。

包机制

存在这样一个问题:当定义了多个类的时候,可能会发生类名的重复问题。

解决方式:在java中采用包机制处理开发者定义的类名冲突问题。

就好比我们平时的用电脑,一个文件夹下不能存在同名的文件,我们要是有这样的需求,但是又不想换名字,我们就可以考虑使用新建一个文件夹来存放!在我们的Java中也是这样的。

为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用 "import" 语句可完成此功能。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。