JAVA你熟吗?

JVM(Java虚拟机)(由生到熟) 文章目录 1.1 JVM概念 JVM(Java Virtual Machine的简称。意为Java虚拟机。): 指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机有JVM、VMwave、Virtual Box。.JVM和其他两个虚拟机的区别: a.VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器 b.JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进行了裁剪JVM是一台被定 阅读详情
想来学习Java也有两个年头了,永远不敢说多么精通,但也想谈谈自己的感受,写给软件学院的同仁们,帮助大家在技术的道路上少一点弯路。说得伟大一点是希望大家为软件学院争气,其实最主要的还是大家自身的进步提升——

1. 关于动态加载机制——
学习Java比C++更容易理解OOP的思想,毕竟C++还混合了不少面向过程的成分。很多人都能背出来Java语言的特点,所谓的动态加载机制等等。当然概念往往是先记住而后消化的,可有多少人真正去体会过动态加载的机制,试图去寻找过其中的细节呢?   提供大家一个方法:
在命令行窗口运行Java程序的时候,加上这个很有用的参数:

java   –verbose   *.class

这样会清晰的打印出被加载的类文件,大部分是jdk自身运行需要的,最后几行会明显的看到自己用到的那几个类文件被加载进来的顺序。即使你声明了一个类对象,不实例化也不会加载,说明只有真正用到那个类的实例即对象的时候,才会执行加载。这样是不是大家稍微能明白一点动态加载了呢?^_^

2. 关于寻找class文件原理——
建议大家在入门的时候在命令行窗口编译和运行,不要借助JCreator或者Eclipse等IDE去帮助做那些事情。尝试自己这样做:
javac     -classpath   yourpath   *.java
java     -classpath   yourpath   *.class
也许很多人都能看懂,设置classpath的目的就是告诉编译器去哪里寻找你的class文件.   不过至少笔者今日才弄懂JVM去查询类的原理,编译器加载类要依靠classloader,   而classloader有3个级别,从高到低分别是BootClassLoader(名字可能不准确)   ,   ExtClassLoader,   AppClassLoader.

这3个加载器分别对应着编译器去寻找类文件的优先级别和不同的路径:BootClassLoader对应jre/classes路径,是编译器最优先寻找class的地方
ExtClassLoader对应jre/lib/ext路径,是编译器次优先寻找class的地方
AppClassLoader对应当前路径,所以也是编译器默认找class的地方

其实大家可以自己写个程序简单的测试,对任何class,例如A,  
调用new   A().getClass().getClassLoader().toString()   打印出来就可以看到,把class文件放在不同的路径下再次执行,就会看到区别。特别注意的是如果打印出来是null就表示到了最高级BootClassLoader,   因为它是C++编写的,不存在Java对应的类加载器的名字。

寻找的顺序是一种向上迂回的思想,即如果本级别找不到,就只能去本级别之上的找,不会向下寻找。不过似乎从Jdk1.4到Jdk1.6这一特点又有改变,没有找到详细资料。所以就不举例子了。告诉大家设计这种体系的是Sun公司曾经的技术核心宫力先生,一个纯种华人哦!^_^

这样希望大家不至于迷惑为什么总报错找不到类文件,不管是自己写的还是导入的第三方的jar文件(J2ee中经常需要导入的)。

3. 关于jdk和jre——
大家肯定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做。因为这样更能帮助大家弄清楚它们的区别:

Jre   是java   runtime   environment,   是java程序的运行环境。既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦,   还有所有java类库的class文件,都在lib目录下打包成了jar。大家可以自己验证。至于在windows上的虚拟机是哪个文件呢?   学过MFC的都知道什么是dll文件吧,那么大家看看jre/bin/client里面是不是有一个jvm.dll呢?那就是虚拟机。

Jdk   是java   development   kit,是java的开发工具包,里面包含了各种类库和工具。当然也包括了另外一个Jre.     那么为什么要包括另外一个Jre呢?而且jdk/jre/bin同时有client和server两个文件夹下都包含一个jvm.dll。   说明是有两个虚拟机的。这一点不知道大家是否注意到了呢?

