1-Java SE基础

Java SE基础知识总结

背景知识

3种技术架构

  • Java SE:Java Platform Standard Edition(标准版),完成桌面应用程序的开发,是其它两者的基础
  • Java ME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序;
  • Java EE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;

Java跨平台工作原理

Java代码分为编译和运行两个步骤,编译产生的 .class 字节码文件(结构中立的中间文件格式),可以通过不同平台的JVM虚拟机解释为对应平台的机器语言,从而运行。

跨平台运行的关键是JVM:跨平台的是程序,不是JVM,不同的平台有对应不同的JVM

JDK

Java Development ToolKit 的简称,也就是 Java 开发工具包。

JDK 是整个 Java 的核心,包括 Java 运行环境(Java Runtime Envirnment,简称 JRE),Java 工具(比如 javac、java、javap 等等),以及 Java 基础类库(比如 rt.jar)

JVM

Java虚拟机(Java Virtual Machine,JVM)是Java平台的核心组成部分之一,它是一个在计算机上运行Java字节码的虚拟机。JVM充当了Java应用程序和底层操作系统之间的中间层,提供了跨平台的特性,使得Java程序可以在不同的操作系统和硬件上运行

相互关系

image-20231006191245352

Java发展

image-20231006191511097

Java项目结构

  • Project:项目、工程
  • module:模块
  • package:包
  • class:类

Java基础语法

注释

// 单行注释/*多行注释
*//**文档注释
*/

关键字

image-20231006192255633

字面量、变量、常量

int a = 10; //a为变量,10为字面量
final int b = 10;  //b为常量,10为字面量
static str = "Hello World";  //str为变量,Hello World为字面量

字面量:由字母、数字等构成的字符串或者数值,只能在等号右边出现

变量:定义的在特定范围内变化的符号。必须被初始化,可以不被赋初始值

常量:被final修饰的变量。必须赋初值,且其类型和值不能再改变

标识符

合理的Java命名

命名规范

  • 小驼峰命名,常给变量命名:name、firstName
  • 大驼峰命名,常给类命名:Student、GoodStudent

数据类型

基本数据类型

关键字数据类型内存占用大小(字节)补充
byte整数1
short整数2
int整数4整数默认类型
long整数8
float浮点数4
double浮点数8浮点数默认类型
char字符2在程序中用单引号表示(String,在程序中是双引号表示)
boolean布尔1

ASCLL码表

程序中字节字符之间的映射关系

Java中字符可以直接进行大小比较,本质是转为其对应的字节值大小进行比较

引用数据类型

类、接口、数组

运算符

  • 运算符:对字面量或者变量进行操作的符号

  • 表达式:用运算符把字面量或者变量连接起来符合java语法的式子就可以称为表达式

int a = 10;
int b = 20;
int c = a + b;/*+:是运算符,并且是算术运算符a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式
*/

算数运算符

符号意义
+
-
*
/
%取余

!同类别算数运算符,从左到右依次参与运算

public class Test {public static void main(String[] args) {System.out.println(1 + 23);        			// 24System.out.println("年龄为:" + 23);		// 年龄为:23System.out.println(1 + 99 + "年黑马");		// 100年黑马System.out.println("练习时长" + 1 + 1.5 + '年');		// 练习时长11.5年(当碰到字符串后,+就变成了字符串连接符,而不是算数运算符)System.out.println("练习时长" + (1 + 1.5) + '年');		// 练习时长2.5年}
}

自增自减运算符

  • 单独使用,在变量前边或后边均不影响结果
  • 组合使用:在后,先拿变量值参与运算,再进行变量增减操作;在前,先进行变量增减运算,再拿变量的值参与运算
public class Test {public static void main(String[] args) {int a = 10;a++		// a=11++a		// a=12int b;b = ++a;		// a=13, b=13a++;			// a=14b = a++;		// a=15,b=14}
}// --运算符同理

类型转换

隐形转换

1、【基本隐式转换】取值范围小的数值或者变量,赋值给取值范围大的变量

public class Test {public static void main(String[] args) {int a = 10;double b = a;  // b=10.0}
}

2、【运算隐式转换】取值范围小的数据和取值范围大的数据进行运算,小的提升为大的,再运算

public class Test {public static void main(String[] args) {int a = 10;double b = 12.3;double c = a + b;}
}

3、【运算隐式转换】byte、short、char,三者运算时,会先提升为int,再进行运算

public class Test {public static void main(String[] args) {int a = 1;char b = 'a';int c = a + b;System.out.println(c);	// c=98}
}

强制转换

1、把一个取值范围大的数值或者变量,赋值给另一个取值范围小的变量,不允许直接赋值,需要强制转换

public class Test {public static void main(String[] args) {double b = 12.3;int a = (int) b;  // a=12}
}

赋值运算符

符号意义
=赋值
+=相加后赋值
-=相减后赋值
*=相乘后赋值
/=相除后赋值
%=相取余后赋值

!隐含着强制类型转换

关系运算符

符号意义
==
!=
>
>=
<
<=

!处理结果都是boolean数据类型,结果是true或false

逻辑运算符

符号意义补充
&有false就是false
&&有false就是false,且不进行后续关系运算的计算常用
|有true就是true
||有true就是true,且不进行后续关系运算的计算常用
true即false,false即true常用
^相同为false,不同为true

三元运算符

public class test {public static void main(String[] args) {int a = 2;int v = a == 1 ? 1 : 10;System.out.println(v);  // v=10}
}

运算符优先级

image-20231006202712315

方法(函数)

