JDK和JRE的区别?main方法的注意点?强制和自动类型转换?

简介: JDK和JRE的区别?main方法的注意点?强制和自动类型转换?

🛫 JDK和JRE傻傻分不清?

 好歹也是学了那么长时间的Java了,强烈的直觉告诉我JDK、JRE这俩指的肯定不是一个东西,一看书才知道我的直觉是真滴准(夸夸自己),既然不一样,那么接下来就扒一扒JDK和JRE的野史吧。

 JDK 是指Java Development Kit 也就是我们常说的Java开发工具包,是程序员编写Java程序时必须使用的软件。JRE 是指Java Runtime Environment 也就是Java的运行时环境,是程序运行时必须依赖的软件。那么我们想要使用Java这门语言进行编程的话,究竟需要安装哪个呢?答案是我都要,一个编译一个运行缺一不可。不过当你下载了JDK之后就会发现,在jdk的安装目录下会有一个的jre文件夹,也就是意味着我们只需要下载jdk即可。jdk的下载安装配置十分简单:点击我仅需四步即可完成

 既然是野史就说一说大家可能不知道的知识点,在1998~2006年之间,开发工具包被称为是SDK(Software Development Kit)后更名JDK,在某些场合中任然会见到这个术语;同一时间段内Java所出的版本被统称为java 2。看到这个名词不知道大家会不会联想到J2EE,猜的没错 J2EE的全称就是Java 2 Platform Enterprise Edition也就是Java 2 平台企业版,是在SUN公司领导下多家公司(Oracle、IBM、BEA等)共同制定的一套广泛认可的企业级分布式应用程序开发规范,后来强大如J2EE还是被Spring框架所冲击,导致这一切的就是那个恐怖如斯的男人——罗德·约翰森(Rod Johnson)



🛫 HelloWorld的输出都经历了啥?

 以HelloWorld程序为例介绍java程序开发的几个步骤:😶程序员编写HelloWorld.java文件(源代码文件)🤔计算机使用javac.exe程序将HelloWorld.java文件编译成HelloWorld.class文件(字节码文件)🤨计算机使用java.exe程序将HelloWorld.class文件送到JVM中运行😲运行的过程中随时向核心类库中调用Java编写好的程序来支撑自己编写程序的运行

image.png手动操作编译运行的过程中有几个注意点:


1、编写的源代码文件以.java作为拓展名,放在C盘以外的盘符下,显示文件的拓展名防止文件的拓展名不是.java,否则会报javac: 找不到文件的错误

2、使用java.exe运行字节码文件的时候,HelloWorld后面没有拓展名


🛫 Java的三个版本都是啥?

Java SE(Java Standard Edition):标准版

Java EE(Java Enterprise Edition):企业版

Java ME(Java Micro Edition):微型版



🛫 关于main方法你都知道啥?

public static void main(String[] args)

public: main方法的访问权限为public,方便虚拟机直接调用

static: 静态方法,虚拟机不用创建该类的对象即可调用它内部的main方法

void: 没有返回值,也就是说返回值为空

String[] args: 在使用命令行执行Java程序的时候,会通过命令行参数传递一些数据,这些数据就会被名为args的字符串数组所接收


 首先,根据Java语言的开发规范,main方法必须被声明为public,当然只是规范而不是必须。如果想要使用private或者protected不将main方法对外开放的话也是可以的,而且源代码文件依旧会被正常编译为字节码(.class)文件,只不过在运行的时候会报"Main method not public"的异常错误。

image.png  出现上述情况的原因是:类加载后main方法被虚拟机所调用执行,但是由于main方法并不是public的,导致虚拟机无法调用该方法出现异常。从以上的结论中我们就可以推知,如果在intellij IDEA中不将main方法的访问权限设置为public的话,就会导致main方法左侧不会出现供代码运行的绿色小三角图标  image.pngmain方法是Java程序的入口,所以每个Java程序都必须有一个main方法,但并不代表着每个类都必须有main方法



