JAVA-学习

一、垃圾回收机制

1、为什么要进行垃圾回收机制

        如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。

2、哪些内存需要回收?

        哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象。那么如何找到这些对象?(如何判断一个对象是否可以被回收)

3、如何判断一个对象是否可以被回收

问:垃圾收集器有哪几种?

        垃圾收集器底层原理剖析?

        垃圾收集器的算法,优化?

(1)引用技术算法

        这个算法的实现是,给对象中添加一个引用计数器,每当一个地方引用这个对象时,计数器值+1;当引用失效时,计数器值-1。任何时刻计数值为0的对象就是不可能再被使用的。引用计数为 0 的对象可被回收。正因为循环引用的存在,因此 Java 虚拟机不使用引用计数算法。

package com.baidu.GC;public class ReferenceCountingGC {private Object instance = null;private static final int _1MB = 1024 * 1024;/** 这个成员属性唯一的作用就是占用一点内存 */private byte[] bigSize = new byte[2 * _1MB];public static void main(String[] args) {ReferenceCountingGC objectA = new ReferenceCountingGC();ReferenceCountingGC objectB = new ReferenceCountingGC();objectA.instance = objectB;objectB.instance = objectA;objectA = null;objectB = null;System.gc();}
}

二 、JAVA跨平台原理

1、JAVA

        Java是可以跨平台的编程语言,那我们首先得知道什么是平台,我们把CPU处理器与操作系统的整体叫平台

        C语言是编译执行的,编译器与平台相关,编译生成的可执行文件与平台相关;

        Java是解释执行的,编译为中间码的编译器与平台无关,编译生成的中间码也与平台无关(一次编译,到处运行),中间码再由解释器解释执行,解释器是与平台相关的,也就是不同的平台需要不同的解释器。

a9058d3957ba46afbc6f402b7966d5ea.png

         在执行的时候,表面上我们调用的是Java.exe,实际上我们在调用java.exe的时候,会去动态调用JVM虚拟机,JVM将字节码文件一行一行的解释成为当前操作系统认识的可执行文件的格式,因此,java是一个“解释型”语言

        Java是编译型的语言,也是解释型的语言,现在明白了,编译型的语言是因为java的你可以说它是编译型的,因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有

        而解释型因为java代码编译后不能直接运行,它是解释运行在JVM上的,而JVM的执行方式是把字节码文件一行一行的解释成当前平台认识的可执行文件,所以它是解释运行的,那也就算是解释类型的了。

2、C语言的跨平台原理 

        那么c语言是不是跨平台的语言呢,实际上我们所说的跨平台,是指编译后的文件是否可以跨平台,从这个角度来讲,c语言不是跨平台的,但是网上有很多人讲c语言是跨平台的语言,这里指的是因为不同平台有对应的编辑器,是源文件跨平台.

3、效率问题

        我们回到两个语言跨平台的原理,java把程序先编译成字节码,然后通过对应的JVM进行一句一句的解释执行,而c语言,则直接通过对应平台的解释器翻译成直接可以在对应平台是执行的文件,从这可以看出,c语言的执行效率是快于java的。

三、JAVA的常用DOS命令

(1)控制命令台:

win+R

(2)切换盘符

C:  D:  E:  //大小写都可以

(3)显示详细信息 dir

dir

(4)改变当前目录

cd

(5 ) 当前目录和上一层目录

cd .     //当前目录
cd ..    //上层目录

(6)清屏

cls

(7)补全命令 TAB

cd s+TAB

(8)创建/删除一个目录

md a    // make dir 创建目录
rd a    // remove dir 删除目录

 (9)复制文件夹

copy demo.txt a\test.txt

 (10)删除文件

del 文件名

