侧边栏壁纸
  • 累计撰写 5 篇文章
  • 累计创建 5 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

java基础语法

鑫梦坤途
2024-05-13 / 0 评论 / 2 点赞 / 23 阅读 / 102950 字

一、注释

注释注释是一个重要的工具,用于向代码的阅读者(包括程序员自己和其他团队成员)提供关于代码功能、目的、工作方式或其他重要信息的说明。Java编译器会忽略注释,因此它们不会影响代码的执行。

Java提供了三种类型的注释:单行注释多行注释文档注释

1.1、单行注释

单行注释以 //开头,以换行结束,格式如下:

//注释内容

1.2、多行注释

多行注释以 /*开头,以*/结束,格式如下:

/*
	注释内容
 */

1.3、文档注释(也称为JavaDoc注释)

使用/**开始,并使用*/结束。这种注释主要用于生成API文档,通过javadoc工具可以自动从这种注释中生成HTML格式的文档。

/**
	注释内容
 */

1.4、一般使用位置

//单行注释
/*
	多行注释
*/
/**
	文档注释演示
	@author zjh
*/
public class Demo{
    
	/**
		Java程序的入口
		@param String[] args main方法的命令参数
	*/
    public static void main(String[] args){
        System.out.println("hello");
    }
}

1.5、文档注释常见注释

  • @author 标明开发该类模块的作者,多个作者之间使用,分割

  • @version 标明该类模块的版本

  • @see 参考转向,也就是相关主题

  • @since 从哪个版本开始增加的

  • @param 对方法中某参数的说明,如果没有参数就不能写

  • @return 对方法返回值的说明,如果方法的返回值类型是void就不能写

  • @throws/@exception 对方法可能抛出的异常进行说明 ,如果方法没有用throws显式抛出的异常就不能写

其中 @param@return@exception 这三个标记都是只用于 方法 的。

  • @param的格式要求:@param 形参名 形参类型 形参说明

  • @return 的格式要求:@return 返回值类型 返回值说明

  • @exception 的格式要求:@exception 异常类型 异常说明

@param和@exception可以并列多个

二、标识符

标识符标识符(Identifier)是用来给变量、类、方法、包等命名的符号。这些标识符必须遵循一定的规则,以便Java编译器能够正确解析和识别它们。

2.1、规则:

  1. 字母数字字符:标识符可以由字母(A-Z 或 a-z)、数字(0-9)、美元符号($)或下划线(_)组成。注意,标识符不能以数字开头。

  2. 区分大小写:Java是大小写敏感的,所以myVarmyvar会被视为两个不同的标识符。

  3. 长度限制:在理论上,Java标识符的长度没有限制,但实际上受限于具体编译器和运行环境的实现。

  4. 不能是Java关键字:标识符不能与Java的关键字相同。例如,你不能将变量命名为classpublicfor等,因为这些是Java语言的保留字。

  5. 规范命名:虽然Java不强制要求特定的命名规范,但通常遵循一定的命名约定可以提高代码的可读性。例如,类名通常以大写字母开头(遵循驼峰命名法),变量和方法名则以小写字母开头,后续单词的首字母大写。

  6. Unicode字符:从Java 1.5开始,标识符中可以包含任何Unicode字符,只要它们可以通过转义序列或Unicode转义序列来表示。但是,为了代码的可读性和可维护性,通常建议只使用ASCII字符集中的字母、数字、美元符号和下划线来构成标识符。

2.2、命名规范:

  • 见名知意

  • 类名、接口名等:每个单词的首字母都大写,形式:XxxYyyZzz,

例如:HelloWorld,String,System等

  • 变量、方法名等:从第二个单词开始首字母大写,其余字母小写,形式:xxxYyyZzz,

例如:age,name,bookName,main

  • 包名等:每一个单词都小写,单词之间使用点.分割,形式:xxx.yyy.zzz,

例如:java.lang

  • 常量名等:每一个单词都大写,单词之间使用下划线_分割,形式:XXX_YYY_ZZZ,

例如:MAX_VALUE,PI

三、关键字

关键字(Keywords):关键字是具有特殊含义的标识符,它们被Java语言本身预定义并赋予了特定的含义。这些关键字不能用作变量名、方法名、类名、包名或其他用户自定义的标识符。

