前端初学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.mfbz.cn/a/736329.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mac苹果窗口辅助工具:Magnet for mac 2.14.0中文免激活版

Magnet 是一款针对 MacOS 系统的窗口管理工具软件。它能够帮助用户更加高效地管理和组织桌面上的窗口&#xff0c;通过简单的快捷键操作&#xff0c;可以将窗口自动调整到指定的位置和大小&#xff0c;实现多窗口快速布局。Magnet 还支持多显示器环境下的窗口管理&#xff0c;可…

模拟算法讲解

模拟算法是一种基于实际情况模拟的算法&#xff0c;通过模拟现实世界中的系统或过程&#xff0c;来研究它们的性质和行为。模拟算法可以用于解决各种问题&#xff0c;包括物理模拟、经济模拟、社会模拟等。 模拟算法的基本步骤包括&#xff1a; 定义问题&#xff1a;明确需要模…

禁用/屏蔽 Chrome 默认快捷键

Chrome 有一些内置的快捷键&#xff0c;但是它并没有像其他软件一样提供管理快捷键的界面。在某些时候&#xff0c;当我们因为个人需求希望禁用 Chrome 某些快捷键时&#xff0c;又无从下手。 好在有开发者开发了 Chrome 插件&#xff0c;可以禁用 Chrome 快捷键的插件&#x…

Python中使用PyQT5库时报错:没有Qt平台插件可以初始化

一、发现问题&#xff1a;无限易pythonGo打开执行的时候报&#xff1a;“没有Qt平台插件可以初始化&#xff0c;请重新安装应用程序。”的错误&#xff0c;点击确定后无限易崩溃闪退。 二、解决问题&#xff1a; 1、重新安装依赖&#xff0c;打开CMD输入pip list&#xff0c;查…

用户态协议栈06-TCP三次握手

最近由于准备软件工程师职称考试&#xff0c;然后考完之后不小心生病了&#xff0c;都没写过DPDK的博客了。今天开始在上次架构优化的基础上增加TCP的协议栈流程。 什么是TCP 百度百科&#xff1a;TCP即传输控制协议&#xff08;Transmission Control Protocol&#xff09;是…

「动态规划」如何求环绕字符串中唯一的子字符串个数?

467. 环绕字符串中唯一的子字符串https://leetcode.cn/problems/unique-substrings-in-wraparound-string/description/ 定义字符串base为一个"abcdefghijklmnopqrstuvwxyz"无限环绕的字符串&#xff0c;所以base看起来是这样的&#xff1a;"...zabcdefghijklm…

浅谈红队攻防之道-office文件免杀

最完美的状态&#xff0c;不是你从不失误&#xff0c;而是你从没放弃成长。 ∙菜单栏&#xff1a;集成了Cobalt Strike的所有功能。 ∙快捷功能区&#xff1a;列出了常用功能。 ∙目标列表区&#xff1a;根据不同的显示模式&#xff0c;显示已获取权限的主机及目标主机。 ∙…

如何打包数据库文件

使用 mysqldump 命令&#xff1a; mysqldump -u username -p database_name > output_file.sql username 是数据库的用户名。database_name 是要导出的数据库名称。output_file.sql 是导出的 SQL 文件名&#xff0c;可以自定义。 示例&#xff1a; mysqldump -u root -p…

OS复习笔记ch12-2

辅存管理 文件分配问题 创建文件一次性分配最大空间吗&#xff1f;分配连续的分区空间&#xff0c;分区多大&#xff1f;用什么数据结构记录&#xff1f; &#xff08;1&#xff09;分配方式 类似于#ch8-3调页机制&#xff0c;文件分配也有预分配和动态分配的形式。 一般拷贝…

【database1】mysql:DDL/DML/DQL,外键约束/多表/子查询,事务/连接池

文章目录 1.mysql安装&#xff1a;存储&#xff1a;集合&#xff08;内存&#xff1a;临时&#xff09;&#xff0c;IO流&#xff08;硬盘&#xff1a;持久化&#xff09;1.1 服务端&#xff1a;双击mysql-installer-community-5.6.22.0.msi1.2 客户端&#xff1a;命令行输入my…