四、JDK和JRE

        JRE(Java Runtime Enviroment) 是 Java 的运行环境。。面向 Java 程序的使用者,而不是开发者。如果你仅下载并安装了 JRE,那么你的系统只能运行 Java 程序。

        JDK(Java Development Kit) 又称 J2SDK(Java2 Software Development Kit),是 Java 开发工具包,它提供了 Java 的开发环境(提供了编译器 javac 等工具,用于将 java 文件编译为 class 文件)和运行环境(提 供了 JVM 和 Runtime 辅助包,用于解析 class 文件使其得到运行)。如果你下载并安装了 JDK,那么你不仅可以开发 Java 程序,也同时拥有了运行 Java 程序的平台。JDK 是整个 Java 的核心,包括了 Java 运行环境(JRE),一堆 Java 工具 tools.jar 和 Java 标准类库 (rt.jar)。

五、JAVA基本语法

1、变量

(1)变量的概念

        在内存中分配一块地址,用来存储各种不同类型的数据。

(2)变量的类型

int a, b, c;         // 声明三个int型整数:a、 b、c
int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值
byte z = 22;         // 声明并初始化 z
String s = "runoob";  // 声明并初始化字符串 s
double pi = 3.14159; // 声明了双精度浮点型变量 pi
char x = 'x';        // 声明变量 x 的值是字符 'x'。

        变量在声明时候可以没有初始值,但是在使用的时候必须赋予初始值。

        JDK10之后,有一种变量声明方式,VAR,但需要赋值,会推断其属于什么类型。

var 变量 = 值

(3)变量的范围

        ①局部变量

        局部变量是在方法、构造函数或块内部声明的变量,它们在声明的方法、构造函数或块执行结束后被销毁,局部变量在声明时需要初始化,否则会导致编译错误

public void exampleMethod() {int localVar = 10; // 局部变量// ...
}

        ②实例变量

        实例变量是在类中声明,但在方法、构造函数或块之外,它们属于类的实例,每个类的实例都有自己的副本,如果不明确初始化,实例变量会被赋予默认值(数值类型为0,boolean类型为false,对象引用类型为null)。

public class ExampleClass {int instanceVar; // 实例变量
}

        ③静态或类变量

        类变量是在类中用 static 关键字声明的变量,它们属于类而不是实例,所有该类的实例共享同一个类变量的值,类变量在类加载时被初始化,而且只初始化一次。

public class ExampleClass {static int classVar; // 类变量
}

        ④参数变量

        参数是方法或构造函数声明中的变量,用于接收调用该方法或构造函数时传递的值,参数变量的作用域只限于方法内部。

public void exampleMethod(int parameterVar) {// 参数变量// ...
}

2、关键字

(1)48个关键字

14cfdfb410c34bedb4cad581fe7b9ecb.png

(2)保留字

gotoconst

(3)特殊直接量

truefalsenull

 

3、八种基本数据类型abdadc6f7c0a462a9d41bf8a9b99335c.png

4、数据类型的转换

(1)自动转换

        小的数据类型向大的数据类型转换,或者整数类型转换成浮点数类型,都是自动转换的。

byte->short->int->long
public class Main {public static void main(String[] args) {// 当文本光标位于高亮显示的文本处时按 Alt+Enter,// 可查看 IntelliJ IDEA 对于如何修正该问题的建议。System.out.println("Hello and welcome!");byte egg = 10;int x = egg;System.out.println(x);}
}

(2)强制转换

        大的数据类型转换成小的数据类型则要强制转换。

long->int->short->byte
public class Main {public static void main(String[] args) {// 当文本光标位于高亮显示的文本处时按 Alt+Enter,// 可查看 IntelliJ IDEA 对于如何修正该问题的建议。System.out.println("Hello and welcome!");int egg = 10;byte x = (byte)egg;System.out.println(x);}
}

5、基本算数运算

        加:+

        减:-

        乘:×

        除法:/

        求余(取模):%

注意:

  JAVA默认的整数类型是INT

short a = 10;
short b = 20;
short c = (short)(a+b)

注意:

         任何的数据类型和字符串使用+运算,+都表示连字符,最后得到的结果都是String类型。

注意:        

        自增自减

       ① i++  : 整个表达式结果是i,

i=10;
int j=i++;  //先把i的值赋给j,i再+1
// j=10