  • 方法定义和调用
  • 方法调用内存的图解

方法重载

同一个类中,方法名相同,参数不同的方法

  • 参数不同:个数不同、类型不同、顺序不同

流程控制语句

顺序结构

默认

分支结构

if、switch

循环结构

for、while、do…while

跳转控制语句

break、continue

数组

一种容器,可以存储同种数据类型的多个值

一维数组

定义

public class Demo1Array {public static void main(String[] args) {int[] array1;int array2[];System.out.println(array1);System.out.println(array2);        }
}

静态初始化

// 完整格式:数据类型[] 数组名 = new 数据类型[] { 元素1,元素2,元素3… };
int[] array = new int[]{ 112233 };// 简化格式:数据类型[] 数组名 = { 元素1,元素2,元素3… };
int[] array = { 112233 };

动态初始化

int[] arr  = new int[3];
  • 动态初始化:手动指定数组长度,由系统给出默认初始化值
  • 静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度

默认值

类型初始化默认值补充
整数数组int[] arr = new int[5];0基本数据类型
小数数组double[] arr = new double[5];0.0基本数据类型
字符数组char[] arr = new char[5];‘\u0000’(空白字符)基本数据类型
布尔数组boolean[] arr = new boolean[5];false基本数据类型
(类、接口、数组)数组String[] arr = new String[5]; Array[] arr = new Array[1];null引用数据类型

二维数组

静态初始化

// 完整格式:数据类型[][] 数组名 = new 数据类型[][] {{元素1,元素2},{元素1, 元素2}};
int[][] arr = new int[][]{{11,22},{33,44}};// 简化格式:数据类型[][] 数组名 = {{元素1,元素2}, {元素1, 元素2}};
int[][] arr = {{11,22},{33,44}};

动态初始化

int[][] arr = new int[2][3];
  • 动态初始化:手动指定数组长度,由系统给出默认初始化值
  • 静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度

面向对象

基本

类和对象的概念

1、概念

  • Java 中想要创建对象,必须先要有类的存在
  • 类指的是一组相关属性和行为的集合(我们将其理解为是一张对象的设计图)

2、相互关系

  • 根据类创建对象
  • 1个类可以创建n个对象

3、类的组成

  • 属性:成员变量
  • 方法:成员方法

成员变量和局部变量

image-20231007101254431

this关键字

  • 当局部变量和成员变量出现了重名的情况,java采用就近原则,即使用局部变量
  • 通过this,可以让其使用成员变量【相当于python中的self】
  • this:代表当前类对象的引用(地址)

构造方法

1、概念

  • 构建、创造对象的时候,所调用的方法
  • 在执行的时候,用来给对象中的属性进行初始化

2、格式

public class Student {String name;int age;// 无参构造public Student() {}// 带参构造public Student(String name, int age) {this.name = name;this.age = age;}
}
  • 方法名与类名一样
  • 没有返回值类型,void也没有
  • 没有具体返回值,return也没有

3、执行时机

  • 创建对象的时候调用,每创建一次,执行一次构造方法
  • 不能手动调用构造方法

4、特点

  • 系统默认提供无参构造
  • 人工定义了构造方法,系统就不提供无参构造了,需要连带定义出无参构造
  • 构造方法支持重载

封装

使用类设计对象时,将需要处理的数据以及处理这些数据的方法,设计到对象中

封装要素

合理隐藏、合理暴露

权限修饰符

public、protected、private

image-20231006214620686

字符串

String类

特点

  • 在Java中,双引号字符串,都是String类
  • 字符串创建之后,内容不可更改,但是可以共享

字符串常量池

