当前位置: 首页 > news >正文

java基础总结笔记(2026.05.06)

javase

注释

/* * 多行注释 */ ​ //JavaDoc:文档注释 ​ /* * @Description Helloworld * @Author thr */

标识符

关键字

  • 所有的标识符都应该以大写字母或者小写字母、美元符号💲、下划线开始的。

  • 首字符之后可以是大写字母或者小写字母、美元符号💲、下划线这些或者数字的任何字符组成。

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

  • 标识符是大小写敏感的。

  • 不建议用中文去命名

数据类型

  • java是强类型语言:所有变量都必须先定义后才能使用。

  • 弱类型语言:VB、JS

Java的数据类型分为两大类

  1. 基本类型

    1. 数值型

      1. byte

      2. short

      3. int

      4. long(定义的数值后面要加L)

    2. 浮点类型

      1. float(定义的数值后面要加F)

      2. double(定义的数值后面要加D)

    3. 字符类型

      1. char

    4. boolean类型

  2. 引用类型

    1. 接口

    2. 数组

十进制

二进制

八进制(0开头)

十进制

十六进制(0X开头)

最好完全使用浮点数进行比较,BigDecimal数学工具进行比较

类型转换

  • 不同类型的数据先转化为同一类型,然后再进行计算赋值

  • 从低到高的数据类型

byte、short、int、long、float、double

  • 如果从低到高转换是强制转换可能造成内存溢出或者精度流失

  • int i =128; byte b = (byte)i;//强制转换,但是最后byte得出的结果不是128,因为byte类型最多到127,造成了内存溢出的问题
  • 如果从高到低是自动转换

int i = 128; double b = i;//b得128.0
  • 不能对布尔值进行转换

  • 不能把对象类型转换为不相干的类型

    int money = 10_0000_0000;//JDK7新特性,数字之间可以使用下划线进行分割 int years = 20; long total = money * years;//结果是不对的,因为在计算money * years的时候数据已经溢出,再复制给long类型也是错误的数据 long total1 = money* ((long)years);//结果是正确的

变量

  • 从属于对象,如果不进行初始化,这个类型的默认值 0,0.0,布尔值默认为false,除了基本类型其余的默认值都是null

常量

  • 常量初始化后不能再改变!不会变动的值

  • 常量名一般使用大写字符

final double PI =3.14;//final 常量名 = 值;定义常量

运算符

command + d 复制当前行到下一行

double pow = Math.pow(2,3);//输出2的3次方的值,Math是一个工具类
  • &&逻辑与运算:两个都为真,结果才为真

  • ||逻辑非运算:两个变量有一个为真,结果是真

  • !非运算:如果是真,结果为假,如果是假,结果为真

boolean a = true; boolean b = false; System.out.println(a&&b);//false System.out.println(a||b);//true System.out.println!(a&&b);//true
int c = 5; boolean d = (c< 4)&&(c++<4);//短路与 System.out.println(d);//false,c<4是错误的所以后面的C++没有执行 System.out.println(c);//所以c还是5
  • 位运算

    1. 与、或、非、取反

A = 0011 1100 B = 0000 1101 A & B 0000 1100(A与B都为1时才为1,否则是0) A | B 0011 1101(A或B为1时,结果为1,否则是0) A ^ B 0011 0001(A与B相同时则为0,不同时为1) ~B 1111 0010(当B为1时等于0,当B为0时为1,取反)
  1. 左移<<,右移>>

System.out.print(2<<3);//输出16,2在二进制里面是0000 0010,当左移三位的时候是0001 0000,对应16

条件运算符

  1. +=,-=

int a = 10; int b = 20; a += b;//a = a + b System.out.println(a);//得出a等于30. a -= b;//a = a - b System.out.println(a);//得出a 等于10。
  1. 字符串链接符

int a = 10; int b = 20; System.out.println("" + a + b);//输出1020,因为前面有个字符串的类型 System.out.println(a + b + "");//输出30,因为先运算a+b后再加字符串就还是30.
  1. 三元运算符