相信大家都知道jdk的bin下有各种java程序需要用到的命令,与jre的bin目录最明显的区别就是jdk下才有javac,这一点很好理解,因为jre只是一个运行环境而已。与开发无关,正因为如此,具备开发功能的jdk自己的jre下才会同时有client性质的jvm和server性质的jvm,   而仅仅作为运行环境的jre下只需要client性质的jvm.dll就够了。

记得在环境变量path中设置jdk/bin路径麽?这应该是大家学习Java的第一步吧,   老师会告诉大家不设置的话javac和java是用不了的。确实jdk/bin目录下包含了所有的命令。可是有没有人想过我们用的java命令并不是jdk/bin目录下的而是jre/bin目录下的呢?不信可以做一个实验,大家可以把jdk/bin目录下的java.exe剪切到别的地方再运行java程序,发现了什么?一切OK!

那么有人会问了?我明明没有设置jre/bin目录到环境变量中啊?

试想一下如果java为了提供给大多数人使用,他们是不需要jdk做开发的,只需要jre能让java程序跑起来就可以了,那么每个客户还需要手动去设置环境变量多麻烦啊?所以安装jre的时候安装程序自动帮你把jre的java.exe添加到了系统变量中,验证的方法很简单,大家看到了系统环境变量的path最前面有“%SystemRoot%/system32;%SystemRoot%;”这样的配置,那么再去Windows/system32下面去看看吧,发现了什么?有一个java.exe。

如果强行能够把jdk/bin挪到system32变量前面,当然也可以迫使使用jdk/jre里面的java,不过除非有必要,我不建议大家这么做。使用单独的jre跑java程序也算是客户环境下的一种测试。

这下大家应该更清楚jdk和jre内部的一些联系和区别了吧?

PS:   其实还有满多感想可以总结的,一次写多了怕大家扔砖头砸死我,怪我太罗唆。大家应该更加踏实更加务实的去做一些研究并互相分享心得,大方向和太前沿的技术讨论是必要的但最好不要太多,毕竟自己基础都还没打好,什么都讲最新版本其实是进步的一大障碍! 
第0篇:Java程序员的Go语言入门手册:先混个脸熟 Go语言语法清爽又直接,特别适合有Java基础的人快速上手。特性Go语言Java语言类无类概念,用结构体+方法组合一切都要在类中接口实现隐式(鸭子类型)显式 implements返回值支持多个返回值只能返回一个值,需封装函数第一类公民,可赋值、嵌套只能定义在类中包管理简单直接,无Maven那种折腾Maven/Gradle 依赖管理复杂下一篇将带你深入探索 Go 的“切片内幕”、“错误优雅处理”和“项目模块结构”,让我们一起用Go打造高性能系统!💬。 阅读详情

相关推荐

生成对抗网络(GAN、DCGAN、ACGAN)-----学习笔记

生成对抗网络学习笔记 生成对抗网络有两个关键结构:生成模型、判别模型。 生成模型:输入是一个服从正态分布的N维向量,利用这个N维向量生成一张图片。 判别模型:对于生成模型输出的图像判别它是不是真的图像。 生成模型和判别模型的博弈关系在于:生成模型的目的是生成让判别模型无法判别真伪的图像,而判别模型的目的是判断输入图像的真伪。 结合代码来看生成对抗网络中,生成器和判别器的训练过程: 判别模型的训...

weixin_43227526的博客 5489

【毕业设计】java大学生校园生活学习信息交流平台springboot+vue

管理员可以批量导入学生的基本信息,对精品课程管理、校园讲座管理、考试资源管理、美食分享管理、经验分享管理、跳蚤市场管理、交流论坛、系统管理具有添删改的功能。3、功能的完善性:可以管理首页、个人中心、学生管理、精品课程管理、校园讲座管理、考试资源管理、美食分享管理、经验分享管理、跳蚤市场管理、交流论坛、系统管理模块的修改维护操作。(1)功能要求:可以管理首页、个人中心、学生管理、精品课程管理、校园讲座管理、考试资源管理、美食分享管理、经验分享管理、跳蚤市场管理、交流论坛、系统管理等功能模块。