文华财经多空精准买卖点止损止盈数值主图指标公式源码

文华财经多空精准买卖点止损止盈数值主图指标公式源码&#xff1a; DD:EVERY(H>HV(H,20),1); KK:EVERY(L<LV(L,20),1); D:DD&&SUM(DD,BARSLAST(KK))1; K:KK&&SUM(KK,BARSLAST(DD))1; Y:1; DRAWCOLORKLINE(Y&&ISDOWN,COLORYELLOW,0); DRAW…

How to create a langchain doc from an str

问题背景&#xff1a; Ive searched all over langchain documentation on their official website but I didnt find how to create a langchain doc from a str variable in python so I searched in their GitHub code and I found this : 在 langchain 的官方文档中&#…

吴恩达机器学习 第二课 week4 决策树

目录 01 学习目标 02 实现工具 03 问题描述 04 构建决策树 05 总结 01 学习目标 &#xff08;1&#xff09;理解“熵”、“交叉熵&#xff08;信息增益&#xff09;”的概念 &#xff08;2&#xff09;掌握决策树的构建步骤与要点 02 实现工具 &#xff08;1&#xff09;…

视频讲解|【双层模型】分布式光伏储能系统的优化配置方法

1 主要内容 该讲解视频对应的程序链接为【双层模型】分布式光伏储能系统的优化配置方法&#xff0c;模型参考《分布式光伏储能系统的优化配置方法》&#xff0c;分为上下层求解方式&#xff0c;上层采用粒子群算法确定储能的选址和容量方案&#xff0c;以全年购电成本、网络损…

<router-view />标签的理解

< router-view />标签的理解 < router-view />用来承载当前级别下的子集路由的一个视图标签。显示当前路由级别下一级的页面。 App.vue是根组件&#xff0c;在它的标签里使用&#xff0c;而且配置好路由的情况下&#xff0c;就能在浏览器上显示子组件的效果。 如…

开启调试模式

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 run()方法虽然适用于启动本地的开发服务器&#xff0c;但是每次修改代码后都要手动重启它。这样并不够方便&#xff0c;如果启用了调试支持&#xff…

中国真实婚恋相亲交友服务平台有哪些?全国靠谱恋爱脱单软件APP大全

终于成功脱单了&#xff01;在过去的这两年里&#xff0c;我动用了身边所有的资源&#xff0c;却始终未能找到理想的男朋友。无奈之下&#xff0c;只好将目光转向线上。经过长达半年的不懈坚持&#xff0c;终于寻觅到了心仪的对象&#xff01;接下来&#xff0c;我要把自己用过…

【PL理论深化】(2) 语法分析 (Syntax) | 编程语言的语法结构:文法 | 语义结构 (Sematics)

&#x1f4ac; 写在前面&#xff1a;编程语言是由归纳法生成的程序的集合。定义属于该语言的程序的形式的规则&#xff0c;即编写程序的规则&#xff0c;称为编程语言的 语法分析 (syntax) 而定义属于该语言的程序的意义的规则称为 语义结构(semantics)。这两者都是归纳定义的。…

QML 列表,图片展示(一)

文章目录 1.QML 列表&#xff0c;图片展示效果图2.项目基本说明3.项目详解3.1界面显示部分3.2 网络部分 4.源代码5.flickr图片查询链接&#xff0c;后面我们将调整代码&#xff0c;获取更多图片 1.QML 列表&#xff0c;图片展示效果图 2.项目基本说明 该项目来自Qt示例程序 Ph…

LabVIEW电路板故障诊断系统

基于LabVIEW软件开发的电路板故障诊断系统&#xff0c;涵盖功能测试、性能测试和通讯测试等多个方面。系统集成了多种硬件设备&#xff0c;包括NI PXI-1033机箱、NI PXI-4071数字万用表、NI PXI-4130电源模块、NI PXI-8512 CAN模块等&#xff0c;通过模块化设计实现了对电路板的…