Java SE 入门到精通—基础语法【Java】

敲重点! 本篇讲述了比较重要的基础,是必须要掌握的

1.程序入口

在Java中,main方法是程序的入口点,是JVM(Java虚拟机)执行Java应用程序的起始点

main方法的方法签名必须遵循下面规范:

public static void main(String[] args){...}
  • public: main方法必须是public,以便JVM能够调用它。
  • static: main方法必须是静态的,因为在调用时不会创建类的实例,而是通过类名直接调用。
  • void: main方法不返回任何值,其返回类型必须是void
  • String[] args: main方法的参数是一个字符串数组,用于接收命令行输入的参数。

当Java应用程序运行时,JVM会先加载应用程序的主类(包含main方法的类)再执行main方法。

2.输入输出

3.标识符与变量

标识符

所谓标识符就是变量、方法,类,接口等对象的名字,标识符的命名规则必须以下换线(_),$或者英文字母开头,并且不能使用关键字和保留字。

一般变量命名遵守小驼峰命名法大驼峰命名法

小驼峰命名法命名变量和方法名时,例如$userName,age,myFunction(),getResult(),除第一个单词其他单词首字母大写。

大驼峰命名法命名变量和方法名时,例如$UserName,Age,MyFunction(),GetResult(),所有单词首字符大写。

变量与常量

基本概念

变量与常量是指内存中的一个存储区域的引用,变量其值可以改变,而常量不可变。

基本数据类型变量名和值都存储在栈中,引用类型的变量名/对象引用 (内存地址)存储在栈中,变量值(实例)存储在堆中

变量

变量初始化(赋值) 有两种方式,分布是静态初始化和动态初始化。

静态初始化

声明并分配内存空间。

int a=1;
动态初始化

先声明变量,后面使用再赋值。

int a;
a=1

常量

常量值一旦赋值不可被修改,已经被确定,变量前加关键字:final 。

final int  a=1;

还有final 方法:最终方法,final 类:最终类,不可被继承

4.关键字与保留字

关键字被Java语言赋予了特殊含义,用做专门用途的字符串,不可被使用,如class ,interface ,enum ,byte ,short,void等等

保留字是指现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字,如goto 、const等

5.数据类型

数据类型分类

Java中的数据类型分为 基本数据类型引用数据类型

来源于网络

基本数据类型

  • 整型:shortintlong
  • 浮点:floatdouble
  • 字节:byte
  • 字符:char
  • 布尔:boolean

注意:

  • float 精度为8位有效数字,超出部分四舍五入,需带 f/F 后缀表示。
  • double 精度为17位有效数字。

引用数据类型

  • 接口
  • 数组
  • 字符串

数组

一维数组

声明格式:数组类型[] 数组名={…} 或者 数组类型 数组名[]= {…}

数组初始化
动态初始化

通过new关键字分配内存空间,使用时再赋值,若未赋值则默认值为0

int[] list=new int(a) //申请a位空间数(整数)
int[] list=new int(5) //申请了5个元素空间
list[0]=1;
list[1]=8;
system.out.print(list[0],list[1])
>>>1,8
静态初始化

用花括号声明的同时并赋值

int[] list={1,2,3,4,5}
system.out.print(list[0])
>>>1

创建二维数组

声明格式:数组类型[][] 数组名={…} 或者 数组类型 数组名[][]= {…}

规则二维数组

子数组元素个数相同

静态初始化
int[][] list={{1},{2},{3},{4},{5}}
动态初始化
int[][] list=[5][1]
不规则二维数组

子数组元素个数不相同

静态初始化
int[][] list={{1},{23},{4,56}}
动态初始化
int[][] list=[3][]
list[0]=new int[1]   为第1个子数组分配1个空间
list[1]=new int[2]   为第2个子数组分配2个空间
list[2]=new int[3]   为第3个子数组分配3个空间

字符串

字符串底层为final修饰私有的字符数组,String类在long包中,无需导入

创建字符串对象