        ②i--  : 

i=10;
int j=i--;  //先把i的值赋给j,i再-1
// j=10

        ③++i  :

i=10;
int j=i++;  //i先+1再把值赋给j
// j=11

        ④--i  :

i=10;
int j=i--;  //i先-1再把值赋给j
// j=9
public class Ari {public static void main(String[] args) {int i=10;int j=i++;   //j=10  i=11int m=i+++j; //m=21 i=12 j=10int n=j--+m; //n=31,i=12,j=9,m=21System.out.println(i);System.out.println(j);System.out.println(m);System.out.println(n);}
}

 6、关系运算符

        <    >   ==    <=   >=      !=

import java.util.Scanner;
public class rel {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);System.out.println("请输入两个数字比较:");int x=scanner.nextInt();int y=scanner.nextInt();boolean b=x>y;System.out.println(x+"是否大于"+y+":"+b);}
}

 7、逻辑运算符

        与运算        A&B :同时为真,则结果为真;

        或运算        A|B :其中一个为真,则结果为真;

        非运算        !A:A必须是boolean类型;

        短路与运算        A&&B:和与运算的规则相同,但左侧表达式为False,则直接返回结果为False;如果左侧表达式为True,则右侧运算后返回结果;

        短路或运算        a||B:和或运算的规则相同,但如果左侧表达式为True,则右侧不进行运算,直接返回True;如果左侧为False,则右侧计算后再返回结果;

        异或运算    A^B:相同为False,不同为True。

注意:

        如果要求右侧表达式,不管在什么情况下,都要计算到,则不能用短路。

 8、按位运算符(效率高)

        首先转换为二进制

        按位与:

        按位或 :

        按位异或

        按位取反:

 9、移位运算符(效率高)

有符号位

        左移位运算 y<<2:整体将二进制位向左侧移动移位,右侧补0,左移动1位,相当于乘2;(符号不影响)

        右移位运算:使用>>符号表示,整体将二进制向右移位,左侧补0,右移动1位,相当于除以2。(符号不影响)

        如果移动的位数超过所能表述的长度,则采用求余的方式计算;

        如:如果移动32位时候,32%32=0;

                如果移动33位的时候,33%32=1.

无符号位

        无符号右移位运算:用>>>符号,不考虑正负数的问题;

        正数移动和右移位相同。

        负数移动不考虑最左侧负号的问题,意义不大。

 10、赋值运算符

        =    :将右侧的值赋值给左侧变量。

        +=  :

        -=   :

        ……

        <<= : 在变量自身上作左移运算  x<<=2

        >>= : 在变量自身上作右移运算 x>>=2

        >>>=: 在变量自身上做无符号右移运算 x>>>=2

        ……

 11、条件运算符(三元运算符)

        x?y:z

        表达式1?表达式2:表达式3

        x必须位boolean类型的值,如果x为True,则整个表达式取值为y,否则为z。

  注意:

        不允许        表达式1?表达式2:表达式3   单独存在。

int x=10;
int y=5;
int max=x>y?x:y;

12、优先级

13、从键盘接收数据

        导入工具包

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);System.out.println("请输入第一个数字");double x=scanner.nextDouble();System.out.println("请输入第二个数字");double y=scanner.nextDouble();System.out.println("输出结果");double z=x+y;System.out.println(z);}
}

14、字符类型

8406b0984a6846c39cdc785ef22cf5a1.png

        java虚拟机JVM,定义了boolean,但是没有专门的虚拟指令。

        在JAVA语言中,对boolean值操作时替换成int类型数据,占4字节(32位),且只有一位是有效的。

        布尔类型数组,转成byte数组,数据占1字节(8位)。

15、字符串和转义字符

        String不是基本数据类型,是一种引用类型;

        使用String来声明;

        特殊的转义字符。