Java关键字主要用于控制流语句、类定义、方法定义、数据访问修饰符、错误处理等方面。

  1. 控制流语句if, else, switch, case, for, while, do, break, continue, return 等。

  2. 类、接口和枚举定义class, interface, enum 等。

  3. 访问修饰符public, private, protected, default(默认访问级别不是关键字,但经常被提及)等。

  4. 数据类型byte, short, int, long, float, double, char, boolean 等。

  5. 包和导入package, import 等。

  6. 实例化和对象new, this, super 等。

  7. 异常处理try, catch, finally, throw, throws 等。

  8. 其他void(用于表示方法没有返回值),true, false(布尔类型的字面值),null(表示引用类型的变量没有引用任何对象),instanceof(用于检查对象是否是一个类的实例),goto(在Java中是保留字,但并未使用),transient(用于序列化),volatile(用于多线程),synchronized(用于同步),final(用于表示常量或不可变),static(用于表示静态成员或方法),abstract(用于表示抽象类或方法),strictfp(用于浮点数计算的精度控制)等。

四、数据类型

数据类型:数据类型是用于指定存储在变量中的值的种类或类型。Java支持两种基本的数据类型:基本数据类型引用数据类型

4.1、基本数据类型

基本数据类型是Java中预定义的数据类型,它们直接存储值而不是引用。Java有8种原始数据类型,可以分为四类

  1. 整型(Integral Types):

    • byte: 8位,取值范围是-128到127

    • short: 16位,取值范围是-32,768到32,767

    • int: 32位,通常用于整型数据,取值范围取决于具体的Java虚拟机实现

    • long: 64位,取值范围远大于int,常用于大整数

  2. 浮点型(Floating-Point Types):

    • float: 32位单精度浮点数

    • double: 64位双精度浮点数

  3. 字符型(Character Types):

    • char: 16位,用于存储Unicode字符

  4. 布尔型(Boolean Types):

    • boolean: 只有两个值,truefalse

数据类型

占用字节数

取值范围

具体取值范围

默认值

byte

1

-2^7 ~ 2^7-1

-128 ~ 127

0

short

2

-2^15 ~ 2^15-1

-32768 ~ 32767

0

int

4

-2^31 ~ 2^31-1

-2147483648 ~ 2147483647

0

long

8

-2^63 ~ 2^63-1

-9223372036854775808 ~ 9223372036854775807

0L

float

4

1.4E-45 ~ 3.4028235E38

1.4E-45 ~ 3.4028235E38

0.0f

double

8

4.9E-324 ~ 1.7976931348623157E308

4.9E-324 ~ 1.7976931348623157E308

0.0d

boolean

1

true / false

true / false

false

char

2

0 ~ 2^16-1

0 ~ 65535

‘\u0000’

4.1.1、类型转换

在赋值时的转换

不同数字类型在赋值时,会发生自动转换和强制转换。具体为:

自转----小类型可以直接赋值给大类型;

强转----大类型必须手动强转之后,赋值给小类型;

数字类型的大小关系:double > float > long > int > char、short 、byte

注意:整数强转可能发生溢出问题,浮点数强转可能发生精度丢失。

自动转换:

  • 当存储范围小的数据类型与存储范围大的数据类型一起混合运算时,会按照其中最大的类型运算。

  • 当byte,short,char数据类型进行算术运算时,按照int类型处理。

需要注意的是,自动类型转换只适用于基本数据类型之间的转换。

强制类型转换:

强制类型转换:Java中大容量是无法直接转换成小容量的。因为这种操作可能会导致精度损失,所以这种行为交给了程序员来决定,当然这种后果自然是程序员自己去承担。因此在代码中需要程序员自己亲手加上强制类型转换符,程序才能编译通过。

4.1.2、常用字符编码

  • a 对应ASCII码 97(b是98,以此类推)

  • A 对应ASCII码 65(B是66,以此类推)

  • 0 对应ASCII码 48(1是49,以此类推)

4.2、引用数据类型

引用数据类型在Java中不直接存储值,而是存储对对象的引用。这些对象在堆内存中被创建,并通过引用来被访问。Java中有三种主要的引用数据类型

  1. 类(Class Types):
    类是用户定义的数据类型,它包含字段(变量)和方法(函数)。

  2. 接口(Interface Types):
    接口是一种特殊的类,它只包含抽象方法和常量。接口不能被实例化,但可以被类实现。

  3. 数组(Array Types):
    数组是一种特殊的数据结构,用于存储相同类型的数据项。数组可以是任何类型的数组,包括基本数据类型和引用数据类型。

4.3、封装类型

Java还提供了与原始数据类型对应的封装类型(Wrapper Classes),它们是引用数据类型,用于将原始数据类型包装为对象。这些封装类型有:

  • Byte

  • Short

  • Integer

  • Long

  • Float

  • Double

  • Character

  • Boolean

封装类型主要用于集合框架、泛型和其他需要对象的地方,因为它们提供了原始数据类型所不具备的方法和功能。同时,自动装箱(autoboxing)和拆箱(unboxing)机制使得在原始数据类型和封装类型之间转换变得容易。

4.3.1、自动装箱