无参构造直接赋值即可,如String str=‘abc’;

带参构造
public String(char[] a/byte[] a)                
//byte  97,98,99---->a,b,c    字节对应相关字符
//char{'a','b','c'}---->abc    将字符输出为字符串(拼接)

字符数组和字节数组作为参数创建字符串对象,可以指定字节字符区间以及字符集,带参构造字符串通常用于io流数据类型转换

字符串相关操作和方法

字符串拼接

通常用StringBuilder,效率更高

str=str1+str2 产生一个新的字符串(和可变字符串相比会产生新对象,耗时,浪费空间)

字符串的比较

使用“==”做比较时

  • 基本类型:比较值是否相等
  • 引用类型:比较引用地址是否相同

构造方法创建的字符串对象不同对象不同地址
直接赋值相同内容的字符串对象共用一个地址(存储在常量池,已存在则直接引用)

        String s1="A";String s2="A";String s3=new String("A");String s4=new String("A");System.out.println(s1==s2);//trueSystem.out.println(s3==s4);//falseSystem.out.println(s1==s4);//false
引用类型比较值

引用类型判断值是否相等时,使用equals()方法

//方法1
str1.equals(str2)
//方法2
Objects.equals(str1, str2)

注意:

a.equals(b), 当a是null, 会抛出NullPointException空指针异常,因为null对象无equals方法。
使用Objects.equals(a, b)比较时不会抛出空指针异常

返回字符串元素个数
//xxx.length()
System.out.println("abc".length()); //3
修改字符串值

字符串对象不可变,若修改产生新对象,可以覆盖引用或者申请新地址,调用replace替换,字for循环替换等等

//覆盖原引用地址内容,使常量池中b值的引用指向a
String a="1"
String b="0"
a=b;
//a-->0 , b-->0
提取子串(切片)
//按索引截取指定子串
//若省略endIndex则从起始位置取到最后一个
//若startIndex=endIndex,则返回空串
str.substrng(startIndex[,endIndex]) (不计endIndex,开区间)
遍历字符串
 //取字符串索引i的元素
str="abc"
for (....){str.charAt(0)   
}
String a="123456";
for (int i=0;i<a.length();i++){System.out.println(a.charAt(i));
}

Stringbuilder

Stringbuilder是可变字符串,其值修改,地址不变(修改后还是原对象,不会在常量池中创建新对象),相同的还有StringBuffered(线程安全类)

创建可变字符串对象
构造方法创建
//无参
Stringbuilder str=new Stringbuilder()//带参
Stringbuilder str=new Stringbuilder(string)  //String转StringBuilder(还支持其他类型参数) 
可变字符串的相关操作和方法
拼接
append方法
//其返回原对象(可使用链式编程)
StringBuilder str=new StringBuilder()
str.append(str1)
逆置(序列反转)
reverse方法
StringBuilder str=new StringBuilder(str1)
str.reverse(str)
//abc-->cba

数据类型转换

自动类型转换

自动类型转换又为隐式转换,Java内部自动完成。

基本类型由低级到高级分别为(byte,short,char)->int->long->float->double

自动类型转换是从低到高的,所以当int+float的结果还是float

        int a=1;float b=1.5f;float result = a + b;

强制类型转换

强制类型转换是手动进行,将高级类型转换为低级类型,可能丢失精度

double d = 3.14;
int i = (int) d; // 强制转换为整数,丢失小数部分,i的值为3long l = 1000000000L;
int i = (int) l; // 强制转换为整数,可能会导致数据溢出char c = 'A';
int i = (int) c; // 强制类型转换为整数,i的值为65,即字符'A'对应的ASCII码值

字符串数组转换整型数组

通过遍历将每个元素转换成int型,long包中的Intege.parseInt(str)方法

字符数组转换整型数组

getNumericValue方法将字符转换为整型

    char[] chars = "abc".toCharArray();int[] ints = new int[chars.length];for (int i = 0; i < chars.length; i++) {int numericValue = Character.getNumericValue(chars[i]);ints[i] = numericValue;}System.out.println(Arrays.toString(ints)); //[10, 11, 12]