public class String_test {public static void main(String[] args){String x = "你好!\nJava!";  //String是一个类System.out.println(x);}}

6e2f6c4ebab34346b577599909d2d5ab.png

16、字面量值和常量

字面量:表达的信息如字面所示,程序源码直接给出的一个值,如整数、浮点数和字符串。

常量:不可变的,字面值常量,定义的常量。

//使用final关键字来修饰,不可以重新被赋值
public class ConstTest {public static void main(String[] args) {final double pi=3.141526;}
}

17、编码风格 

驼峰式编码风格

        类名:

  •         1个单词组成,首字母大写,后面全小写,如Student    Teacher
  •         2个或2个以上单词组成,每个单词首字母大写,其他小写,如TeacherName

        变量名字:

  •         1个单词组成,全小写  a    b    c    name
  •         2个或两个单词以上组成,第一个单词全部小写,后面每个单词首字母大写
  •         studentName    studentFirstNanme

        常量:

  •         一个单词组成,全部大写,PI
  •         2个或2个以上单词组成,全部大写,中间建议使用下划线分隔。USER_NAME

18、程序结构_分包概念

 

 

 

 

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

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

相关文章

【大模型】在大语言模型的架构中,Transformer有何作用?

Transformer在大语言模型架构中的作用 Transformer是一种用于序列到序列&#xff08;Seq2Seq&#xff09;任务的深度学习模型&#xff0c;由Vaswani等人于2017年提出。在大语言模型&#xff08;LLM&#xff09;的架构中&#xff0c;Transformer扮演着关键的角色&#xff0c;它…

Flink中因java的泛型擦除导致的报错及解决

【报错】 Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The return type of function Custom Source could not be determined automatically, due to type erasure. You can give type information hints by using th…

【php实战项目训练】——thinkPhP的登录与退出功能的实现,让登录退出畅通无阻

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

Mendix 创客访谈录|Mendix助力开发高手10日交付复杂应用,且支持移动端呈现

本期创客 莊秉勳 布鲁科技技术顾问 各位Mendix社群的夥伴好&#xff0c;我是莊秉勳&#xff0c;大家也可以叫我Danny。 我大學是資訊科學背景&#xff0c;在與Mendix相遇前&#xff0c;曾在一上市製造企業&#xff0c;擔任軟體工程師&#xff0c;負責企業內部軟體開發&#xf…

Virtualbox 安装unbuntu + qemu

0. 前言 关于 Virualbox 安装虚拟机的优秀文章太多了&#xff0c;笔者主要是着重梳理一些安装小细节&#xff0c;利己利人&#xff01;&#xff01; 如果需要保姆式的安装教程&#xff0c;可以查看后续的参考链接。 1. VirtualBox 的安装 直接去官网搜索最近的软件即可&…

js每日十题(二)

1. 6.3 js第6题 以下结语句中&#xff0c;返回true的是&#xff1f; A !![] B 1’1’ C nullundefined D !!’’ 答&#xff1a; A选项&#xff0c;由于数组属于对象类型&#xff0c;所以空的数组转换成布尔型是true&#xff0c;前置&#xff01;&#xff01;&#xff0c;两次取…

【paper】环形虚拟管内的多无人机协同目标包围

Multi-UAV cooperative target encirclement within an annular virtual tube2022.8ELSEVIER Aerospace Science and Technology【Q1 5.6】Yan Gao 全权 北航 Q1 Background&#xff1a;本文试图解决一个什么样的问题&#xff1f; 多无人机对单个静态目标进行连续包围任务&…

基于聚类和回归分析方法探究蓝莓产量影响因素与预测模型研究附录

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 目录 背景数据说明数据来源思考 附录数据预处理导入包以及数据读取数据预览数据处理 相关性分析聚类分析数据处理确定聚类数建立k均值聚类模型 …

12- Redis 中的 链表 数据结构

Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构&#xff0c;所以 Redis 自己设计了一个链表数据结构。 1. 链表节点结构设计 先来看看【链表节点】结构的样子&#xff1a; typedef struct listNode {//前置节点struct listNode *prev;//后置节点…

liunx配置网络的命令

liunx配置网络的命令 文章目录 liunx配置网络的命令ifconfig命令查看路由表信息netstat命令ss命令lsof命令ping 命令nslookup命令 ifconfig命令 ifconfig:显示正在工作的网卡&#xff0c;启动的设备 ifconfig -a 展示所有设备 ens33: flags4163<UP,BROADCAST,RUNNING,MUL…

RK3588+FPGA+算能BM1684X:高性能AI边缘计算盒子,应用于视频分析、图像视觉等

搭载RK3588&#xff08;四核 A76四核 A55&#xff09;&#xff0c;CPU主频高达 2.4GHz &#xff0c;提供1MB L2 Cache 和 3MB L3 &#xff0c;Cache提供更强的 CPU运算能力&#xff0c;具备6T AI算力&#xff0c;可扩展至38T算力。 产品规格 系统主控CPURK3588&#xff0c;四核…

数字、钱工具栏

/*** 提取字符串中的 数字 带小数点 &#xff0c;没有就返回"0"** param money* return*/fun getMoney(money: String): String {var money moneyvar pattern Pattern.compile("(\\d\\.\\d)")var m pattern.matcher(money)if (m.find()) {money if (m.…

数据挖掘实战-基于长短期记忆网络(LSTM)的黄金价格预测模型 | 97% 准确度

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

攻防世界babyRE做法(Linux调试)

在做题之前我们先了解一些知识点&#xff0c;首先是汇编中的知识点&#xff0c;汇编中&#xff0c;数据和代码可以说是一回事&#xff0c;数据和代码可以无条件相互转换&#xff0c;换句话说&#xff0c;数据就是代码&#xff0c;代码就是数据 接下来开始做题&#xff0c;简单…

【经验总结】怎样查看计算机CPU核数量

方法一&#xff1a;任务管理器 方法二&#xff1a;设备管理器 选中“计算机”右击&#xff0c;选择“属性”&#xff1a; 选择“设备管理器”->“处理器”&#xff0c;有几行就代表有几个核&#xff1a;

Ubuntu系统升级k8s节点的node节点遇到的问题

从1.23版本升级到1.28版本 node节点的是Ubuntu系统20.04的版本 Q1 node节点版本1.23升级1.28失败 解决办法&#xff1a; # 改为阿里云镜像 vim /etc/apt/sources.list.d/kubernetes.list# 新增 deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main# 执…

浙江大爱遮阳新材料股份有限公司新品发布会圆满成功

5月29日,浙江大爱遮阳新材料股份有限公司新品发布会在上海国家会展中心举办。本次会议出席的嘉宾有浙江大爱遮阳新材料股份有限公司总经理俞彬军,常务副总王志华,上海大爱益可美遮阳科技有限公司总经理陆俊青,浙江大爱遮阳新材料股份有限公司销售经理平鸿烈,销售经理蒋扬锋和玛…

vmware将物理机|虚拟机转化为vmware虚机

有时&#xff0c;我们需要从不同的云平台迁移虚拟机、上下云、或者需要将不再受支持的老旧的物理服务器转化为虚拟机&#xff0c;这时&#xff0c;我们可以用一款虚拟机转化工具&#xff1a;vmware vcenter converter standalone&#xff0c;我用的是6.6的版本&#xff0c;当然…

美国专利短语相似度大赛

1.特殊token [cls],[sep],[pas],[unk] 2.皮尔逊系数 利用metric矩阵获得评价指标 def compute_metrics(eval_pred):predictions, labels eval_predpredictions predictions.reshape(len(predictions))return {pearson: np.corrcoef(predictions, labels)[0][1]} 3.bert …

第六篇 移位寄存器

实验六 移位寄存器 6.1实验目的 掌握移位寄存器的工作原理&#xff1b; 掌握利用移位寄存器实现串行与并行的相互转换&#xff1b; 掌握使用移位寄存器实现乘除法运算&#xff1b; 6.2 原理介绍 6.2.1 基本移位寄存器 在实验四中&#xff0c;我们主要介绍了寄存器的结构…