x ? y : z;//如果x为真,则结果为y,否则结果为z int score = 50; String type = score < 60 ? "不及格" : "及格"; System.out.println(type);//不及格

用户交互Scanner

我们可以通过Scanner类来获取用户的输入。

基本语法

Scanner s = new Scanner(System.in);
import java.util.Scanner;//需要调用Scanner包 ​ public class Scannertest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);//创建一个扫描器对象,用于接收键盘数据 ​ System.out.println("使用next方式接收"); ​ //判断用户有没有输入字符串 if(scanner.hasNext()){ String str = scanner.next(); System.out.println("输出的内容为:" + str); } //凡是属于IO流(输入、输出流)的类如果不关闭会一直占用资源 scanner.close(); } }

next与nextLine接收的区别

  • next():

  1. 一定要读取到有效字符后才可以结束输入。

  2. 对输入有效字符之前遇到的空白,next()方法会自动将其去掉。

  3. 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。

  4. next()不能得到带有空格的字符串。

  • nextLine():

1.以Enter为结束符,也就是说nextLine()方法返回的是输入会车之前的所有字符。

2.可以获得空白。

在Scanner上按住command和左键可以调出Scanner的源码,打开结构可以看到Scanner的结构。

顺序结构

  • JAVA的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。

  • 语句与语句之间,框与框之间是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,他是任何一个算法都离不开的一种基本算法结构。

选择结构

  1. if单选择结构

  • 语法:

if(布尔值表达式) { //如果布尔表达式为true将执行的语句 };

拓展:equals判断字符串是否相等,尽量不要使用==判断字符串。

  1. if双选择结构

  • 语法:

if(布尔表达式){ //如果布尔表达式的值为true }else{ //如果布尔表达式为false }
  1. if多选择结构

  • 语法:

if(布尔表达式1){ //如果布尔表达式1的值为true执行代码 }else if(布尔表达式2){ //如果布尔表达式2的值为true执行代码 }else if(布尔表达式3){ //如果布尔表达式3的值为true执行代码 }else{ //如果以上布尔表达式都不为true执行代码 }

if语句至多有一个else语句,else语句在所有else if语句之后,if语句可以有若干个else if语句,他们必须在else语句之前。一旦其中一个else if语句检测为true,其他的else if 以及 else语句都将跳过执行。

  1. 嵌套的if结构

  • 使用嵌套的if...else语句是合法的,也就是说可以在另一个if或者else if语句中使用if或者else if语句。

  • 语法:

if(布尔表达式1){ //如果布尔表达式1 的值为true执行代码 if(布尔表达式2){ //如果布尔表达式2的值为true执行代码 } }
  1. Switch选择结构

  • switch case语句

  • switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

  • switch语句中的变量类型可以是byte、short、int、char、String,同时case标签必须为字符串常量或自变量。

  • 语法:

switch(expression){ case value: //语句 break;//可选 //你可以有任意数量的case语句 case value: //语句 break;//可选 default://可选 //语句 }

循环结构

  1. While循环

  • 结构

while(布尔表达式){ //循环内容 }
  • 只要布尔表达式为true,循环就会一直执行下去。

  • 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。

  • 少部分情况需要循环一直执行,比如服务器的请求响应监听等。

  • 循环条件一直为true就会造成无限循环【死循环】,我们正常的业务编程中应该尽量避免死循环。会影响程序性能或造成程序卡死。

  1. do...while循环

  • 对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。

  • do...while循环和while循环相似,不同的是,do...while循环至少会执行一次。

  • 语法

do { //代码语句 }while{布尔表达式};
  • While 和do...while的区别:

    • while先判断后执行,do..while是先执行后判断。

    • do...while总是保证循环体会被至少执行一次!这是他们主要的区别。

  • 代码演示

//使用do...while int i = 0; int sum = 0; do{ sum = sum + i; i++; }while(i<=100); System.out.println(sum);//5050,从1加到100
//演示while与do...while的区别 int a = 0; while(a<0){ System.out.println(a);//没有输出 a++; } System.out.println("========="); do{ System.out.println(a);//输出0 a++; } while(a<0);
  1. for循环(很重要)

  • 虽然所有循环结构都可以用while或者do...while表示,但java提供了另一种语言:for循环,使一些循环结构变得更简单。

  • for循环语句是支持迭代的一种通用结构,是最有效的,最灵活的循环结构。

  • for循环执行的次数是在执行钱就确定的,语法:

for(初始化;布尔表达式;更新迭代){ //代码语句 }
  • 代码演示:

for(int i =1;i <= 100;i++){//初始化值;条件判断;迭代 System.out.println(i); } System.out.println("for循环结束");
  • 快捷键比如100.for会自动生成for的循环语句

  • 注意事项:

    • 最先执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。然后检测布尔表达式的值。如果为true,循环体执行。如果为false,循环终止,开始执行循环体后面的语句。再次检测布尔表达式,循环执行上面的过程。

    • 死循环:

    for(;;) {};
    • 练习题

    //练习1:计算0到100之间的奇数和偶数的和 int oddSum = 0; int evenSum = 0; for(int i = 0;i < 100;i++) { if(i%2 == 0 ){ oddSum+=i; }else { evenSum+=i; } } System.out.println(oddSum);//奇数和 System.out.println(evenSum);//偶数和
    //练习2:用for循环输出1到1000能被5整除的数,并且每三个为一行。 for (int i = 1; i <= 1000; i++) { if(i % 5 == 0){ System.out.print(i+"\t"); } if(i %(5 * 3) == 0) { System.out.println(); } }
    //练习3:打印99乘法表 for(int i = 1;i<=9;i++) { for(int j = 1;j<=i;j++){ System.out.print(j + "*" + i + "=" + i*j + "\t"); } System.out.println(); }
    1. 增强for循环

    • 在数组重点使用。

    • 增强for循环的语法:

    for(声明语句;表达式) { //声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。 //代码 }
    • 代码样式:

    int[] numbers = {10,20,30,40,50};//定义了一个数组 for(int i = 0 ;i < 5;i++) { System.out.println(numbers[i]); } //遍历数组的元素 for (int x:numbers) { System.out.println(x); }
  1. break和continue

  • break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)。

  • continue语句在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

  • break与continue的区别:break退出整个循环,continue退出某次循环过程。

  1. 练习:打印5行三角形

for(int i = 1;i<=5;i++) { for(int j = 5;j>i;j--) { System.out.print(" "); } for(int j = 1;j<=i;j++) { System.out.print("*"); } for(int j = 1;j<i;j++) { System.out.print("*"); } System.out.println(); }

什么是方法

  • java方法是语句的集合,他们在一起执行一个功能。

    • 方法是解决一类问题的步骤和有序组合

    • 方法包含于类或对象中

    • 方法在程序中被创建,在其他地方被引用

  • 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只能完成1个功能,这样有利于我们后期的扩展。

  • 例子

    //main方法 public static void main(String[] args) { int sum = add(1,2); System.out.println(sum);//3 } public static int add(int a,int b) { return a+b; }
  • main方法里尽量整洁,主要调用别的方法

方法的定义和调用

方法的定义

  • java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:

    • 方法包含一个方法头和一个方法体。下面是一个方法的所有部分:

      • 修饰符:是可选的,告诉编译器如何使用该方法。定义了该方法的访问类型。

      • 返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType是关键字void。

      • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。

      • 参数类型:参数像一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。

        • 形式参数:在方法被调用时用于接收外界输入的数据。

        • 实参:调用方法时实际传给方法的数据。

      • 方法体:方法体包含具体的语句,定义该方法的功能。

      • 格式:

      修饰符 返回值类型 方法名(参数类型 参数名) { 方法体 return 返回值; }
      • 举例:比大小

      //比大小 public static void main(String[] args) { int max = max(10,19); System.out.println(max); } public static int max(int num1,int num2) { if(num1 == num2) { return 0;//终止方法 } int result = 0; if(num1 > num2) { result = num1; }else { result = num2; } return result; }

      方法的调用

      • 调用方法:对象名.方法名(实参列表)

      • java支持两种调用方法的方式,根据方法是否返回值来选择。

      • 当方法返回一个值的时候方法调用通常被当作一个值。例如

      int larger = max(30,40);
      • 如果方法返回值是void,方法调用一定是一条语句。

        System.out.println("Hello!");

      值传递(java是值传递)和引用传递经常在面试中问道

      方法的重载

      • 重载就是在一个类中,有相同的函数名称,但形参不同的参数。

      • 方法重载的规则:

        • 方法名称必须相同

        • 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)。

        • 方法的返回类型可以相同也可以不同。

        • 仅仅返回类型不同不足以成为方法的重载。

      • 实现理论:

        • 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器会报错。

      命令行传参

      • 有时候希望运行一个程序的时候再传递给他消息。这就要靠传递命令行参数给main()函数实现。

      public class Scannertest { public static void main(String[] args) { //args.length 数组长度 for(int i = 0;i < args.length;i++) { System.out.println("args[" + i + "]"+ args[i]); ​ } } }

      可变参数

      • java支持传递同类型的可变参数给一个方法。

      • 在方法声明中,在指定参数类型后面加一个省略号(...)。

      • 一个方法中只能置顶一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

http://www.jsqmd.com/news/767900/

相关文章:

  • 使用bluesky队列服务器
  • 自建智能语音音乐库:开源music-skill项目部署与集成指南
  • TDR阻抗测试仪Bamtone H系列深度评测
  • HALCON深度学习模型部署新选择:一份详细的OpenVINO 2021.4 LTS集成与配置避坑指南
  • 对Java继承中的访问权限与强转问题的小理解
  • 唯众AI教学与实训平台:从教学到科研全流程,附实操代码与技术拆解
  • 二进制分析框架pasta:连接Ghidra与angr的中间表示与自动化工具链
  • 从零构建智能网页向量索引系统:原理、实现与优化
  • 紧急预警:Docker 27.1将废弃--link参数,所有依赖可视化编排的低代码平台(如简道云、明道云)容器化方案需立即重构——附向后兼容迁移路径图
  • 基于Transformer与零样本分类的文本氛围分析工具VibeCheck实践指南
  • 1Panel开源服务器面板:Go+React架构与容器化运维实践
  • 构建Python量化交易回测平台:5步实现专业级可视化分析工具
  • PCB切片分析工具:Bamtone MS90集成AI的智能测量解决方案
  • AJAX 投票:技术解析与应用场景
  • 基于Web Audio与Canvas实现浏览器端音视频动态合成
  • 一套Skills库干掉30%手工测试,老板已经在问了
  • 系统分析师刷题系列--数据库系统(四)
  • Z-Image-LM权重验证效果展示:LM系列在跨域prompt(中西建筑融合)下表现
  • 2025届最火的五大AI科研方案实测分析
  • 解锁论文新境界:书匠策AI,毕业论文的“智能魔法棒”
  • ProseMirror View 插件生态系统分析:常用插件及其实现原理
  • Linux随记(三十)
  • Windows内核级硬件标识伪装技术实现与隐私保护应用
  • 基于Simulink的储能变流器(PCS)并网预同步与离/并网无缝切换控制​
  • 从零构建智能网页索引系统:内容提取、语义分块与向量检索实战
  • 04-图——从BFS、DFS到拓扑排序
  • Python:Netmiko实现网络设备巡检及配置备份
  • 大厂AI布局启示录:小白也能抓住高薪机遇,一起学大模型!
  • Windows 11/Win10本地磁盘告急?试试用SSHFS把云服务器挂成“无限外挂硬盘”
  • slidev-agent-skill:为AI智能体赋能,自动化创建Slidev演示文稿