  • 字符串的分配,同其他对象一样,极其耗时。作为最基础的数据类型,大量创建影响性能
  • 为了提供性能和减少内存开销,引入字符串常量池(jdk7以前,在方法区;jdk7以后,在堆内存)
  • 创建字符串时,看看常量池中有没有该实例。无,创建;有,引用(可被共享的原因)

实例

public class Demo1Array {public static void main(String[] args) {String s1 = "abc";				// 常量池内没有,创建String s2 = "abc";				// 常量池内有,引用System.out.println(s1 == s2);  // 两者是一个东西,trueString s1 = "abc";				// 常量池内没有,创建String s2 = new String("abc");	// 在堆内存中开辟System.out.println(s1 == s2);  // 两者不是一个东西,falseString s1 = "abc";				// 常量池内没有abc,创建String s2 = "ab";				// 常量池内没有ab,创建String s3 = s2 + "c";			// 常量池内没有c,创建,StringBuilder内完成相加操作,并在堆内存开辟新的空间存储abcSystem.out.println(s1 == s3);  // 两者不是一个东西,falseString s1 = "abc";				// 常量池内没有,创建String s2 = "a" + "b" + "c";	// 常量优化机制,等同于abc。常量池内有,引用System.out.println(s1 == s2);	// 两者是一个东西,true}
}
  • 字符串内容比较(不忽略大小写):strs1.equals(strs2)
  • 字符串内容比较(忽略大小写):strs1.equalsIgnoreCase(strs2)

基本操作

遍历、截取、替换、切割

StringBuilder类

  • 提高字符串操作效率:StringBuilder的拼接速度比单纯的字符串运算拼接速度快上一个量级
  • 本质是字符串的缓冲区,可以理解为一个容器,其内存储的内容长度可变

构造方法

StringBuilder()		// 无参构造,创建空的字符串缓冲区StringBuilder(String str)	// 有参构造,创建一个字符串缓冲区,按照给定的参数完成初始化

基本操作

添加、反转、长度、转为字符串

集合基础

是一种容器,用来装数据,类似数组,但长度可变

ArrayList长度可变原理

