Java基础

前言

​ 在这里我尽可能的整理Java学习过程的知识,希望能和学习编程的各位一起进步,如果在阅读过程发现问题的请给我留言。这是Java的学习笔记,我会尽可能把这些梳理过程变得通俗易懂,能够详略得当,方便读者的学习和复习。笔记我会不断补充更新,还请各位提出宝贵意见。


Java程序的基本结构
//1.原文件所在包,应该放在Java程序代码的第一行。
package com.study.origin;

//2.
public class Hello
{
    /**
    	3.文档注释
    */
    //4.
    public static void main(String [] args)
    {
        //5.
        System.out.println("Hello World!");
    }
}
  1. 包名,表示该Java源代码所属的包。

  2. public,访问修饰符,用于控制程序其他部分对这段代码的访问级别。

    class,声明类的关键字,后跟着类名,Java所有的内容都包含在类中。

    源文件名必须与使用public声明的类的名字相同,并使用.java作为扩展名。

  3. 文档注释,用以生成 API文档。

  4. static表示方法为静态方法,void为方法返回值类型。

  5. 输出语句,在控制台输出字符串"Hello World"。


注释
注释类型

单行注释

//注释内容,只在本行有效

多行注释

/* 
  注释内容,可以跨越多行
*/

文档注释

/** 
   注释内容,用以提取出API文档
*/
注释作用和用法

注释会在编译过程中去除,所以可以在源程序中根据需要添加任意的注释,编译出的代码量不会因注释而增加。

/**/注释不能嵌套。

文档注释,可以用来自动生成API文档。一般文档注释第一句写概括性的句子。

javadoc命令(在命令行中使用)提取这些句子形成概要页,可以在其中使用html代码。

如果文档中有其他文件的链接,应将这些文件放在子目录doc-file中。


标识符和关键字
标识符

Java中标识符由数字、字母、下划线、和 $ 组成,且首字符不能为数字,不能为关键字和保留字,区分大小写。

不能在自己写的代码中使用 只用在Java编译器和其他工具生成的名字中。

命名规范:应该尽量使用有意义的英文单词。 包名:所有单词小写。 类名、接口名:单词首字母大写。 变量名、方法名:第一个单词首字母小写,之后单词首字母大写。 常量名:单词所有字母大写,单词之间用下划线连结。

关键字

50个关键字,48个可用,2个保留字goto、const。

数据类型 流程控制 权限修饰符 能修饰类/函数/变量 类的关系 对象实例 异常处理 数据类型字面量 其他
byte if private abstract extends new try package true native
short else protect final implements this catch import false stricfp
int switch (默认) static super finally null transient
long case public synchronized instanceof throw volatile
float default throws assert
double while
char do
boolean for
void break
class continue
interface return
enum

数据类型

Java一共有8种基本数据类型,4种整数类型(byteshortintlong),两种浮点数型(floatdouble),一种用以表示Unicode字符集的字符类型(char),一种用以表示真值boolean类型。

Java中基本数据类型的范围与内存大小与运行Java的机器无关,Java么有任何无符号的整数和浮点数类型。

整型

整数类型中,int类型最为常用,当然也要依据使用的场景选择相应范围的整数类型。byte和short类型主要用于底层文件处理或者需要控制占用存储空间量大的数组。

long类型字面量有后缀L或者l,一般使用L,易于区分。

浮点数类型

浮点数类型中,一般常用double,因为很对情况下float精度很难满足要求,当然还是要根据数据的精度选择数据类型。

float类型数值有一个后缀F或f,没有加后缀默认为double类型。double类型的后缀为d或D。

在使用浮点数计算时,超过精度就会引起误差或者错误。而且二进制系统中无法精确计算时无法表示十进制的1/10,所以在进行一些计算时或者进行浮点数值比较时容易出错。

数值计算中如果不允许有任何舍入误差,就应该使用BigDecimal类。

在数值计算中,一个正整数除0的结果为正无穷大,计算0/0或负数的平方根结果为NaN。