🛫 强制and自动类型转换都是啥?

 Java是一种强类型语言,这就意味着我们在编译之前就应该为每一个变量声明一种类型。而在Java中数据类型又被分为基本数据类型和引用数据类型,基本数据类型又被分为四类八种,除了基本数据类型之外的所有数据都是引用数据类型自动类型转换

image.png

 下面这张图片中,揭示了基本数据类型间的自动转换关系。箭头之间具有传递性,实线箭头代表着无精度损失的转换,虚线代表转换会伴随着数据精度的损失。其中char转int会将char字符对应的ASCII码赋给int型变量。  表达式(用一个二元运算符连接两个值)中的自动类型转换,小范围的值会自动转换为较大范围类型的值参与运算,所以说表达式运算的最终结果由最高类型的值决定。而且byte、short、char类型的值不管如何,都是直接转换成int参与远算,所以说(byte)+(byte)=(int),其他两种类型也是如此


强制类型转换

 由自动类型转换可知,int类型旳值在必要的时候会自动转换为double类型,但是当我们需要将double转int的时候该怎么办呢?这个时候就要通过强制类型转换了。

 浮点型强转为整型,直接丢掉小数只保留整数部分,而并不是简单的将结果四舍五入,Math.round()方法可以四舍五入(返回值是long型)。如果在强制转换的过程中,数值超过小范围取值的话,结果将会被截断成两个完全不同的值,eg:(byte)1500 = -36,原理如下:

image.png 显式转换一般就是强制类型转换,隐式转换除了自动类型转换还有一种,那就是结合赋值运算符,也就是+=、-=等。如果这种运算符得旳结果类型与左侧的的类型不一样且无法进行自动类型转换,就会默认使用强制类型转换将右侧的类型强转为左侧的数据类型

 整型值和布尔值之间无法进行相互转换,无论是自动转换还是强制转换都不可以


最后,给两道题自测一下类型转换的掌握程度字丑,勿怪😳


相关文章
|
2月前
|
Java
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
335 3
|
1月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
27 1
|
1月前
|
Java
Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
这篇文章详细分析了Java中HashMap的源码,包括JDK8与JDK7的区别、构造函数、put和get方法的实现,以及位运算法的应用,并讨论了JDK8中的优化,如链表转红黑树的阈值和扩容机制。
26 1
|
1月前
|
Dubbo Java 应用服务中间件
剖析Tomcat线程池与JDK线程池的区别和联系!
剖析Tomcat线程池与JDK线程池的区别和联系!
109 0
剖析Tomcat线程池与JDK线程池的区别和联系!
|
3月前
|
存储 Java
【Java集合类面试七】、 JDK7和JDK8中的HashMap有什么区别?
JDK7中的HashMap使用数组加链表解决冲突,而JDK8增加了红黑树结构以优化链表过长时的性能,提高查找效率。
|
3月前
|
API
JDK8的stream有求和方法吗?
【8月更文挑战第20天】JDK8的stream有求和方法吗?
133 3
|
3月前
|
Java
JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决
JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决
|
3月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
249 0
|
3月前
|
Java 编译器 开发工具
JDK vs JRE:面试大揭秘,一文让你彻底解锁Java开发和运行的秘密!
【8月更文挑战第24天】JDK(Java Development Kit)与JRE(Java Runtime Environment)是Java环境中两个核心概念。JDK作为开发工具包,不仅包含JRE,还提供编译器等开发工具,支持Java程序的开发与编译;而JRE仅包含运行Java程序所需的组件如JVM和核心类库。一个简单的"Hello, World!"示例展示了两者用途:需借助JDK编译程序,再利用JRE或JDK中的运行环境执行。因此,开发者应基于实际需求选择安装JDK或JRE。
56 0
|
3月前
|
缓存 Java 编译器
JRE、JDK、JVM 和 JIT 之间的区别详解
【8月更文挑战第22天】
132 0