认识Java
java语言的执行过程
-
编写纯文本文件 .java
-
经过javac编译器(java complier)编译 .class
.class是二进制的字节码
在源文件中定义几个类,就会生成几个 -
由JVM运行 .class
JVM把字节码编译成可以在处理器上运行的高性能的本地代码(native code),机器码
java是一种介于编译型和解释型语言之间的语言
我们需要格外注意的是 .class->机器码
这一步。在这一步 JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。而且,有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),所以后面引进了 JIT(just-in-time compilation) 编译器,而 JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的语言 。
终端运行代码,先javac编译,再java运行
反编译
Java 特性
1.Simple 简单
Java的语法实际上是C++语法的精华部分。Java语法简单,Java没有复杂的类型(structures,unions)以对象(Class)描述一切;Java取消了显式的指针运算,将其隐藏于对象的构造中(initialization, constructor);Java所有类型都是确定的(强类型),方便管理,具有强大的移植性;Java运行于虚拟机(virtual machine)同时也有JIT技术将Java代码直接转化为机器码,运行性能优良。
2.object-oriented 面向对象
面向对象不同于面向结构编程,面向结构编程先考虑局部,而面向对象先考虑整体,设计优先。Java没有C++的多继承概念,转而用轻量化的interface声明对象的功能;Java是类单继承的,其公共父类是Object,描述了Java中的对象应该遵守的规范;Java单继承表明继承是一种非普遍关心,如无必要不要使用,在增强类的功能时,优先考虑在对象内部声明组合对象和使用接口提供的服务。
3.distributed 分布性
Java类库实现了TCP/IP、HTTP、FTP等网络协议,很容易进行网络编程。比如处理TCP/IP的socket;处理HTTP的servlet。
4.robust 健壮性
Java是强静态语言,在编译期间就可以检测大部分类型错误;Java引入了泛型<>进一步增强了编译期的容错性,且提供了更强大的结构化编程工具;Java摒弃了指针,交由JVM自动管理内存,避免了显式调用导致的pointer bug。
5.secure 安全性
Java运行于JVM中,但是不可避免的要和本地代码交互,JVM提供了一层安全性,但是不代表Java代码在Java运行的主机上绝对安全,但这需要高超的技术。相比互联网上只通过数字签名的方式加密,Java的技术安全性更高。
6.architecture-neutral 跨平台
Java代码首先通过编译器转化为JVM可以运行的字节码,而JVM是独立于操作系统和硬件的一种更高一层的抽象,JVM基于栈实现机器的功能,具有强大的硬件兼容能力。JVM的存在保证了Java的跨平台性。
7.portable 可移植性
Java所有类型都是强制规范的,Java的API也完全屏蔽了底层的差异,结合JVM,Java具有强大的可移植性。
8.high-performance 高性能
Java通过JIT技术,在运行时将热点代码直接翻译为机器码,提高了Java在JVM上的运行效率,保证了Java的高性能。
9.multithread 多线程
Java提供了功能强大的多线程类库。
10.dynamic 动态
Java的Class存储了对象的类型信息,通过反射技术可以在运行时构建新的对象,增强对象的方法。这为Java提供了强大的动态能力,增加了Java编程的技术性和灵活性
JDK
Java Platfrom
Java平台是运行在其他平台(操作系统:软件+硬件)的软件系统
有两个组件:
-
The Java Virtual Machine 虚拟机
针对不同的操作系统有不同的虚拟机,因此java程序可以一次编译,到处运行
-
The Java Application Programming Interface Java 应用程序编程接口(API)
是一个组件集合(分为类库和接口库,这些库被称为包)
-
JDK(The Java SE Development Kit )是面向Java开发人员的SDK(Software Development Kit)
-
JRE(Java Runtime Enviroment)Java运行环境
版本更新
java8最常用- Oracle JDK是Open JDK(JDK的核心,开源)的一个实现,更加稳定高效
- Oracle JDK是Open JDK(JDK的核心,开源)的一个实现,更加稳定高效
认识java程序
示例
//输出hello world
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
注释
-
多行注释 /* text* /
-
单行注释 //text
- 文档注释
/** documentation */
Javadoc(文档注释)详解 (biancheng.net)
根据不同的标签编写注释,最后利用javadoc命令可以生成一个html格式的程序说明文档
main方法
public static void main(String[] args)
-
public static 修饰符
- 顺序是约定俗成的
-
void 返回值
-
main 函数名
- 是一个程序的入口
-
args 命令行参数数组
-
是程序运行时,系统传给程序的参数
-
名字是约定俗成的
-
java命令行参数详解 - 掘金 (juejin.cn)
-