前端初学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.rhkb.cn/news/357146.html

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

相关文章

如何解决代码中if…else-过多的问题,建议收藏

逻辑表达模式固定的 if…else 实现与示例 if (param.equals(value1)) { doAction1(someParams); } else if (param.equals(value2)) { doAction2(someParams); } else if (param.equals(value3)) { doAction3(someParams); } // … 可重构为 Map<?, Function<?>…

Hexo 搭建个人博客(ubuntu20.04)

1 安装 Nodejs 和 npm 首先登录NodeSource官网&#xff1a; Nodesource Node.js DEB 按照提示安装最新的 Node.js 及其配套版本的 npm。 &#xff08;1&#xff09;以 sudo 用户身份运行下面的命令&#xff0c;下载并执行 NodeSource 安装脚本&#xff1a; sudo curl -fsSL…

qt 简单实验 一个可以向右侧拖拽缩放的矩形

1.概要 目的是设置一个可以拖拽缩放的矩形&#xff0c;这里仅用右侧的一个边模拟这个过程。就是为了抓住核心&#xff0c;这个便解决了&#xff0c;其他的边也是一样的。而这个更能体现原理。 2.代码 2.1 resizablerectangle.h #ifndef RESIZABLERECTANGLE_H #define RESIZ…

c++中string的用法

STL的简介 一.什么是STL二.STL的六大组件2.1仿函数2.2空间配置器2.3 算法2.4 迭代器2.5容器2.6配置器 三.string类3.1string类3.2string类的常用接口说明代码示例运行结果 3.3string类对象的容量操作代码示例sizelengthcapcityempty resizereverse 3.4string类对象的访问及遍历…

LLM主流架构和模型

本文参考自https://github.com/HqWu-HITCS/Awesome-Chinese-LLM?tabreadme-ov-file和Huggingface中的ModelCard&#xff08;https://huggingface.co/&#xff09; LLM主要类别架构 LLM本身基于transformer架构。自2017年&#xff0c;attention is all you need诞生起&#x…

Spring的启动扩展点机制详解

在Java的世界中&#xff0c;我们知道Spring是当下最主流的开发框架&#xff0c;没有之一。而在使用Dubbo、Mybatis等开源框架时&#xff0c;我们发现可以采用和Spring完全一样的使用方式来使用它们。 可能你在平时的使用过程中并没有意识到这一点&#xff0c;但仔细想一想&…

拦截器Interceptor

概念&#xff1a;是一种动态拦截方法调用的机制&#xff0c;类似于过滤器。Spring框架中提供的&#xff0c;用来动态拦截方法的执行。 作用&#xff1a;拦截请求&#xff0c;在指定的方法调用前后&#xff0c;根据业务需要执行预先设定的代码。

STM32单片机BKP备份寄存器和RTC实时时钟详解

文章目录 1. Unix时间戳 2. UTC/GMT 3. 时间戳转换 4. BKP简介 5. BKP基本结构 6. RTC简介 7. RTC框架图 8. RTC基本结构 9. 代码示例 1. Unix时间戳 实时时钟&#xff0c;本质上是一个定时器&#xff0c;专门用来产生年月日时分秒。 Unix 时间戳&#xff08;Unix T…

判断题无答案22届期末复习

判断: 1-3.结构体变量不能进行整体输入输出。 1-4.不同类型的结构变量之间也可以直接赋值。 1-5假设结构指针p已定义并正确赋值,其指向的结构变量有一个成员是int型的num,则语句 (*p).num = 100; 等价于p->num=1…

【Arthas案例】应用包含两个相同全限定类名StaticLoggerBinder,引起log4j.Level类找不到异常

3分钟内解决问题 两个不同的GAV依赖冲突&#xff0c;包含相同全限定类名&#xff0c;引起ClassNotFoundException Maven依赖的三坐标体系GAV(G-groupId&#xff0c;A-artifactId&#xff0c;V-version) 【案例1】某应用依赖两个GAV不同的jar&#xff0c;但包含两个相同全限定类…

