当前位置: 首页 > news >正文

【Java基础】Java语言特性

认识Java

java语言的执行过程

  1. 编写纯文本文件 .java

  2. 经过javac编译器(java complier)编译 .class

    .class是二进制的字节码
    在源文件中定义几个类,就会生成几个

  3. 由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的核心,开源)的一个实现,更加稳定高效
      在这里插入图片描述

认识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)
      在这里插入图片描述

    • 在这里插入图片描述

http://www.lryc.cn/news/12649.html

相关文章:

  • python进阶--Numyp库(一)
  • CV学习笔记-Inception
  • 注意力机制笔记——结合沐神和B站老弓up主
  • 建议收藏,轻松搞懂区块链
  • php设计一个新春祝福墙
  • KubeSphere 社区双周报 | OpenFunction 集成 WasmEdge | 2023.02.03-02.16
  • 数字IC/FPGA 秋招知识点不全面整理
  • 你知道java8是如何排序Map嘛?
  • 【李忍考研传】一、李忍
  • 测牛学堂:软件测试python深入之类和对象的属性和方法总结
  • css实例--新闻页面
  • SpringCloudGateway 动态转发后端服务
  • 使用canvas写一个flappy bird小游戏
  • KVM-2、虚拟化基础
  • 设计模式之观察者模式与访问者模式详解和应用
  • [SSD固态硬盘技术 18] Over-Provisioning (OP 预留空间)详解,谁“偷”走了SSD的容量?
  • spring注解方式整合Dubbo源码解析
  • 大数值金额大写转换(C语言)
  • 迷宫问题图解 : 基于骨架提取、四邻域
  • 设计模式 - 如何在库和主程序之间互相调用数据和函数
  • Redis面试题:1~2亿条数据需要缓存,请问如何设计这个存储案例
  • 程序员必备的软技能-《如何阅读一本书》
  • Java数据结构-栈、队列常用类(Stack、ArrayDeque、LinkedLList)
  • 拯救了大批爬虫程序员,因为一个简单的神器
  • 2023年美赛C题Wordle预测问题三、四建模及Python代码详细讲解
  • 相关性-回忆录(持续更新)
  • (必备技能)使用Python实现屏幕截图
  • 「数据仓库」怎么选择现代数据仓库?
  • 6.3 使用 Swagger 生成 Web API 文档
  • Day894.加锁规则的一些问题 -MySQL实战