自动装箱是指Java自动将基本数据类型值转换成对应的包装类对象。在Java 5之前,如果你需要将一个基本数据类型值赋给一个包装类对象,你需要显式地创建一个新的包装类对象。

4.3.2、自动拆箱

自动拆箱则与自动装箱相反,它是指Java自动将包装类对象转换成对应的基本数据类型值。在Java 5之前,如果你需要从包装类对象中获取基本数据类型值,你需要调用包装类的某个方法(如intValue(), doubleValue()等)。

注意事项

虽然自动装箱和拆箱带来了便利,但它们也可能会导致一些潜在的问题:

  1. 空指针异常:由于包装类对象是引用类型,它们可以为null。当尝试对null的包装类对象进行拆箱时,会抛出NullPointerException

  2. 性能问题:虽然现代JVM的优化已经使得这种性能差异变得不那么显著,但在某些情况下,自动装箱和拆箱仍然可能导致不必要的性能开销。

  3. 缓存问题:对于Byte, Short, Integer, Long, Character这几个包装类,它们的值在-128到127之间(对于Character是0到127)时,会利用缓存机制直接返回已存在的对象实例,而不是创建新的对象。但超出这个范围的值每次都会创建新的对象实例。

因此,在使用自动装箱和拆箱时,需要注意这些潜在的问题,并根据实际情况进行适当的优化和处理。

五、变量

变量:变量相当于内存中一个数据存储空间的表示,可以把变量看作门牌号,通过门牌号我们可找到房间,而通过变量我们可以找到值。

5.1、使用基本步骤

  1. 声明变量
    int a;

  2. 赋值
    a = 60;  //把60赋给a,也可以一步到位  int a = 60;

5.2、使用注意事项

  1. 变量表示内存中的一个存储区域(不同变量,类型不同,占用空间大小不同,如int 4字节,double 8字节)。

  2. 该区域有自己的名称(变量名)和类型(数据类型)。

  3. 变量必须先声明,后使用。

  4. 该区域的数据/值可以在同一类型范围内不断变化。

  5. 变量 = 变量名 + 值+ 数据类型

5.3、程序中 + 号的使用

  1. 当左右两边都是数值类型,则加法运算。

  2. 左右两边一方为字符串,则拼接运算。

  3. 运算顺序,从左到右

//下面代码输出什么?
System.out.println(100+90);     //190
System.out.println("100"+90);   //10090
System.out.println(100+3+"90"); //10390
System.out.println("3"+100+90); //310090

5.4、变量的分类

  1. 局部变量:定义在方法、语句块、形式参数中的变量。

  2. 成员变量:定义在类中,但在方法之外的变量。

    1. 静态变量:使用static关键字定义的变量。

    2. 实例变量:没有使用static关键字定义的变量。

5.6、最终变量/常量(final)

最终变量习惯上也称为常量,因为它是通过在声明变量的数据类型前面加final的方式实现的,所以叫最终变量。加final修饰后,这个变量的值就不能修改了,一开始赋值多少,就是多少,所以此时的变量名通常称为常量名。常量名通常所有字母都大写,每一个单词之间使用下划线分割,从命名上和变量名区分开来。

六、运算符(Operator)和标点符号(Separators)

在Java中,一共有38个运算符。

运算符的分类:

  • 按照功能分:算术运算符、赋值运算符、比较运算符、逻辑运算、条件运算符、Lambda运算符

分类

运算符

算术运算符(7个)

+、-、*、/、%、++、–

赋值运算符(12个)

=、+=、-=、*=、/=、%=、>>=、<<=、>>>=、&=、|=、^=等

关系运算符(6个)

>、>=、<、<=、==、!=

逻辑运算符(6个)

&、|、^、!、&&、||

条件运算符(2个)

(条件表达式)?结果1:结果2

位运算符(7个)

&、|、^、~、<<、>>、>>>

Lambda运算符(1个)

->

  • 按照操作数个数分:一元运算符(单目运算符)、二元运算符(双目运算符)、三元运算符 (三目运算符)

分类

运算符

一元运算符(单目运算符)

正号(+)、负号(-)、++、–、!、~

二元运算符(双目运算符)

除了一元和三元运算符剩下的都是二元运算符

三元运算符 (三目运算符)

(条件表达式)?结果1:结果2

6.1、算术运算符

算术运算符

符号解释

+

加法运算,字符串连接运算,正号

-

减法运算,负号

*

乘法运算

/

除法运算,整数/整数结果还是整数

%

求余运算,余数的符号只看被除数

++--

自增自减运算

6.1.1、加法

  • 第一种:对于+两边都是数值的话,+就是加法的意思

  • 第二种:对于+两边至少有一边是字符串得话,+就是拼接的意思