string和stringBuilder类型转换

//string->stringBuilder 直接在创建stringBuilder对象时传参
//tringBuilder->string 调用tooString方法
StringBuilder str=new StringBuilder(astr);
String fstr=str.toString(); //此时fstr为string类型

字符串转字符数组

//字符串->字符数组
"abc".toCharArray(); //["a","b","c"]

int转string

//int -> string
Integer.parseInt(str)
//string -> int
string.valueOF(i)

装箱与拆箱

装箱(Boxing)和拆箱(Unboxing)是指基本数据类型和对应的包装类(引用类型)之间的转换。

手动

通过传参进行转换

       int a=10;
//    手动装箱  基本类型---->包装类Integer b=new Integer(a);//    手动拆箱  包装类---->基本数据类型int c= b.intValue();
自动

java内部会自动实现拆箱操作,将包装类型转换为基本类型。

//    自动装箱  基本类型---->包装类  直接将值赋给对应的包装/基本类int a=10;Integer b=a;
//    自动拆箱  包装类---->基本数据类型int c= b;

6.运算符

算术运算符

算术运算符用于执行基本的数学运算,包括加法、减法、乘法、除法、取余以及自增自减操作。

  • 加法(+):将两个数相加。
  • 减法(-):将右操作数从左操作数中减去。
  • 乘法(*):将两个数相乘。
  • 除法(/):将左操作数除以右操作数。
  • 取余(%):返回左操作数除以右操作数的余数。
  • 自增(++):将操作数的值增加1。
  • 自减(–):将操作数的值减少1。

除法运算符在处理不同数据类型时会产生不同的结果:

System.out.println(4 / 3);    // 输出:1
System.out.println(4 / 3.0);  // double 输出:1.3333333333333333
System.out.println(4 / 3f);   // float  输出:1.3333334

根据向上转型返回不同数据类型。

i++和++i

  • i++:先返回 i 的值,然后将 i 的值加1。
  • ++i:先将 i 的值加1,然后返回 i 的值。
int i = 5;
System.out.println(i++);  // 输出:5,i先返回自增前的值
System.out.println(++i);  // 输出:7,i先自增后返回自增后的值

逻辑运算符

逻辑运算符用于执行逻辑操作,常用的有与、或、非。

  • 与(&&):当且仅当两个操作数都为true时,结果为true。
  • 或(||):当两个操作数中至少有一个为true时,结果为true。
  • 非(!):用于反转操作数的逻辑状态。

逻辑运算符可能会出现短路现象,即在逻辑运算过程中,如果根据左操作数已经可以确定整个表达式的结果,则右操作数将不再计算。例如:

boolean a = false;
boolean b = true;
boolean c = true;if (a && b || c) {// 如果a为false,则不会计算b
}

关系运算符

关系运算符用于比较两个值之间的关系,返回一个布尔值。

  • 小于(<)
  • 大于(>)
  • 小于等于(<=)
  • 大于等于(>=)
  • 等于(==)
  • 不等于(!=)

移位运算符

移位运算符用于对二进制位进行移动操作。

  • 左移(<<):将操作数的所有位向左移动指定数量的位。
  • 右移(>>):将操作数的所有位向右移动指定数量的位,右移时,左边用符号位填充。
  • 无符号右移(>>>):将操作数的所有位向右移动指定数量的位,右移时,左边用0填充。

位运算符

位运算符用于对操作数的位进行操作。

  • 与(&):对两个操作数的每个位执行逻辑与操作。
  • 或(|):对两个操作数的每个位执行逻辑或操作。
  • 异或(^):对两个操作数的每个位执行逻辑异或操作(相同为0,不同为1)。
  • 非(~):对操作数的每个位执行逻辑非操作(0变为1,1变为0)。

三元运算符

三元运算符也称为条件运算符,用于根据表达式的结果选择执行不同的操作。