QQ_188083800的博客 371

车辆贷款违约预测挑战赛

2021科大讯飞-车辆贷款违约预测挑战赛--方案简介车贷违约预测问题,目的是建立风险识别模型来预测可能违约的借款人。预测结果为借款人是否可能违约,属于二分类问题。偏数据挖掘的比赛,关键点是如何基于对数据的理解抽象归纳出有用的特征。站在大佬的视角,尝试学习总结,站在巨人的肩膀上,也许看得会更远一些。直接进入主题,开始学习套路,芜湖~特征工程1、常用库、数据导入import pandas as pd import numpy as np import lightgbm as lgb import xgboost

平平淡淡,戒急用忍,一生学闭嘴。 3341

深入理解JDK动态代理?

简单理解动态代理 动态代理其实可以看成两部分组成,动态和代理,动态体现在自动生成,不用我们自己操心,代理则是找个人帮你做完事,也不用自己操心。 在日常开发程序中,其实存在大部分类是不能够轻易修改,也不敢改,但该类确实已无法满足现在的功能,那么怎么样进行功能增强呢?这里我们使用到动态代理模式,降低代码耦合度。 什么是静态代理? 有动态代理自然而然少不了静态代理,这里我们先演示下什么静态代理,对于动态代理就非常的好理解了。 场景演示: 先编写对库存进行减少操作的实现类 public interface ISto

龚小帅的博客 493

手把手教你用 Docker 构建自己的 CentOS 基础镜像

目录一、准备CentOS基础镜像二、撰写Dockerfile三、构建Docker镜像四、生成Docker容器 相信码农们经常会听说:虚拟机将成为历史,Docker才是未来 !!! 事实如此,现在大部分公司都在用 Docker 技术,想拥有自己的 Docker 专属镜像,那么 Dockerfile 就是入门,现在让我们一起来看一下 ------ 构建 Docker 镜像的全过程。 好文章 记得收藏...

Nick.Peng's Blogs 1万+

SPSSAU 中介效应分析实战:Bootstrap 95%置信区间解读的3个关键步骤

本文详细解析了SPSSAU中介效应分析中Bootstrap 95%置信区间的解读方法,涵盖三种典型场景的判别标准与应对策略。通过实战操作指南,帮助研究者准确判断中介效应显著性,特别针对边界模糊和小样本情况提供专业建议,提升统计分析结果的可靠性。

weixin_33691817的博客 496

使用JDK动态加载jar包和JavaBean反射机制实现基于接口代理的RPC分布式服务调用

分布式服务框架概述: 服务协调中间件:Zookeeper 负责服务注册、发现、通知。 服务提供方: 服务启动 使用 Spring ApplicationListener 接口 当容器中bean 完成加载时,变量容器中的bean 将RPC bean 发布到Zookeeper ,并保存到内存。 服务监听 使用netty 启动远程服务请求监听端口,接收到远程服务请求数据 通过反射方式调用本地服务。 服务消费方: 服务发现 通过主动拉取Zookeeper 数据和watch 监听服务变更。 服务调用..

青衫键客 600

在Unity3d使用yolov8的onnx模型

输出OUTPUTS是float32[1,35,8400],表示它会输出一个大小为[1, 35, 8400]的浮点数张量。这个输出张量的维度表示了检测到的目标的数量、每个目标的预测参数以及网格单元的数量。输出张量的第一个维度1表示检测到的目标数量。每个目标由35个值组成,表示目标的类别、置信度、边界框的坐标及10个特定点的位置。要取得8400个数据中置信度最高的数据,然后获取该数据其他channel的数据。运行结果:(蓝色是检测手的边框,红点是自定义的点),其中的四个数字分别表示不同的维度。

shenqingyu0605202324的博客 5601

大学生如何学习Java