Double类型有三个用于表示浮点数溢出或计算出错情况下的数值。

public static final double POSITIVE_INFINITY = 1.0 / 0.0;  //正无穷
public static final double NEGATIVE_INFINITY = -1.0 / 0.0; //负无穷
public static final double NaN = 0.0d / 0.0;               //NaN非数值,不能进行比较,NaN和NaN以及数值都不相等
char类型

char类型总共2个字节,共16位,由于采用Unicode字符,所以有些字符会需要占用两给char值。

char类型的字面量用单引号括起,char类型的值可以表示为16进制,值的范围为\u0000-\uffff。

表示特殊字符的转义序列。

unicode转义序列会在解析代码之前处理成代表的字符。

JavaSE 5.0开始,码点是一个编码表中某个字符对应的代码值。在Unicode标准中码点采用16进制书写,并加前缀U+。

unicode的码点分为17个代码级别,第一个代码级别称为基本的多语言级别,码点从U+10000到U+10FFFF,其中包括一些辅助字符。

Unicode是一种编码机制,其中该机制具体实现有UTF-8、UTF-16。UTF-16编码采用不同长度的编码表示所有Unicode码点。

在基本的多语言级别中,每个字符用16位表示,称为代码单元,Java中char类型描述了UTF-16编码中的一个代码单元。

除非必要,一般不用char类型,而使用String类型处理字符串。

boolean类型

boolean类型有两个值,false和true,用来判定逻辑条件。整型值和布尔值之间不能进行相互转换。

进制数

16进制的数有前缀0x或0X,8进制的数有前缀0,8进制容易与二进制的数混淆,一般不使用。

Java7开始,可以使用二进制数,加前缀0b或0B。并且可以为数字字面量加下划线,例如:100_000。编译器会去除这些下划线。

16进制浮点数,用p表示指数,尾数采用16进制,指数采用10进制。


变量和常量
变量

Java中每个变量都有一个类型,在声明变量时,变量的类型位于变量名之前。

声明变量后,必须使用赋值语句对变量进行显示初始化,不能使用未初始化的变量。

未初始化时,不同类型变量默认初始化为 整型:0、浮点型:0.0、char: 0 或\u0000、引用数据类型:null。

这种没人初始化的情况只在类变量中,在方法中的变量不会进行默认初始化。

常量

Java中,使用final关键字表示常量。

final表示这个变量只能被赋值一次,赋值后,就不能更改变量值。

public static final variable = value; 

运算符
算术运算符:

+ - * / %

//a为整数
a % b = a - a / b * b;
//当a为小数
a % b = a - (int) a / b * b; //得到的是近似值
赋值运算符:

= += -= *= /= %=

自增自减:

(前)++ (后)++ (前)-- (后)--

int i = 1;
i = i++;
//i = 1;这种计算会引入一个临时变量存储i的值,因为i++是在赋值运算过程中进行的。
//(1)temp = i;(2) i = i + 1;(3) i = temp;
比较预算符:

== != > < >= <= instanceof(判断某个对象是否为某个类的实例)

逻辑运算符:

& &&(短路与) | ||(短路或) ! ^

&&优先级比||高。

位运算符:

<< >> >>> & | ^ ~

移位操作符的右操作数要完成模相应类型位数的运算。

符号移位运算,会用符号位填充高位。

>>:带符号右移。正数右移高位补0,负数右移高位补1。

>>>:无符号右移。无论是正数还是负数,高位通通补0。

三元运算符:

(运算时表达式1和2类型要相同,计算时存在类型转换。)

(条件表达式)? 表达式1 : 表达式2(真为1,假为2)

运算符优先级
运算符 结合性
[] . ()(方法调用) ->
! ~ ++ -- - (强制类型转换) new <-
* / % ->
+ - ->
<< >> >>> ->
< <= > >= instanceof ->
== !=- ->
& ->
^ ->
| ->
&& ->
|| ->
?: <-
= += -= *= /= %= &= |= ^= <<= >>= >>>= <-