语法:表达式1 ? 表达式2 : 表达式3;

int value = (a == 0) ? 1 : (b + c);

如果表达式a等于0,则将1赋值给value,否则将b+c的结果赋值给value。

复合运算符

复合运算符是一种组合了赋值运算符和算术运算符的运算符,用于简化代码。

例如,+=-=*=/=等等。

7.流程控制

分支结构

分支结构用于根据条件选择不同的执行路径。

单分支:if

if (条件) {// 如果条件为真,执行这里的代码块
}

双分支:if… else

if (条件) {// 如果条件为真,执行这里的代码块
} else {// 如果条件为假,执行这里的代码块
}

多分支 if…else if… else

if (条件1) {// 如果条件1为真,执行这里的代码块
} else if (条件2) {// 如果条件2为真,执行这里的代码块
} else if (条件3) {// 如果条件3为真,执行这里的代码块
} else {// 如果以上条件都不满足,执行这里的代码块
}

Switch语句

Switch语句用于根据表达式的值选择执行不同的分支。

switch (表达式/) {case1/入口1:// 执行语句1break; // 终止当前分支的执行case2/入口2:// 执行语句2break;case3/入口3:// 执行语句3break;default:// 如果以上入口都不匹配,执行这里的语句break;
}

如果不使用break关键字,将会继续执行下一个分支。如果没有匹配的分支,将执行default分支(可选)。

循环结构

循环结构用于重复执行一段代码。

for循环

for (初始化表达式; 判断表达式; 增减表达式) {// 循环体,当判断表达式为true时执行
}

增强for循环(foreach)

for (循环变量 : 数组/集合) {// 对数组/集合中的每个元素执行相同的操作
}

while循环

while (判断表达式) {// 循环体,当判断表达式为true时执行
}

do…while循环

do {// 循环体,至少会执行一次
} while (判断表达式);

do...while循环先执行一次循环体,然后再判断条件是否满足。

8.代码块的分类

在Java中,代码块可以根据其位置和作用进行分类,包括局部代码块、构造代码块和静态代码块。

位置作用
局部代码块在方法当中使用,作用是控制变量的生命周期。 局部代码块的变量,只能在代码块内部使用,在执行结束后会被Java回收//相当于Python中函数或类中方法
构造代码块在类的成员位置使用。 在每次执行构造方法前先执行构造代码块, 可以将多个构造方法中的相同的代码放到构造代码块中,对对象进行初始化.//相当于Python类——init——构造函数,初始化对象
静态代码块在类的成员位置,代码块前添加static修饰符。一般用于给类初始化,被静态修饰的代码块仅执行一次.静态代码块是主动执行的代码块,在JVM加载类时就会执行,且最高优先权限执行 static{…}

局部代码块

局部代码块通常位于方法内部,用于控制变量的生命周期。在局部代码块中定义的变量只能在代码块内部使用,并且在代码块执行结束后会被Java回收。局部代码块的作用类似于Python中函数或类中的方法。

