Java程序运行机制及开发环境
Java既是编译型语言,又是解释型语言
java源文件首先需要通过javac编译生成后缀名为.class的字节码文件(与平台无关,只面向JVM),然后使用Java虚拟机将字节码解释成特定平台上的机器码运行。
Java虚拟机JVM
不同平台上的JVM不同,但是都提供了相同的接口。
开发Java准备
- 下载安装Java8的JDK,并将jdk的安装路径添加到环境变量中。
- 开发Java需要安装JDK,JDK包含Java编译器(javac命令工具)、Java运行时环境(JRE)、常用的Java类库等。
- JRE包含JVM,还包含类加载器、字节码校验器及大量的基础类库等环境支持。
- 如果只是运行Java程序,可以只安装JRE。
第一个Java程序
- 编写第一个著名的程序:HelloWorld。
pulic calss HelloWorld
{
public static void main(String[] args)
{
System.out.println("HelloWorld");
}
}
- 使用javac命令编译java程序。
- 命令行输入cmd,进入Java源文件所在的路径
- 输入如下命令,其中destdir是目标生成路径
javac -d destdir HelloWorld.java
进入destdir路径下,可以看到已经生成了后缀名为.class的字节码文件
- 使用java命令解释执行字节码文件。
- 运行如下命令执行程序
java HelloWorld
- 运行如下命令执行程序
- 分析main()方法
- JVM需要调用main()方法来调用类,使用public修饰符将main暴露出来
- JVM通过该类来调用main()方法,没有该类的对象,用static修饰
- 返回值给JVM,没有意义
- 字符串数组形参,由JVM赋值
Java程序的基本规则
- Java是纯面向对象的语言,类是Java程序的最小程序单位。
- javac可以编译一个类,而解释执行一个类则需要以main方法为入口,main方法的写法是固定的。
- Java严格区分大小写,类名首字母大写,方法名第一个单词首字母小写,关键字小写。
- 一个java源文件最多只能定义一个public类,因源文件名需要与public类的类名相同。
垃圾回收机制
- 显式进行垃圾回收的缺点
- 忘记回收导致内存泄漏,降低系统性能
- 错误回收程序核心类库的内存,导致系统崩溃
- Java虚拟机的堆内存用来保存类的对象,JVM的一个超级线程会进行检测,如果一个对象长时间不被引用GC会释放其所占用的内存空间,同时进行碎片整理将所占用的堆内存移到堆的一端,整理出新内存分配给其他对象。
- 使用GC的优点
- 提高编程效率
- 保护程序的完整性和安全性
- 使用GC的缺点
- 垃圾回收在cpu空闲或者内存不足时进行,影响程序性能
- GC的特点
- 只能回收JVM堆内存的内存空间,不能回收物理内存的资源
- 将对象的引用变量设置为null可以暗示GC回收该对象
- 使用GC回收对象之前,会先调用可恢复对象的finalize()方法可能将其变成可达状态。
- 调用Runtime对象的gc()方法Runtime.getRuntime().gc()或者System.gc()仅仅是建议系统进行垃圾回收,不能精确控制
- 使用如下命令运行程序显示每次垃圾回收后的提示信息
java -verbose:gc Test
- 平常用的基本是强引用对象,除此之外还有软引用(SoftReferance,用于对内存敏感的程序中),弱引用(WeakReferance,不管内存强制回收),虚引用(PhantomReferance,只能和引用队列一起使用跟踪对象被垃圾回收的状态)。
使用IDE工具
- 下载安装Eclipse开发工具
- 配置自动补全
Windows-Preferences-Java-Editor-Content Asist,将Auto activation triggers for Java改为“.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”即可 - 熟悉快捷键
自动导入相关包:Ctrl+Shift+O
使用jar命令
- 创建jar包
jar cvf test.jar test
- 查看jar包
jar tvf test.jar
- 解压缩jar包
jar xvf test.jar
- 更新jar包里的文件
jar uvf test.jar Filename
发布Java应用程序
- 利用Windows批处理,添加如下执行命令
java package.MainClass
不显示命令行窗口用以下命令
start javaw package.MainClass
- 创建可执行jar包
指定主类的类名作为程序入口
jar cvfe test.jar package.MainClass test
运行上面的jar包命令java -jar test.jar
或者javaw test.jar
获得用户输入
- 给main()方法字符串数组形参赋值
运行Java程序时在类名后紧跟一个或多个字符串,用空格隔开,则JVM将这些字符串依次赋值给args数组元素
java test str1 str2 str3
- 使用Scanner类从文件、输入流、字符串中解析数据,它提供了两个方法:
- 判断是否还有下一项基本数据/字符串/一行:hasNextInt()、hasNext()、hasNextLine()
- 获取下一个输入项:nextInt()、next()、nextLine()
- 默认使用空白符作为分隔符,可以使用
useDelimiter("\n")
方法自定义分隔符
下面的示例程序涉及文件输入,并没有进行异常处理及文件关闭!
//获取键盘输入
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = (String) sc.next();
System.out.println("str");
}
//获取文件输入
Scanner sca = new Scanner("Test.java");
//使用回车作为分隔符
sca.useDelimiter("\n");
while (sca.hasNext()) {
String str = (String) sca.next();
System.out.println("str");
}
Java程序运行机制及开发环境的更多相关文章
- 02 基础 卸载JDK 安装JDK Java程序运行机制
基础 JDK:Java Development Kit(Java开发者工具 包含JRE和JVM) JRE:Java Runtime Environment(java运行时环境,包含JVM) JVM:J ...
- Java程序运行机制
Java程序运行机制 编译型(compile) 它有一个负责翻译的程序(编译器),将我们写的 Java 源代码转为计算机可执行的代码 举个例子:把一本中文书翻译成英文书 应用:操作系统.C.C++ 解 ...
- 1、Java语言概述与开发环境——Java程序运行机制
Java语言是一种特殊的高级语言,它既有解释型语言的特性,也具有编译型语言的特征,因为Java要经过先编译后解释两个步骤. 一.高级语言的运行机制 计算机高级语言按程序的执行方式可以分为编译型和解释型 ...
- 基础知识《零》---Java程序运行机制及运行过程
Java运行机制 Java虚拟机(Java Virtual Machine):Java虚拟机可以理解成一个以字节码为机器指令的CPU:对于不同的运行平台,有不同的虚拟机:Java虚拟机机制屏蔽了底层运 ...
- 5.Java程序运行机制
一.编译型和解释型语言区别 计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以任何的高级语言编写的程序都必须转换成计算机语言,也就是机器码.而这种转换的方式有两种: 编译 ...
- 2.Java程序运行机制
1.编译型:compile,把所有东西翻译好,若有更新需要重新全部翻译.执行速度够快,对操作系统要求比较低.开发操作系统时用到编译型语言,例如c/c++...运行时需编译整个程序 2.解释性:运行一个 ...
- 谈谈java的运行机制
1.高级语言的运行机制 我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的 ...
- java的运行机制(基础)
1:高级语言的运行机制: 我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写 ...
- Java的运行机制
Java程序运行机制 编译型(操作系统 c/c++) 解释型(网页 不追求速度) 程序运行机制
随机推荐
- 在统一软件开发过程中使用UML
如何在统一软件开发过程中使用UML? 起始阶段常用UML图 在起始阶段,通常有用例图.类图.活动图.顺序图等UML图的参与. 获取用户需求之后首先要将这些需求转化为系统的顶层用例图. 在确定了用例之后 ...
- xml 的 <![CDATA["URL"]]>
<![CDATA["URL"]]>:用于 xml 处理特殊字符,比如:& <PolicyURL><![CDATA[ http://ectp.t ...
- python模板字符串和格式化字符串
模板字符串:用string模块里的Template Template()里面把字符串中某个值用设置变量${key}的方式先写好,然后在substitute()的方式把变量用其他值代替,就完成了字符串的 ...
- 转:C#线程系列讲座(1) BeginInvoke和EndInvoke方法
转载自:http://www.cnblogs.com/levin9/articles/2319248.html 开发语言:C#3.0IDE:Visual Studio 2008本系列教程主要包括如下内 ...
- SQL语句执行性能
通过设置STATISTICS我们可以查看执行SQL时的系统情况.选项有PROFILE,IO ,TIME.介绍如下: SET STATISTICS PROFILE ON:显示分析.编译和执行查询所需的时 ...
- Errors occurred during the build. Errors running builder 'Validation' on pro
选择项目-->右键-->Properties-->Builders 右面有四个选项,把Validation前面勾去掉
- Java开发软件安装及配置
2017-6-1 1.jdk 1.8.0_131 安装JDK 选择安装目录 安装过程中会出现两次 安装提示 . 第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的 ...
- 关于Eclipse新建Dynamic Web Projecj默认未创建web.xml的问题
当使用eclipse新建Dynamic Web Projecj时,由于J2EE技术规范的更新,当使用Dynamic web module version默认版本为3.0时,将默认不会创建web.xml ...
- pytorch种, 一维Conv1d, 二维Conv2d
pytorch之nn.Conv1d详解 之前学习pytorch用于文本分类的时候,用到了一维卷积,花了点时间了解其中的原理,看网上也没有详细解释的博客,所以就记录一下. Conv1dclass tor ...
- c++ STL中的next_permutation
default (1) template <class BidirectionalIterator> bool next_permutation (BidirectionalIterato ...