类型转换

类型转换范围小的转为大的类型不会有问题,反之会出现溢出问题。在进行二元操作时,要先将数据转换为同一类型,再计算。

自动类型转换

实线箭头表示无信息丢失转换,虚线箭头表示可能有精度损失的转换。

当有超过int的类型时,转化为表示数范围最大的类型,否则操作数都转化为int类型。当byte、char、short三种类型的变量做运算时,结果为int类型。

String的连结运算,+在前,结果自动转化成String类型;String转换为基本数据类型使用包装类的parseXXX方法。

如果没有后缀,整型字面量默认为int类型,浮点型字面量默认为double类型。所以在进行字面量计算时要注意类型转换的问题。

//Type mismatch: cannot convert from double to float
float i = 3.0;
强制类型转换

形式:(type)data

强制类型转换只涉及7种基本数据类型,可能导致精度损失。

结合赋值运算符,运算值类型与左侧操作数的类型不同,就会发生强制类型转换。例如:x += 3.5; (int)(x+3.5)

强制类型转换通过截断小数部分将浮点值转换为整型。如果想进行舍入转换,可以使用Math.round方法。

double x = 3.14;
int xPi = (int) Math.round(x);//round方法返回值为long类型

控制流程
分支结构
if (condition) statement else statement1

当条件condition为真时执行statement语句,否则执行,else后的语句。如果有多条语句要执行,就使用{}包含多个语句。

else与最近的if配对,配对的if-else是是一个语句块。

分支嵌套最好不要超过三层。

Size sz = ...;
switch (sz)
{
case SMALL:
  ...
	break;
...
default:
  ...
  break;
}

switch语句从与选项值匹配的case标签处开始执行,知道遇到break语句,或者执行到switch语句的结束处。如果没有匹配的case标签,而有default子句,就执行这个语句。

case标签可以是:char byte short int的常量表达式、枚举常量、字符串字面量(jdk7);case后的值只能为常量或表达式不能为变量。

如果case分支语句的末尾没有break语句,那么就会执行下一个case分支语句。巧妙利用switch的穿透现象。

switch语句中使用枚举常量时,不必在每个标签中指明枚举名,可以由switch语句表达式确定。

循环结构
while (condition) statement
do statement while (condition);

while循环首先检测循环条件,如果循环条件为false,则while循环体中语句就不会执行。

如果希望循环体中的代码至少执行一次,就可以使用do-while循环。

for(int i; i <= num; i++)
{
 statement
}
for(variable:collection)
{
 statement
}

第一种循环为for循环,第一部分通常用于对计数器初始化,第2部分给出每新一轮循环执行前要检测的循环条件。第3部分给出如何更新技术器的语句。

循环内部定义的变量不能在外部使用,for循环在第一部分定义的变量,作用域位整个循环体。

第二种循环是foreach循环,定义一个变量用于暂存集合中的每个元素,然后执行相应语句。这个集合必须是一个数组或者是实现了Iterable接口的类对象。该循环会依次遍历collection中的元素,并执行相应的语句。

跳转语句

break、continue

break后可以带标签,可以跳转至标签位置,标签定义( label:)**,只能跳出语句块。

标签必须放在希望跳出的最外层循环之前,并且紧跟一个冒号,只能跳出语句块,不能跳入语句块;通过执行带标签的break跳转到带标签的语句块末尾,用于跳出多重嵌套循环。

continue跳过循环体当前剩余部分,continue后可以接标签。


数组

数组是多个类型相同数据的组合,实现对这些数据的统一管理。

声明数组

type [] arrayName;

初始化

type [] variableName = new int[] {······};(简写type [] variableName={···}; )

type [] variableName = new type [length];(扩容的一种手段)

数组元素:整型初始化为0,浮点型初始化为0.0,布尔型初始化为false,char类型初始化为\u0000,引用类型初始化为null。

属性:

length:数组的长度。(array index out of bounds数组下标越界异常)

posted @   AlanMathisomTuring  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示