Java程序运行机制及开发环境

Wesley13
• 阅读 866

Java既是编译型语言,又是解释型语言

java源文件首先需要通过javac编译生成后缀名为.class的字节码文件(与平台无关,只面向JVM),然后使用Java虚拟机将字节码解释成特定平台上的机器码运行。

###Java虚拟机JVM 不同平台上的JVM不同,但是都提供了相同的接口。

###开发Java准备

  1. 下载安装Java8的JDK,并将jdk的安装路径添加到环境变量中。
  2. 开发Java需要安装JDK,JDK包含Java编译器(javac命令工具)、Java运行时环境(JRE)、常用的Java类库等。
  3. JRE包含JVM,还包含类加载器、字节码校验器及大量的基础类库等环境支持。
  4. 如果只是运行Java程序,可以只安装JRE。

###第一个Java程序

  1. 编写第一个著名的程序:HelloWorld。

    pulic calss HelloWorld { public static void main(String[] args) { System.out.println("HelloWorld"); } }

  2. 使用javac命令编译java程序。

    • 命令行输入cmd,进入Java源文件所在的路径
    • 输入如下命令,其中destdir是目标生成路径 javac -d destdir HelloWorld.java 进入destdir路径下,可以看到已经生成了后缀名为.class的字节码文件
  3. 使用java命令解释执行字节码文件。

    • 运行如下命令执行程序 java HelloWorld
  4. 分析main()方法

    • JVM需要调用main()方法来调用类,使用public修饰符将main暴露出来
    • JVM通过该类来调用main()方法,没有该类的对象,用static修饰
    • 返回值给JVM,没有意义
    • 字符串数组形参,由JVM赋值

Java程序的基本规则

  1. Java是纯面向对象的语言,类是Java程序的最小程序单位。
  2. javac可以编译一个类,而解释执行一个类则需要以main方法为入口,main方法的写法是固定的。
  3. Java严格区分大小写,类名首字母大写,方法名第一个单词首字母小写,关键字小写。
  4. 一个java源文件最多只能定义一个public类,因源文件名需要与public类的类名相同。

###垃圾回收机制

  1. 显式进行垃圾回收的缺点
    • 忘记回收导致内存泄漏,降低系统性能
    • 错误回收程序核心类库的内存,导致系统崩溃
  2. Java虚拟机的堆内存用来保存类的对象,JVM的一个超级线程会进行检测,如果一个对象长时间不被引用GC会释放其所占用的内存空间,同时进行碎片整理将所占用的堆内存移到堆的一端,整理出新内存分配给其他对象。
  3. 使用GC的优点
    • 提高编程效率
    • 保护程序的完整性和安全性
  4. 使用GC的缺点
    • 垃圾回收在cpu空闲或者内存不足时进行,影响程序性能
  5. GC的特点
    • 只能回收JVM堆内存的内存空间,不能回收物理内存的资源
    • 将对象的引用变量设置为null可以暗示GC回收该对象
    • 使用GC回收对象之前,会先调用可恢复对象的finalize()方法可能将其变成可达状态。
    • 调用Runtime对象的gc()方法Runtime.getRuntime().gc()或者System.gc()仅仅是建议系统进行垃圾回收,不能精确控制
    • 使用如下命令运行程序显示每次垃圾回收后的提示信息 java -verbose:gc Test
    • 平常用的基本是强引用对象,除此之外还有软引用(SoftReferance,用于对内存敏感的程序中),弱引用(WeakReferance,不管内存强制回收),虚引用(PhantomReferance,只能和引用队列一起使用跟踪对象被垃圾回收的状态)。

###使用IDE工具

  1. 下载安装Eclipse开发工具
  2. 配置自动补全 Windows-Preferences-Java-Editor-Content Asist,将Auto activation triggers for Java改为“.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”即可
  3. 熟悉快捷键 自动导入相关包:Ctrl+Shift+O

###使用jar命令

  1. 创建jar包 jar cvf test.jar test
  2. 查看jar包 jar tvf test.jar
  3. 解压缩jar包 jar xvf test.jar
  4. 更新jar包里的文件 jar uvf test.jar Filename

###发布Java应用程序

  1. 利用Windows批处理,添加如下执行命令 java package.MainClass 不显示命令行窗口用以下命令 start javaw package.MainClass
  2. 创建可执行jar包 指定主类的类名作为程序入口 jar cvfe test.jar package.MainClass test 运行上面的jar包命令java -jar test.jar或者javaw test.jar

###获得用户输入

  1. 给main()方法字符串数组形参赋值 运行Java程序时在类名后紧跟一个或多个字符串,用空格隔开,则JVM将这些字符串依次赋值给args数组元素 java test str1 str2 str3
  2. 使用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"); }

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
限时发布!纯手打“RocketMQ笔记”
1JVM的内存区域布局java代码的执行步骤有三点java源码文件编译器字节码文件字节码文件JVM机器码机器码系统CPU执行JVM执行的字节码需要用类加载来载入;字节码文件可以来自本地文件,可以在网络上获取,也可以实时生成。就是说你可以跳过写java代码阶段,直接生成字节码交由JVM执行其中Jav
Wesley13 Wesley13
3年前
java基础知识随身记
2018年11月12日20:51:35一、基础知识:1、JVM、JRE和JDK的区别:JVM(JavaVirtualMachine):java虚拟机,用于保证java的跨平台的特性。  java语言是跨平台,jvm不是跨平台的。JRE(JavaRuntimeEnvironment):java的运行环境,包括jvmjava的核心类
Easter79 Easter79
3年前
tomcat配置
要使用Tomcat,首先需要安装jdk,JDK的全称是JavaDevelopmentKit,是Sun公司免费提供的Java语言的软件开发工具包,其中包含Java虚拟机(JVM)jvm虚拟机的作用就是把高级语言》编译成字节码》通过运算得出结果》最后把东西发布利用JVM解释这些字节码文件,从而保证了Java的跨平台性安
Wesley13 Wesley13
3年前
Java是如何实现跨平台的
一.Java是如何实现跨平台的1.我们编写的Java源码,编译后会生成一种.class文件,称为字节码文件2.Java虚拟机JVM就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。!(https:/
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了