前端初学java

目录

java术语

JDK

Javac

Java

Jdb

Jhat

JVM

JRE

JAR

JDK下载

运行java文件

字面量

隐式转换

强制转换

注意

运算符

&&、||、&、|

Switch

 程序入口

 String[] args

数组

静态初始化

动态初始化

变量初始化

Java内存

方法

重载

Final

String

StringBuilder

常用方法

StringJoiner

常用方法

字符串拼接底层原理

ArrayList

常用方法


java术语

JDK

Java Development Kit,是Java开发工具包的意思。它包含了Java开发所需要的各种工具和类库,包括JVM、核心类库、开发工具(java、javac、jdb、jhat)。JDK是Java开发的基础,Java开发者需要安装JDK才能进行Java程序的开发和运行

下面是JDK中开发工具

Javac

Java 编译器的命令行工具用于将Java代码编译成Java字节码。它是 JDK的一部分,可以在命令行中使用。使用 "javac" 命令可以Java源代码文件(.java)编译成 Java 字节码文件(.class,以便在 Java 虚拟机(JVM)上运行。

Java

相当于java的虚拟机,通过java Main命令行可以运行通过javac编译好的Main.class文件。

Jdb

调试工具。

Jhat

内存分析工具。

JVM

java Virtual Machine,Java虚拟机用于运行字节码。

JRE

java runtime environment,java运行环境,用于运行编译好后的java文件,包括JVM,核心类库,运行工具等,去掉了运行工具中的编译器等。

JAR

Java Archive是Java平台上的一种压缩文件格式,它可以包含Java类、资源文件和META-INF目录等内容。通常JAR文件被用作Java程序的打包和分发方式,可以方便地将Java程序打包成一个独立的可执行文件。JAR文件也可以作为Java类库被其他Java程序引用。在Java中,使用jar命令可以创建和解压JAR文件。

JDK下载

Java Downloads | Oracle

下载后文件夹

bin:存放各种工具命令(javac编译器和java虚拟机等)

conf:存放了相关配置文件。

Include:存放了一些平台特定的头文件。

Jmods:存放了各种模块。

Legal:存放各种模块的授权文档

Lib:存放工具的一些补充JAR包。

运行java文件

cmd打开命令窗口,先javac Main.java,然后会出现下图的Main.class文件(该文件为javac编译器编译的产物)。

最后通过java Main即可运行Main.class文件,注意不要加.class

字面量

整数(byte、int、short、long)、小数(float、double)、字符串(String)、字符(char)、布尔(boolean)、空类型

  • byte1个字节,范围是-128127
  • short2个字节,范围是-32,76832,767
  • int4个字节,范围是-2,147,483,6482,147,483,647
  • long8个字节,注意需要在定义的数后加一个大写或小写的L,范围是-9,223,372,036,854,775,8089,223,372,036,854,775,807
  • float4个字节,注意需要在定义的数后加一个大写或小写的F,范围是IEEE 754规定的约-3.4028235E383.4028235E38的浮点数。
  • double8个字节,范围是IEEE 754规定的约-1.7976931348623157E3081.7976931348623157E308的浮点数。
  • char2个字节,范围是065,535,表示Unicode字符。
  • boolean1个字节,表示truefalse

隐式转换

Double>float>long>int>short>byte

1.  取值范围小的和取值范围大的进行计算时,小的会先提升为大的,再进行运算。

  1. 2.  Byte short char三种类型的数据再运算的时候,都会直接先提升为int,然后再进行计算(byte和byte的运算结果也是int)。

3.  字符运算会通过ASCII码表查询到对应的数字再进行运算。

System.out.println('a'+0);//97
System.out.println( 'a'+'a');//194

4. 和字符串的运算都会被转化为字符串。

System.out.println( 'a'+"bc");//"abc"

5. 数组容器在存储数据时会向上有隐式转换,例如int类型的数组可以向下存储byte short类型,double类型的数组可以存储所有数字类型(byte、short、int、long、float),存入时都会转化为数组的类型。

强制转换

byte a = 1;
byte b=2;
int c=a+b;
byte c = (byte)(a+b);

注意

  1. 字符串类型只能用双引号,和js不同(不区分单双引号的)不同,字符只能用单引号,且只能有一个,且字符串为对象不是字面变量
  2. 空类型为null,且不能被System.out.println打印。

运算符

&&、||、&、|

&&、||和js一样存在短路,&、|是不存在短路。

Switch

和js不同可以简写成->,省略break语句,且当后面只有一句时,大括号也可以省略

Switch(number){Case 1->{System.out.println(“yes”)}
}
Switch(number){case 1: System.out.println(“yes”);break;
}

 程序入口

public static void mian为程序入口。

public class Main {public static void main(String[] args) {System.out.println(args[0]);//打印"abc"}
}

 String[] args

命令行调用时候传入的参数,跟nodejs中的process.argv差不多。

在Idea中可以通过下图去设置。

 

数组

静态初始化

静态初始化2种方法

int[] arr1 = new int []{1,2,3};
int[] arr2 = {1,2,3};//可以省略new int[]
int[][] arr3 = new int[][]{{1,2},{3}};//二维数组
int[][] arr3 ={{1,2},{3}};//同样可以省略new int[][]
System.out.println(arr1);//[I@4eec7777

上面直接通过println打印arr1会打印数组的地址值而不是1,2,3.

其中

[:表示是一个数组;

I:表示当前数组里面的元素都是Int类型;

@:表示一个间隔符号(固定格式)。

4eec777:才是数组真正的地址值(十六进制)。

动态初始化

String[] arr1 =new String[50];
int[][] arr2 = new int[2][2];
int[][] arr3 = new int[2][] //当不知道二维数组的长度时,可以不用二维数组的后一位赋值,这样通过arr3[0]={1,2};可以动态赋值不同长度的数组。

像上面arr1,arr2会对数组中的内容进行默认初始化,初始化规律见下面变量初始化。

变量初始化

类中的变量和数组动态创建时会进行默认的初始化。

整数类型(byte、short、int、long):默认初始化值0。

小数类型(float、double):默认初始化值0.0。

字符类型(char):默认初始化值’\u0000’空格。

布尔类型(boolean):默认初始化值false。

引用类型(类、接口、数组、String):默认初始化值null。

Java内存

栈:方法运行时使用的内存,比如main方法运行,进入方法栈中执行。

堆:存储对象或者数组,new来创建的,都存储在堆内存。

方法区:存储可以运行的class文件。

本地方法栈 :JVM在使用操作系统功能的时候使用,和我们开发无关。

寄存器:给CPU使用,和我们开发无关的。

方法

程序运行的最小单元

Public static void method(){}
Public static int method(){}

其中void和int为方法的返回值,void为无返回。

方法之间没有顺序,且不能互相嵌套定义。

重载

和js不同,在同一类下,它允许同样的方法名,通过参数的类型、数量、顺序区分不同的方法(不能通过返回值区分)

Final

修饰方法:最终方法,不能被重写。

修饰类:最终类,不能被继承。

修饰变量:常量,只能被赋值一次,申明时必须赋值。和js中的const一样,修饰引用数据类型的时候不能修改的是地址值。

在java中表现为一个文件夹,导入使用import,路径分隔用点

  1. 在同一个包中的类时(同一个文件夹下的类可以不需要导入,js中是需要导入的),不需要导包(同一个文件夹下也不能定义相同的类名)
  2. 使用java.lang包中的类时,不需要导包
  3. 同时使用两个包中的同名类,需要用全类名。

String

java定义好的一个类,定义在java.lang包中,所以使用的时候不需要导包。

String s1="a";
String s2 = new String();//空串
char[] ch = {'a','b','c'};
String s3 = new String(ch) //"abc"
Byte[] ch2 = {97,98,99};
String s4 = new String(ch2) //"abc"

当使用双引号直接赋值时,系统会检查改字符串在串池(StringTable,堆内存中的一部分)中是否存在,存在则复用,不存在则创建新的

用new创建的话,每次都会创建新的空间

单纯比较字符串内容使用equals方法,s1.equals(s2),需要忽略大小写用equalsIgnoreCase。

Scanner sc = new Scanner(System.in);
String str1 = sc.next();

上面通过键盘录入得到的字符串是new构建的。

访问字符串的长度用length方法(不是属性),访问某一位使用charAt,s.charAt(0)为访问s字符串的第一位。

StringBuilder

字符串容器,用于提升字符串的拼接等操作效率(多个字符串相加过程中会生成多个字符串,而使用StringBuilder则可以避免中间过程)。

常用方法

StringBuilder(str);

Append(str):添加内容str,可以链式使用。

Reverse:反转容器中内容。

Length:返回StringBuilder中内容长度。

toString:返回容器中的内容转换为字符串,底层是通过new String返回的最后的结果。

Capacity:返回容器的容量,即上限,但可以无限添加内容,因为不断扩充容量,初始默认容量为16,当添加的内容大于16会扩容(原来的容量*2+2)34,如果扩容后还是不够则将容量扩充到和实际长度相等。

StringBuilder sb = new StringBuilder("ab");
sb.append("cd");
sb.length();//4
sb.reverse();
sb.toString();//"dcba"

StringJoiner

用指定符号拼接成字符串(JDK8+)。

常用方法

StringJoiner(间隔符号)

StringJoiner(间隔符号,开始符号,结束符号)

Add:添加内容。

Length:返回toString后的总长度。

toString:通过间隔符号把add添加的内容拼接为字符串,并且在开始、结束加上指定的符号。底层是通过new String返回的最后的结果。

StringJoiner sj = new StringJoiner(",","[","]");
sj.add(1);
sj.add(2);
sj.toString();//[1,2]

字符串拼接底层原理

String s1 = "a"+"b"+"c";

上述运算都是字符串没有变量参加,触发字符串的优化机制,在编译的时候就已经得到了最终结果“abc”。

String s =s1+s2+s3;

JDK8以前会通过会通过new StringBuilder计算s1+s2,toString后再和s3相加,也是通过StringBuilder。

JDK8之后会评估字符串大小,通过开辟一个数组相同大小的数组,然后通过StringBuilder将所有的append后再toString。

ArrayList

集合,长度会自动扩容,只能存储引用数据类型。打印对象时不是地址值为内容。

ArrayList<String> list1 = new ArrayList<String>();// 后面的String可以省略为new ArrayList<>()
ArrayList list2 = new ArrayList ();//表示所有的类都可以往里面加入

上面的<String>为泛型用于限定集合中存储数据的类型 。

常用方法

Add:添加内容,返回true。

Remove(int index)根据索引删除,返回删除的内容。

Remove(obj)删除obj内容,如果存在obj会删除,返回true,不存在返回false。

Set(int index,obj)修改index索引的内容为obj。

Get(int index)获取index索引的内容。

Size:返回长度。

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

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

相关文章

智警杯数据库学习(1)

CentOS中安装MySQL数据库 检测系统是否自带安装 MySQL 首先检查是否自带mysql rpm -qa | grep mysql 如果有删除 rpm -e mysq 未安装&#xff0c;开始安装 进入software目录&#xff0c;解压安装包mysql5.7.25 cd /root/software tar -xvf mysql-5.7.25-1.el7.x86_64.rp…

【决战欧洲杯巅峰】欧洲杯含金量比世界杯高吗?有走地数据分析软件吗?

关于欧洲杯和世界杯的含金量对比&#xff0c;这是一个相当主观的问题&#xff0c;因为两者的价值和重要性很大程度上取决于个人的喜好和观点。但我可以从一些关键方面来为你提供比较的视角。 首先&#xff0c;从参赛队伍和竞技水平来看&#xff0c;世界杯无疑是全球范围内最具…

[渗透测试学习] SolarLab-HackTheBox

SolarLab-HackTheBox 信息搜集 nmap扫描端口 nmap -sV -v 10.10.11.16扫描结果如下 PORT STATE SERVICE VERSION 80/tcp open http nginx 1.24.0 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows n…

C/S、B/S架构(详解)

一、CS、BS架构定义 CS架构&#xff08;Client-Server Architecture&#xff09;是一种分布式计算模型&#xff0c;其中客户端和服务器之间通过网络进行通信。在这种架构中&#xff0c;客户端负责向服务器发送请求&#xff0c;并接收服务器返回的响应。服务器则负责处理客户端的…

浅谈RC4

一、什么叫RC4&#xff1f;优点和缺点 RC4是对称密码&#xff08;加密解密使用同一个密钥&#xff09;算法中的流密码&#xff08;一个字节一个字节的进行加密&#xff09;加密算法。 优点&#xff1a;简单、灵活、作用范围广&#xff0c;速度快 缺点&#xff1a;安全性能较差&…

Pytorch编写Transformer

本文参考自https://github.com/datawhalechina/learn-nlp-with-transformers/blob/main/docs/ 在学习了图解Transformer以后&#xff0c;需要用Pytorch编写Transformer&#xff0c;下面是写代码的过程中的总结&#xff0c;结构根据图解Transformer进行说明。 import numpy as …

前字节员工自爆:我原腾讯一哥们,跳槽去小公司做小领导,就签了竞业,又从小公司离职去了对手公司,结果被发现了,小公司要他赔80万

“世界那么大&#xff0c;我想去看看”&#xff0c;这句曾经火遍网络的辞职宣言&#xff0c;说出了多少职场人心中的渴望。然而&#xff0c;当我们真的迈出跳槽那一步时&#xff0c;才发现&#xff0c;现实远比想象中残酷得多。 最近&#xff0c;一起前字节跳动员工爆料的事件…

年终奖发放没几天,提离职领导指责我不厚道,我该怎么办?

“年终奖都发了&#xff0c;你还跳槽&#xff1f;太不厚道了吧&#xff01;” “拿完年终奖就走人&#xff0c;这不是典型的‘骑驴找马’吗&#xff1f;” 每到岁末年初&#xff0c;关于“拿到年终奖后是否应该立即辞职”的话题总会引发热议。支持者认为&#xff0c;这是个人…

如何验证Rust中的字符串变量在超出作用域时自动释放内存?

讲动人的故事,写懂人的代码 在公司内部的Rust培训课上,讲师贾克强比较了 Rust、Java 和 C++ 三种编程语言在变量越过作用域时自动释放堆内存的不同特性。 Rust 通过所有权系统和借用检查,实现了内存安全和自动管理,从而避免了大部分内存泄漏。Rust 自动管理标准库中数据类…

PID控制算法学习笔记分享

目录 一、参数设定 二、PID计算公式 三、位置式PID代码实现 四、增量式PID代码实现 五、两种控制算法的优缺点 六、PID算法的改进 一、参数设定 比例系数&#xff08;kp&#xff09;&#xff1a;P项的作用是根据当前误差的大小来产生一个控制量。它直接与误差成正比&#…

【机器学习300问】126、词嵌入(Word Embedding)是什么意思?

人类的文字&#xff0c;作为一种高度抽象化的符号系统&#xff0c;承载着丰富而复杂的信息。为了让电脑也能像人类一样理解并处理这些文字&#xff0c;科学家们不断探索各种方法&#xff0c;以期将人类的语言转化为计算机能够理解的格式。 一、One-Hot编码的不足 在自然语言处…

NSSCTF中的[WUSTCTF 2020]朴实无华、[FSCTF 2023]源码!启动! 、[LitCTF 2023]Flag点击就送! 以及相关知识点

目录 [WUSTCTF 2020]朴实无华 [FSCTF 2023]源码&#xff01;启动! [LitCTF 2023]Flag点击就送&#xff01; 相关知识点 1.intval 绕过 绕过的方式&#xff1a; 2.session伪造攻击 [WUSTCTF 2020]朴实无华 1.进入页面几乎没什么可用的信息&#xff0c;所以想到使用dis…

Spring MVC学习记录(基础)

目录 1.SpringMVC概述1.1 MVC介绍1.2 Spring MVC介绍1.3 Spring MVC 的核心组件1.4 SpringMVC 工作原理 2.Spring MVC入门2.1 入门案例2.2 总结 3.RequestMapping注解4.controller方法返回值4.1 返回ModelAndView4.2 返回字符串4.2.1 逻辑视图名4.2.2 Redirect重定向4.2.3 forw…

Shopee菲律宾本土店允许中途无理由退货,如何应对退货后库存混乱问题?

Shopee菲律宾本土店最近实施了一项新政策&#xff0c;自2024年6月10日起&#xff0c;允许买家在商品仍在运输途中申请退货与退款&#xff0c;此即“在途退货/退款”功能&#xff0c;主要的目的是为了提升买家的购物体验&#xff0c;增强市场竞争力。 图源&#xff1a;Shopee菲律…

一年前 LLM AGI 碎片化思考与回顾系列⑤ · 探索SystemⅡ复杂推理的未知之境

阅读提示&#xff1a; 本篇系列内容的是建立于自己过去一年在以LLM为代表的AIGC快速发展浪潮中结合学术界与产业界创新与进展的一些碎片化思考并记录最终沉淀完成&#xff0c;在内容上&#xff0c;与不久前刚刚完稿的那篇10万字文章 「融合RL与LLM思想&#xff0c;探寻世界模型…

vue3delete请求报403forbidden,前后端解决方式,cookie无效问题

在做开发时&#xff0c;前期已经在Controller类加上CrossOrigin(origins "*")&#xff0c;发送get和post请求都没问题&#xff0c;但遇到delete请求时&#xff0c;又报出跨域问题 一.前端添加proxy代理服务器&#xff08;未能解决&#xff09; 在vue.config.js中使…

连接Huggingface报requests.exceptions.SSLError错误

最近在学习使用 SHAP 算法解释 BERT 模型的输出结果&#xff0c;然而在从 Huggingface 上导入模型和数据集的过程中出现了网络连接相关的错误&#xff0c;本文用于记录错误类型和解决错误的方法。 1 代码示例 SHAP 官方展示的代码如下&#xff1a; import datasets import nu…

Linux screen命令使用

文章目录 1. 前言2. screen是什么?3. screen使用场景描述3. screen常用命令4. 小结5. 参考 1. 前言 实际开发中用到的云服务器&#xff0c;如果项目使用的是python&#xff0c;需要利用项目运行一些时间较长的项目程序脚本的话&#xff0c;由于我们通过ssh连接远端服务器&…

一文详解扩散模型

文章目录 1、常见的生成模型2、变分推断简介3、文生图的评价指标4、Diffusion Models5、其他技术交流群精选 节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地…

2024年通信安全员ABC证证考试题库及通信安全员ABC证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年通信安全员ABC证证考试题库及通信安全员ABC证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…