public void exampleMethod() {{// 这是一个局部代码块int x = 10;System.out.println("在局部代码块中:" + x);}// 这里无法访问局部代码块中定义的变量 x
}

构造代码块

构造代码块位于类的成员位置,每次执行构造方法之前都会先执行构造代码块。构造代码块可以将多个构造方法中相同的代码放到一起,对对象进行初始化。构造代码块类似于Python中的类__init__构造函数。

public class Example {{// 这是一个构造代码块System.out.println("执行构造代码块");}public Example() {// 构造方法System.out.println("执行构造方法");}
}

静态代码块

静态代码块也位于类的成员位置,但在代码块前需要添加static修饰符。静态代码块用于给类初始化,它仅在类加载时执行一次。静态代码块是被动执行的,在JVM加载类时就会执行,并且具有最高优先级。

public class Example {static {// 这是一个静态代码块System.out.println("执行静态代码块");}public static void main(String[] args) {System.out.println("执行main方法");}
}

在上面的示例中,静态代码块会在main方法执行之前先执行,并且只会执行一次。

好了,到这里,你已经掌握了java中最基础重要的内容了,动动你们的小手,一键三连,让我们进入下一篇!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/261553.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js 多对象去重(多属性去重)

需求中发现后端可能没有处理重复数据&#xff0c;这个时候前段可以直接解决。 在 JavaScript 中&#xff0c;可以使用 Set 数据结构来进行多对象的去重。Set 是 ES6 新引入的集合类型&#xff0c;其特点是元素不会重复且无序。 下面是一个示例代码&#xff0c;展示如何通过 S…

js设计模式:计算属性模式

作用: 将对象中的某些值与其他值进行关联,根据其他值来计算该值的结果 vue中的计算属性就是很经典的例子 示例: let nowDate 2023const wjtInfo {brithDate:1995,get age(){return nowDate-this.brithDate}}console.log(wjtInfo.age,wjt年龄)nowDate 1console.log(wjtInf…

stm32——hal库学习笔记(DAC)

这里写目录标题 一、DAC简介&#xff08;了解&#xff09;1.1&#xff0c;什么是DAC&#xff1f;1.2&#xff0c;DAC的特性参数1.3&#xff0c;STM32各系列DAC的主要特性 二、DAC工作原理&#xff08;掌握&#xff09;2.1&#xff0c;DAC框图简介&#xff08;F1&#xff09;2.2…

OJ链接——打印从1到最大的n位数

目录 1. 题目描述2. 示例3. 分析思路4. 完整代码 1. 题目描述 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 用返回一个整数列表来代替打印n 为正整数&#xff0c;0 < n < 5 链接在…

服务老是被攻击?

什么防重放攻击&#xff0c;请求体篡改&#xff0c;越权攻击&#xff0c;都整上来了&#xff0c;好嘛&#xff0c;我都不清楚这个项目这半年是怎么度过的。 不知道大家公司对接口安全这块是怎么考量的&#xff0c;但是对于面向公网提供服务的产品来说&#xff0c;这个可以说是很…

贝叶斯统计——入门级笔记

绪论 1.1 引言 全概率公式 贝叶斯公式 三种信息 总体信息 当把样本视为随机变量时&#xff0c;它有概率分布&#xff0c;称为总体分布&#xff0e; 如果我们已经知道总体的分布形式这就给了我们一种信息&#xff0c;称为总体信息 样本信息 从总体中抽取的样本所提供的信息 先…

Redis之缓存击穿问题解决方案

文章目录 一、书接上文二、介绍三、解决方案1. 单例双检锁2. 缓存预热和定时任务 一、书接上文 Redis之缓存雪崩问题解决方案 二、介绍 缓存击穿就是大量并发访问同一个热点数据&#xff0c;一旦这个热点数据缓存失效&#xff0c;则请求压力都来到数据库。 三、解决方案 1…

【推荐】百万级任务重试框架 Fast-Retry

前言 假设你的系统里有100万个用户&#xff0c;然后你要轮询重试的获取每个用户的身份信息, 如果你还在使用SpringRetry和GuavaRetry 之类的这种单任务的同步重试框架&#xff0c;那你可能到猴年马月也处理不完&#xff0c; 即使加再多的机器和线程也是杯水车薪&#xff0c; 而…

linux 修改开发板网卡eth0的ip地址

win10如何新增电脑ip地址&#xff1a; https://blog.csdn.net/linxinfa/article/details/105817473 ifconfig # 可设置网络设备的状态&#xff0c;或是显示目前的设置。 命令详解&#xff1a;https://www.runoob.com/linux/linux-comm-ifconfig.html 一、临时修改 ifconfig e…

逃离互联网,进入体制内,又觉得做的事没有成就感,重新焦虑起来

原文链接&#xff1a; 逃离互联网&#xff0c;进入体制内&#xff0c;又觉得做的事没有成就感&#xff0c;重新焦虑起来 今日热帖&#xff0c;有网友发帖称&#xff1a;原本以为从互联网出来&#xff0c;逃离了加班&#xff0c;KPI&#xff0c;裁员&#xff0c;就可以不那么焦虑…

推荐提高程序员思维水平的一本重量级书籍

《程序员的思维修炼&#xff1a;开发认知潜能的九堂课》 这是一本提高程序员思维水平的书&#xff0c;但不仅仅限于程序员可以从中获得提高。这本书的适合任何级别的程序员&#xff0c;计算机科学学生&#xff0c;团队领导 &#xff0c;和希望自我提升的跨行业人士。总之&#…

为什么我强烈推荐大学生打CTF!

在我的专栏各大CTF平台WP中&#xff0c;我写了很多wp供大家学习 前言 写这个文章是因为我很多粉丝都是学生&#xff0c;经常有人问&#xff1a; 感觉大一第一个学期忙忙碌碌的过去了&#xff0c;啥都会一点&#xff0c;但是自己很难系统的学习到整个知识体系&#xff0c;很迷…

HTML的特殊字符

HTML的特殊字符 有些特殊的字符在 html 文件中是不能直接表示的&#xff0c;例如: 空格&#xff0c;小于号(<)&#xff0c;大于号(>)&#xff0c;按位与(&)。 空格 示例代码&#xff1a; 运行结果&#xff1a; 由于html 标签就是用 < > 表示的&#xff0…

3.网络游戏逆向分析与漏洞攻防-游戏启动流程漏洞-游戏启动流程的分析

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;项目搭建 首先下图红框里是游戏启动的程序 游戏启动之后的名字&#xff08;fxgame.exe&#xff09; 一般游戏启动的架构&#xff1a; 第一种&#xff1a;登录器程序启动游戏主程序&#xff0c;然后游…

prometheus基于consul的服务发现

文章目录 一、基础二、安装consul下载地址启动consul访问consul 三、编写服务发现文件nodes.json四、prometheus配置consul发现修改prometheus.yml重启Prometheus 参考 一、基础 二、安装consul 下载地址 https://developer.hashicorp.com/consul/install 启动consul mkdi…

小程序端学习

P2 创建Uni-app 分离窗口 一样的Ctrl S P3 细节知识点 创建新的小程序页面

Web基础②nginx搭建与配置

目录 一.Nginx概述 1.定义 2.Nginx模块作用 &#xff08;1&#xff09;main模块 &#xff08;2&#xff09;stream服务模块 &#xff08;3&#xff09;邮件服务模块 &#xff08;4&#xff09;第三方模块 &#xff08;5&#xff09;events模块 &#xff08;6&#xff…

AWS安全组是什么?有什么用?

最近看到小伙伴在问&#xff0c;AWS安全组是什么&#xff1f;有什么用&#xff1f;今天我们大家就来简单聊聊&#xff0c;仅供参考哦&#xff01; AWS安全组是什么&#xff1f;有什么用&#xff1f; 【回答】&#xff1a;AWS安全组是一种虚拟防火墙&#xff0c;用于控制进出…

刷LeetCode541引起的java数组和字符串的转换问题

起因是今天在刷下面这个力扣题时的一个报错 541. 反转字符串 II - 力扣&#xff08;LeetCode&#xff09; 这个题目本身是比较简单的&#xff0c;所以就不讲具体思路了。问题出在最后方法的返回值处&#xff0c;要将字符数组转化为字符串&#xff0c;第一次写的时候也没思考直…

龙腾虎跃---2024广东少儿新春大联欢圆满成功

2024年2月11日大年初二&#xff0c;由广东津虹数字科技有限公司特别赞助&#xff0c;中国电信股份有限公司广州分公司大力支持的《龙腾虎跃——2024广东少儿新春大联欢》在广东少儿频道中午12:30顺利播出并圆满成功&#xff0c;这次春晚在广播电视台1600演播厅录制&#xff0c;…