本人是某二本院校的大二在读生,有幸考上我校重点专业:计算机科学与技术。经过两年的学习生涯我总结了学习Java的一些经验。下面我先说一下这个专业: 计算机科学与技术这个专业主要方向有两方面,一是硬件方面,二是软件方面。为什么说计算机科学与技术专业适合考研呢? 我觉得就是这个原因,什么都学的,学的都不精,不像软件工程专业主要是软件方面,学的精适合就业。 总之吧,在大二下半年你就应该有自己的规划了。是硬件?还是软件?。我相信大家一定会选择软件,毕竟软件学的还算精吧。 我相信大多数学校的教学规划中是把

djdjnxnd的博客 1458

Abaqus数据导出技巧:轻松处理大量XY数据

通过上述三种方法,我们可以解决Abaqus中大量XY数据导出的问题。无论是使用插件、编写Python脚本,还是利用Abaqus的内置报告功能,都可以帮助我们高效地处理数据。希望这篇博客能够帮助到你,提高你在Abaqus使用过程中的数据处理效率。

m0_62153576的博客 1915

AutoClip AI视频剪辑工具:Docker一键部署指南

摘要:AutoClip是一个基于Docker容器化部署的智能视频剪辑系统,采用微服务架构设计,包含Web界面、后端API、异步任务处理和Redis缓存等组件。系统支持一键快速部署,提供完整的监控和日志功能,最低要求4GB内存和10GB存储空间。部署过程仅需三个步骤:克隆代码、配置环境变量、启动容器服务。生产环境支持性能调优、数据持久化和网络安全管理。该系统解决了环境配置难题,实现"一次配置,到处运行"的目标,适合需要自动化视频处理的用户。

wjianwei666的专栏 1001

java反射(通熟易懂)

反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释。 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。 Apple apple = new Apple(); //直接初始化,「正射」 apple.setPrice(4); 上面这样子进行类对象的初始化,我们可以理解为「正」。 而反射则是一开始并不知道我要初...

weixin_43955984的博客 194

AI上推荐 之 NeuralCF与PNN模型(改变特征交叉方式)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 1万+

通熟讲解java线程

线程同步 我们可以在计算机上运行各种计算机软件程序。每一个运行的程序可能包括多个独立运行的线程(Thread)。 线程(Thread)是一份独立运行的程序,有自己专用的运行栈。线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。 当多个线程同时读写同一份共享资源的时候,可能会引起冲突。这时候,我们需要引入线程“同步”机制,即各位线程之间要有个先来后到,不能一窝蜂挤上去抢

ccit0519的专栏 1503

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

快熟弄懂Java的运算符

运算符: 分类: 算数运算符 赋值运算符 比较运算符|关系运算符 逻辑运算符 条件运算符 位运算符 操作数: 运算符左右两边的数 表达式: 运算符连接操作数整体叫做表达式 语句: 分号代表语句的结束 单目|一元运算符: 操作数为1个 +号 ++ -- 双目|二元运算符: 操作数为2个 + - * / 三目|三元运算符: 条件运算符 算数运算符: + ...

weixin_45744846的博客 130

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java判断熟数字_java大牛须知道的25点