Java | Leetcode Java题解之第179题最大数

题目&#xff1a; 题解&#xff1a; class Solution {public String largestNumber(int[] nums) {int n nums.length;// 转换成包装类型&#xff0c;以便传入 Comparator 对象&#xff08;此处为 lambda 表达式&#xff09;Integer[] numsArr new Integer[n];for (int i 0;…

css-vxe列表中ant进度条与百分比

1.vxe列表 ant进度条 <vxe-column field"actualProgress" title"进度" align"center" width"200"><template #default"{ row }"><a-progress:percent"Math.floor(row.actualProgress)"size"s…

Android面试题之动画+事件处理篇

1、Android 中的动画有哪几类 帧动画、补间动画、属性动画 2、动画能组合在一起使用么&#xff1f; 可以将动画组合在一起使用AnimatorSet&#xff0c; AnimatorSet.play() 播放当前动画的同时可以 .with() &#xff1a;将现有动画和传入的动画同时执行 .after() &#xff1a…

高考填报志愿选专业,要善于发掘自身优势

每年的高考季&#xff0c;如何填报志愿又再成为困扰家长以及学生的难题&#xff0c;可能在面对大量的专业时&#xff0c;无论是考生还是家长都不知道应该如何选择&#xff0c;好的专业孩子不一定有优势&#xff0c;感兴趣的冷门专业又担心日后找工作难。 实际上&#xff0c;专业…

基于matlab的BP神经网络分类预测

1.神经网络结构 本文网络结构如图1所示&#xff1a; 图1 网络结构 图1给出的并不是单纯的bp神经网络结构这里设置了三个隐藏层&#xff0c;神经元个数分别为6&#xff0c;3&#xff0c;3&#xff0c;输入层12个特征输入&#xff0c;输出层输出4个类型结果。 2.代码 %% 清空环…

Android 你应该知道的学习资源 进阶之路贵在坚持

coderzheaven 覆盖各种教程&#xff0c;关于Android基本时案例驱动的方式。 非常推荐 thenewcircle 貌似是个培训机构&#xff0c;多数是收费的&#xff0c;不过仍然有一些free resources值得你去挖掘。 coreservlets 虽然主打不是android&#xff0c;但是android的教程也​ 是…

Webpack4从入门到精通以及和webpack5对比_webpack现在用的是哪个版本

3.1 打包样式资源css-loader、style-loader… {// 匹配哪些文件test: /\.less$/,// 使用哪些loader进行处理use: [// use数组中loader执行顺序&#xff1a;从右到左&#xff0c;从下到上&#xff0c;依次执行(先执行css-loader)// style-loader&#xff1a;创建style标签&#…

STM32读写备份寄存器和实时时钟

文章目录 1. 硬件电路 2. RTC操作注意事项 操作步骤 3. 代码实现 3.1 读写备份寄存器 3.1.1 main.c 3.2 实时时钟 3.2.1 MyRTC.c 3.2.2 MyRTC.h 3.2.3 main.c 1. 硬件电路 对于BKP备份寄存器和RTC实时时钟的详细解析可以看下面这篇文章&#xff1a; STM32单片机BKP备…

HTML(19)——Flex

Flex布局也叫弹性布局&#xff0c;是浏览器提倡的布局模型&#xff0c;非常适合结构化布局&#xff0c;提供了强大的空间分布和对齐能力。 Flex模型不会产生浮动布局中脱标现象&#xff0c;布局网页更简单、更灵活。 Flex-组成 设置方式&#xff1a;给父元素设置display:fle…

Django数据驾驶舱

Django数据驾驶舱 1.项目介绍2.项目结构3.库表结构3.1 appcsdn的models3.2 appssq的models3.3 appweather的models3.4 appweibo的models 4.功能展示5.解决问题5.1 路由配置5.2 后端数据与前端echarts展示5.3 长图表丝滑滚动条 6.遗留问题7.资源分享 1.项目介绍 这里介绍本人最…