6.1.2、自加自减运算

理解:++ 运算,变量自己的值加1。反之,-- 运算,变量自己的值减少1,用法与++ 一致。

1、单独使用

  • 变量在单独运算的时候,变量前++和变量后++,变量的是一样的;

  • 变量前++ :例如 ++a

  • 变量后++ :例如 a++

2、复合使用

  • 其他变量放在一起使用或者和输出语句放在一起使用前++后++就产生了不同。

  • 变量前++ :变量先自身加1,然后再取值。

  • 变量后++ :变量先取值,然后再自身加1。

3.小结:

  • ++在前,先自加,后使用;

  • ++在后,先使用,后自加。

6.2、关系运算符/比较运算符

关系运算符

符号解释

<

比较符号左边的数据是否小于右边的数据,如果小于结果是true。

>

比较符号左边的数据是否大于右边的数据,如果大于结果是true。

<=

比较符号左边的数据是否小于或者等于右边的数据,如果大于结果是false。

>=

比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是false。

==

比较符号两边数据是否相等,相等结果是true。

!=

不等于符号 ,如果符号两边的数据不相等,结果是true。

  • 比较运算符,是两个数据之间进行比较的运算,运算结果一定是boolean值true或者false

  • 其中>,<,>=,<=不支持boolean,String类型,==和!=支持boolean和String。

6.3、逻辑运算符

逻辑运算符

符号解释

符号特点

&

与,且

falsefalse

`

`

^

异或

相同为false,不同为true

!

falsetrue,非truefalse

&&

双与,短路与

左边为false,则右边就不看

`

`

&&和&区别,||和|区别:

  • &&和&区别:

&&和&结果一样,&&有短路效果,左边为false,右边不执行;&左边无论是什么,右边都会执行。

  • ||和|区别:

||和|结果一样,||有短路效果,左边为true,右边不执行;|左边无论是什么,右边都会执行。

6.4、条件运算符

  • 条件运算符格式:

条件表达式?结果1:结果2

  • 条件运算符计算方式:

    • 条件判断的结果是true,条件运算符整体结果为结果1,赋值给变量。

    • 判断条件的结果是false,条件运算符整体结果为结果2,赋值给变量。

6.5、位运算符

位运算符

符号解释

&

按位与,当两位相同时为1时才返回1

`

`

~

按位非,将操作数的每个位(包括符号位)全部取反

^

按位异或。当两位相同时返回0,不同时返回1

<<

左移运算符

>>

右移运算符

>>>

无符号右移运算符

  • 位运算符的运算过程都是基于补码运算,但是看结果,我们得换成原码,再换成十进制看结果

  • 从二进制到十进制都是基于原码

  • 正数的原码反码补码都一样,负数原码反码补码不一样

  • byte,short,char在计算时按照int类型处理

如何区分&,|,^是逻辑运算符还是位运算符?

如果操作数是boolean类型,就是逻辑运算符,如果操作数是整数,那么就位运算符。

6.6、赋值运算符

运算符

符号解释

=

将右边的常量值/变量值/表达式的值,赋值给左边的变量

+=

将左边变量的值和右边的常量值/变量值/表达式的值进行相加,最后将结果赋值给左边的变量

-=

将左边变量的值和右边的常量值/变量值/表达式的值进行相减,最后将结果赋值给左边的变量

*=

将左边变量的值和右边的常量值/变量值/表达式的值进行相乘,最后将结果赋值给左边的变量

/=

将左边变量的值和右边的常量值/变量值/表达式的值进行相除,最后将结果赋值给左边的变量

%=

将左边变量的值和右边的常量值/变量值/表达式的值进行相模,最后将结果赋值给左边的变量

<<=

将左边变量的值左移右边常量/变量值/表达式的值的相应位,最后将结果赋值给左边的变量

>>=

将左边变量的值右移右边常量/变量值/表达式的值的相应位,最后将结果赋值给左边的变量

>>>=

将左边变量的值无符号右移右边常量/变量值/表达式的值的相应位,最后将结果赋值给左边的变量

&=

将左边变量的值和右边的常量值/变量值/表达式的值进行按位与,最后将结果赋值给左边的变量

|=

将左边变量的值和右边的常量值/变量值/表达式的值进行按位或,最后将结果赋值给左边的变量

^=

将左边变量的值和右边的常量值/变量值/表达式的值进行按位异或,最后将结果赋值给左边的变量

6.7、运算符优先级

提示说明:

(1)表达式不要太复杂

(2)先算的使用()

口诀:

单目运算排第一;

乘除余二加减三;

移位四,关系五;

等和不等排第六;

位与、异或和位或;

短路与和短路或;

依次从七到十一;

条件排在第十二;

赋值一定是最后;

2

评论区