1. 你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该了解UML,尤其是class、object、interaction以及statediagrams.2. 你需要学习Java语言的基础知识以及它的核心类库(collections、serialization、streams、networking、multithreading、reflection...

weixin_39578513的博客 88

java的数组和链表从熟系到陌生

数组和链表 java的数组是什么:数组是用来存放同一种数据类型的集合, 数组中每个元素都是相通的数据类型,数组就是在内存中划分一串连续的空间(数组作为对象允许使用new关键字进行内存分配),注意只能存放同一种数据类型(Object类型数组除外),数组是一种数据结构 举个栗子:string:就是char类型的数组。 ...

weixin_30393907的博客 90

苹果内购验证(熟称苹果支付回调)java版

简介: 苹果支付是直接由ios客户端调起苹果支付并支付完成后,java后台提供一个支付回调接口供ios客户端进行同步回调,只需要在该接口进行进行验证苹果支付是否支付成功,跟微信支付和支付宝支付不一样,不需要统一下单接口,不需要配置异步回调接口。 package cn.network.pay.apple; import com.alibaba.fastjson.JSONObject; import javax.net.ssl.*; import java.io.BufferedOutputStream

huangxingjie的博客 4939

java学习总结1:学习java的基本英语单词(必熟)!

----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------         学习java,必须要有一定的英语基础,特别是要看懂熟练写出的一些必备的单词,这是一个人的内功。 老师也教导我们,要打好良好的功底,很多大公司在面试的时候,考核面试者的全面抓实的基础的, 作为一个搞java研发的

442

kafka读写 java,面试官:你对Kafka比较熟? 那说说kafka日志段如何读写的吧?

(给ImportNew加星标,提高Java技能)转自:Yes引子之所以写这篇文章是因为之前面试时候被面试官问到(倒)了,面试官说:“你说你对Kafka比较熟?看过源码? 那说说kafka日志段如何读写的吧?”我心里默默的说了句 “擦…我说看过一点点源码,不是亿点点。早知道不提这句了!”,那怎么办呢,只能回家等通知了啊。 但是为了以后找回场子,咱也不能坐以待毙,日拱一卒从一点点到亿点点。今天我们就...

weixin_32199821的博客 163

“Java栈小将:灵活Maven,敏捷Gradle,微服架构我熟!“

马小帅:Web框架嘛,Spring Boot、Spring MVC、Spring WebFlux我都比较熟悉。其中,Spring Boot简化了项目的搭建过程,Spring MVC是传统的Web框架,而Spring WebFlux则是响应式编程的框架。面试官:(微笑)我们公司涉及多个业务领域,包括音视频场景、内容社区与UGC、电商场景等。面试官:马小帅,你好,欢迎参加我们公司的Java开发岗位面试。面试官:马小帅,你刚才提到对测试框架有所了解。面试官:(微笑)好的,今天的面试就到这里吧。

zhaomh2017的博客 384

php语法同java语法的基本区别(实例项目需求,php才能熟)

php语法同java语法的基本区别(实例项目需求,php才能熟) 一、总结 看下面    二、PHP基本语法以及和Java的区别 .表示字符串相加 ->同Java中的. $作为变量的前缀,除此之外,变量名称定义规则同Java 参数传递和方法返回时传引用需要加前缀& 示例代码: function f(&$a){}//方法参数值以引用形式传入 functioin...

weixin_33816946的博客 199

java 模板引擎_Spring Boot 如何快熟整合Thymeleaf模板引擎

前面介绍了Spring Boot的优点,然后介绍了如何快速创建Spring Boot 项目。不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html。今天我们主要来看看 Thymeleaf 在 Spring Boot 中的整合!Thymeleaf 简介Spring Boot 2主要支持页面模板是 Thym...

weixin_39876739的博客 64

java数组和链表6_java的数组和链表从熟系到陌生

s[1][2]=26;数组实现数据结构:数据结构的作用:模拟生活中的数据存储;对数据进行增删改查和数据库的区别对该同学信息进行增删改查数据库是把数据存到磁盘里面,他支持可调定式电脑存数据有两块区域,第一个是硬盘,第二个是内存。硬盘是永久储存,内存是临时的,但是内存数据快。通过需求分析 模拟数据存储的案例举个栗子:模拟LOL代号的存储,假设我现在是某只战队的教练,我需要安排上场的人员(不要问为什...

weixin_31176789的博客 87

JVM,Java虚拟机基础知识新手入门教程(超级通熟易懂)

一.写在前面   首先,本篇文章并没有涉及原理,而是在笔者撸了《深入理解Java虚拟机》好几遍的基础上讲解自己的经验,从一个新手到现在明白JVM是个什么玩意,怎么去理解和明白,讲解这样一个经验而已。这篇文章并对JVM并没有挖掘得很深,在下目前暂时也没有这个能力,只是以通熟易懂的方式,让读者理解JVM是个什么玩意。下面开始我的讲解。 二.谁说人神不得相爱——Java的跨平台   理解Ja...

weixin_30629653的博客 112
上一篇: Linux必学的网络操作命令
下一篇: Unicode, ANSI, UTF8
sunappro
博客等级 码龄20年 3粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值