  • 当创建的时候,底层存在一个长度为10的空数组
  • 添加元素,当容量不够的时候,扩容到原先的1.5倍
  • 将原数组数据拷贝到新数组中
  • 将新元素添加到新的数组中

基本操作

增、删、改、查、获取大小

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

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

相关文章

Vue中如何进行分布式任务调度与定时任务管理

在Vue中进行分布式任务调度与定时任务管理 分布式任务调度和定时任务管理是许多应用程序中的关键功能之一。它们用于执行周期性的、异步的、重复的任务&#xff0c;例如数据备份、邮件发送、定时报告生成等。在Vue.js应用中&#xff0c;我们可以结合后端服务实现分布式任务调度…

关于氮化镓的干蚀刻综述

引言 GaN及相关合金可用于制造蓝色/绿色/紫外线发射器以及高温、高功率电子器件。由于 III 族氮化物的湿法化学蚀刻结果有限&#xff0c;因此人们投入了大量精力来开发干法蚀刻工艺。干法蚀刻开发一开始集中于台面结构&#xff0c;其中需要高蚀刻速率、各向异性轮廓、光滑侧壁…

记一次 .NET某账本软件 非托管泄露分析

一&#xff1a;背景 1. 讲故事 中秋国庆长假结束&#xff0c;哈哈&#xff0c;在老家拍了很多的短视频&#xff0c;有兴趣的可以上B站观看&#xff1a;https://space.bilibili.com/409524162 &#xff0c;今天继续给大家分享各种奇奇怪怪的.NET生产事故&#xff0c;希望能帮助…

Java基础(二)

1. 面向对象基础 1.1 面向对象和面向过程的区别 面向过程把解决问题的过程拆成一个个方法&#xff0c;通过一个个方法的执行解决问题。面向对象会先抽象出对象&#xff0c;然后用对象执行方法的方式解决问题。 面向对象开发的方式更容易维护和迭代升级、易复用、易扩展。 1…

3D孪生场景搭建:参数化模型

1、什么是参数化模型 参数化模型是指通过一组参数来定义其形状和特征的数学模型或几何模型。这些参数可以用于控制模型的大小、形状、比例、位置、旋转、曲率等属性&#xff0c;从而实现对模型进行灵活的调整和变形。 在计算机图形学和三维建模领域&#xff0c;常见的参数化模…

Docker 镜像的缓存特性

Author&#xff1a;rab 目录 前言一、构建缓存二、Pull 缓存总结 前言 首先我们要清楚&#xff0c;Docker 的镜像结构是分层的&#xff0c;镜像本身是只读的&#xff08;不管任何一层&#xff09;&#xff0c;当我们基于某镜像运行一个容器时&#xff0c;会有一个新的可写层被…

Springboot 音乐网站管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 音乐网站管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统 具有完整的源代码和数据库&…

让丢失成为过去,尽在我们的智能防丢器

我们都知道&#xff0c;生活中总会遇到一些小烦恼&#xff0c;比如钥匙不见了&#xff0c;钱包忘在哪里&#xff0c;甚至手机掉在了不知名的地方&#xff0c;这些看似小事&#xff0c;却足以打乱我们的日程。那么&#xff0c;有没有一种方法&#xff0c;可以让这些烦恼一扫而空…

一座“城池”:泡泡玛特主题乐园背后,IP梦想照亮现实

“更适合中国宝宝体质”的主题乐园&#xff0c;被泡泡玛特造出来了。 9月26日&#xff0c;位于北京朝阳公园内的国内首个潮玩行业沉浸式 IP 主题乐园&#xff0c;也是泡泡玛特首个线下乐园——泡泡玛特城市乐园 POP LAND正式开园。 约4万平方米的空间中&#xff0c;泡泡玛特使…

Javascript - 轮播图

轮播图也称banner图、广告图、焦点图、滑片。是指在一个模块或者窗口,通过鼠标点击或手指滑动后,可以看到多张图片。这些图片统称为轮播图,这个模块叫做轮播模块。可以通过运用 javascript去实现定时自动转换图片。以下通过一个小Demo演示如何运用Javascript实现。 <!DOCTYP…

winform中DevExpress控件一些属性

1.DevExpress控件bar去掉前面四点和后面的倒三角。 如图。设置bar属性optionsBar→allowQuickCustomizationFALSE

练[WUSTCTF2020]朴实无华

[WUSTCTF2020]朴实无华 文章目录 [WUSTCTF2020]朴实无华掌握知识解题思路代码分析 关键paylaod 掌握知识 ​ 目录扫描&#xff0c;抓包放包&#xff0c;代码审计&#xff0c;php函数特性的了解&#xff1a;intval函数&#xff0c;md5特性绕过&#xff0c;RCE一些bypass方法 解…

测试老鸟总结,Jmeter接口测试实例-签名接口,一文彻底打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、签名规则 1&a…

3分钟带你认识腾讯云服务器CVM_一看就懂

腾讯云服务器CVM提供安全可靠的弹性计算服务&#xff0c;腾讯云明星级云服务器&#xff0c;弹性计算实时扩展或缩减计算资源&#xff0c;支持包年包月、按量计费和竞价实例计费模式&#xff0c;CVM提供多种CPU、内存、硬盘和带宽可以灵活调整的实例规格&#xff0c;提供9个9的数…

多个excel合并

目的&#xff1a;将同一个文件下的多个 “京东差评.xlsx” 合并为一个&#xff1a;“京东汇总.xlsx" 代码如下&#xff1a; # -*- coding: utf-8 -*- """ Created on Wed Oct 4 12:52:32 2023author: 64884 """import pandas as pd impor…

开发工具:推荐几款非常漂亮的VScode主题

目录 Atom One Dark Theme Github Theme Night Owl Theme Night Owl JellyFish Theme Sublime Material Theme 深色 浅色 今天给大家推荐几款非常漂亮的VScode主题&#xff0c;值得收藏&#xff01; Atom One Dark Theme 它是市场上最好的深色主题之一。Atom 标志性的…

前端笔试题总结,带答案和解析(二)

前端笔试题总结&#xff0c;带答案和解析&#xff08;二&#xff09; 这个系列将持续更新前端笔试题一期十题&#xff0c;每五题做一个标题&#xff08;方便跳转&#xff09;&#xff0c;您可以一期一期阅读&#xff0c;也可以在点击汇总&#xff0c;一口气看完&#xff0c;如果…

C/C++学习 -- SHA-256算法

SHA-256算法概述 SHA-256代表"Secure Hash Algorithm 256-bit"&#xff0c;是一种安全的哈希算法&#xff0c;输出固定长度的256位&#xff08;32字节&#xff09;哈希值。SHA-256被广泛用于加密、数字签名、密码学以及区块链等领域&#xff0c;因为它提供了高度的安…

详解Python的装饰器(多层语法糖、装饰器和装饰器修复技术及递归函数)

python中的装饰器(decorator)一般采用语法糖的形式&#xff0c;是一种语法格式。比如&#xff1a;classmethod&#xff0c;staticmethod&#xff0c;property&#xff0c;xxx.setter&#xff0c;wraps()&#xff0c;func_name等都是python中的装饰器。 装饰器&#xff0c;装饰的…

pytorch_神经网络构建2(数学原理)

文章目录 深层神经网络多分类深层网络反向传播算法优化算法动量算法Adam 算法 深层神经网络 分类基础理论: 交叉熵是信息论中用来衡量两个分布相似性的一种量化方式 之前讲述二分类的loss函数时我们使用公式-(y*log(y_)(1-y)*log(1-y_)进行概率计算 y表示真实值,y_表示预测值 …