[JavaSE] 运行原理

举报
Nick_Bears 发表于 2022/04/01 11:18:39 2022/04/01
【摘要】 Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。下面我们通过Java官方提供的数据来一起感受一 下,Java到底有多“火”。

 目录

1.1 java是啥?

1.2 为什么选择Java?

1.2.1 简单性

1.2.2 面向对象

1.2.3 分布式(微服务)

1.2.4 健壮性

1.2.5 安全性

1.2.6 体系结构中立

1.2.7 可移植性

1.2.8 解释型

1.2.9 高性能

1.2.10 多线程

1.2.11 动态性

1.3 Java的JDK是什么?

1.4 Java是世界上最好的语言吗?

1.5 HelloWorld详解 

1.5.1 main函数

1.5.2 注释

1.5.3 java三种打印方式

1.6 运行Java程序


      前言:大家好我是Nick,本人现在是大二的一位专科生,我加入了比特的大家庭,现在是一位小比特,因为即将面临明年的面试应聘,因此我现在会着手将Java完整的知识用分栏的方式展现给大家,同时也用于自主复习,欢迎各位小可爱们多多提意见哦!


 

1.1 java是啥?

      Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。下面我们通过Java官方提供的数据来一起感受一 下,Java到底有多“火”。

    

拜见老祖宗

      詹姆斯·高斯林(英语:James Gosling,1955年5月19日-),出生于加拿大,软件专家,Java编程语言的共同创始人之一,一般公认他为“Java之父”。

     

1.2 为什么选择Java?

JavaScript和Java有什么关系呢?

  

      要说到这俩的关系,举个例子。就相当于雷锋和雷 峰塔的关系或者说老婆和老婆饼的关系(没有一点关系...),最开始JavaScript叫liveScript,当时Java太火了,于是乎 liveScript更名为JavaScript借势宣传一波。。

  

1.2.1 简单性

      Java语法是C++语法的一个“纯净版本”。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重 载、虚基类等等。不仅如此,Java开发环境远远超出大多数其他编程语言的开发环境。

  

1.2.2 面向对象

      什么是面向对象? 这里我们用木匠打一个比方,一个“面向对象”的木匠始终关注的是所制作的椅子,第二位才是所使用的工具;而一个“非面向对象的”木匠首先考虑的是所使用的工具。 在Java的世界里,一切皆对象。 Java的面向对象特性与C++旗鼓相当,与C++的主要不同点在于多重继承。在Java中,取而代之的是更简单的接口概念。而且与C++相比,Java提供了更丰富的运行时自省功能。

   

1.2.3 分布式(微服务)

      Java有丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。

   

1.2.4 健壮性

      Java与C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性(对于曾经花费几个小时来 检查由于指针bug而引起内存冲突的人来说,一定很喜欢Java的这一特性)。不仅如此,Java编译器能够检测许多 在其他语言中仅在运行时才能够检测出来的问题。

  

1.2.5 安全性

      Java适用于网络/分布式环境。为了达到这个目标,在安全性方面投入了大量的精力。使用Java可以构建防病毒、防 篡改的系统 从一开始,Java就设计成能够防范常见的各种攻击:

  • 运行时堆栈溢出。蠕虫和病毒常用的攻击手段。
  • 破坏自己进程空间之外的内存。
  • 未经授权读写文件

  

1.2.6 体系结构中立

      编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,这些编译后的代 码就可以在许多处理器上运行。Java编译器通过生成与特定计算机体系结构无关的字节码指令来实现这一特性。精 心设计的字节码不仅可以很容易的在任何机器上解释执行,而且还可以动态地翻译成本地机器代码。

   

1.2.7 可移植性

      与C/C++不同,Java规范中没有“依赖具体实现的地方”。基本数据类型的大小以及有关运算都做了明确的说明。例 如,Java中的int永远是32位的整数,而在C/C++中,int可能是16位整数、32位整数,也可能是编译器提供商指定 的其他大小。在Java中,数据类型具有固定的大小,这消除了代码移植时令人头疼的主要问题。

  

1.2.8 解释型

      Java解释器可以在任何移植了解释器的机器上执行Java字节码。由于链接是一个增量式且轻量级的过程。所以开发过程也变得更加快捷,更加具有探索性。

  

1.2.9 高性能

      尽管对解释后的字节码性能已经比较满意,但在有些场合下可能需要更加高效的性能。字节码可以(在运行时刻) 动态的翻译成对应运行这个应用的特定cpu的机器码。

  

1.2.10 多线程

      Java在当时很超前。它是第一个支持并发程序设计的主流语言。多线程可以带来更好的交互响应和实时行为。并发 程序设计绝非易事,但是Java在这方面表现出色,可以很好的管理这个工作。

  

1.2.11 动态性

      Java与C/C++相比更加具有动态性。它能够适应不断发展的环境。库中可以自由的添加新方法和实例变量,而对客 户端没有任何影响。在Java中找出运行时类型信息十分简单(反射的特性,后续会学到)

      

1.3 Java的JDK是什么?

       JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA基础的类库。

     


JDK版本越高越好嘛?

      NO,NO,NO,并不是版本越高越好,因为大部分公司使用的是1.8版本,不会因为JDK新版本更新了,然后将你的代码全部适配到新版本。

    


JDK怎么安装?

进入软件公司的第一天,你需要干啥呢?

安装软件,配置环境!

你的领导只会对你说:"我们用的XX软件"!

你再问?信不信我打你!

由此可见,学好配置环境有多重要!

视频教程

    

     

史上最简单安装教程(戳我查看)

        

     

1.4 Java是世界上最好的语言吗?

不是,因为在每个领域都有更合适的编程语言。

  • C 语言无疑是现代计算机软件编程语言的王者,几乎所有的操作系统都是 C 语言写成的。C++ 是面向对象的 C 语 言,一直在不断的改进。
  • JavaScript 是能运行在浏览器中的语言,丰富的前端界面离不开 Javascript 的功劳。近年来的 Node.js 又在后端占 有一席之地。
  • Python 用于系统管理,并通过高性能预编译的库,提供 API 来进行科学计算,文本处理等,是 Linux 必选的解释 性语言。
  • Ruby 强于 DSL(领域特定语言),程序员可以定义丰富的语义来充分表达自己的思想。
  • Erlang 就是为分布式计算 设计的,能保证在大规模并发访问的情况下,保持强壮和稳定性。
  • Go 语言内置了并发能力,可以编译成本地代码。当前新的网络相关项目,很大比例是由 Go 语言编写的,如 Docker、Kubernetes 等。
  • 编写网页用 PHP,函数式编程有 Lisp/Scala,编写 iOS 程序有 Swift/Objective-C。 一句话概括,能留在排行榜之上的语言,都是好的语言,在其所在的领域能做到最好。

    

      那么,Java 语言到底有什么优势可以占据排行榜第一的位置呢?

      

      其一,语法比较简单,学过计算机编程的开发者都能快速上手。

    

      其二,在若干了领域都有很强的竞争力,比如服务端编程,高性能网络程序,企业软件事务处理,分布式计算, Android 移动终端应用开发等等。

   

1.5 HelloWorld详解 

1.5.1 main函数

//public: 访问修饰限定符。后期的文章会详细介绍

//class:关键字,用来定义一个类,类型【抽象的】

//HelloWorld  类的名称

//String[]  形式参数:数组

//下面的代码是java中main函数的固定写法,函数也称为方法

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

       

 注意事项:

  • 一个java文件中,只能有一个public类
  • 类名和文件名相同
  • 编程规范建议,左括号是紧跟着当前行的
  • 类名一定要采用大驼峰的形式命名

    

有人知道args是什么嘛?

下面先来看几张图~

会输出什么呢? 

 貌似是空的诶?但真的是空的嘛?

接着我输入Nick is very outgoing

神奇的事情发生了

 可见args是运行时的命令行参数

    

总结:

      通过上述代码,我们可以看到一个完整的Java程序的结构,Java程序的结构由如下三个部分组成:

  1. 源文件(扩展名为*.java):源文件带有类的定义。类用来表示程序的一个组件,小程序或许只会有一个类。类的内容必须包含在花括号里面。
  2. 类:类中带有一个或多个方法。方法必须在类的内部声明。
  3. 方法:在方法的花括号中编写方法应该执行的语句。
  4. 类存在于源文件里面;方法存在于类中;语句存在于方法中。

   

1.5.2 注释

      注释是为了让代码更容易被读懂而附加的描述信息. 不参与编译运行, 但是却非常重要。时刻牢记! 代码写出来是为了给人看的, 更是为了给三个月后的你自己看的。

    

public class HelloWorld {
    /**
     *文档注释:类或者方法的前面 
     */
    
    public static void main(String[] args) {
        for (int i = 0;  i < args.length; i++) {
            //System.out.println(args[0]); 行注释
            
            /*  块注释          
            System.out.println(args[0]);
            System.out.println(args[1]);
            System.out.println(args[2]);
            System.out.println(args[3]);*/
            System.out.println(args[i]);
        }
        System.out.println("HelloWorld");
    }
}

  

基本规则

Java中的注释主要分为以下三种

  • 单行注释:// 注释内容(用的最多)
  • 多行注释:/* 注释内容*/(不推荐)
  • 文档注释: /** 文档注释 */(常见于方法和类之上描述方法和类的作用),可用来自动生成文档。

     

注释规范

  1. 内容准确: 注释内容要和代码一致, 匹配, 并在代码修改时及时更新。
  2. 篇幅合理: 注释既不应该太精简, 也不应该长篇大论。
  3. 使用中文: 一般中国公司都要求使用中文写注释, 外企另当别论。
  4. 积极向上: 注释中不要包含负能量(例如领导SB);

      

接下来跑跑代码看!

  


   

  我擦!翻车了?不可映射的字符?!

这咋整呢?(戳我查看)


1.5.3 java三种打印方式

     

public class HelloWorld{
    /**
     *文档注释:类或者方法的前面 
     */
    
    public static void main(String[] args) {

	    System.out.print("打印不换行");

        System.out.println("打印换行");

        System.out.printf("%d\n",10);
    }
}

     

效果显示

    


1.5.4 关键字

   

       关键字是 Java 中的一些具有特定含义的单词

    

      定义的变量名不能和关键字冲突

    

1.6 运行Java程序

没有编译器代码咋跑起来呢?

  1. .java文件:源代码目前还在磁盘上,里头就是一大堆的字母,但是你没有编译器怎么编译?
  2. 编译之后会生成.class二进制文件,包含了当前类中的信息!

   

生成了.class文件了不起啊又能咋?

  1. 咋运行?java HelloWorld 就能运行了

   

为啥不是一个文件对应一个字节码文件?

  1. 用到哪个类就加载哪个,不会一股脑儿全部运行!

   

   

咱就先用DOS系统跑一波HelloWorld!

必要的形式感还是要滴!

为啥记事本和Nick的不一样呢?

因为我使用的是Notepad++

普通记事本当然也可以编辑呀~

   

1.新建一个HelloWorld.txt文件(文件名和类名保持一致),在里面编辑如下内容:

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

    

2.将文件名后缀由.txt改成.java

  --->  

  

我没有后缀啊?怎么改?

 其实很简单,Win+E 打开资源管理器

选择查看

勾选文件拓展名即可

   

3.咱们要开始编译啦

方法1:找到你文件创建的目录下,输入cmd,回车!(我是放在桌面上的)

    

方法2:Win+R 输入cmd回车

 输入cd Desktop(Nick是将HelloWorld.java放在桌面上的)

    

4.在DOS命令界面输入javac HelloWorld.java,然后回车,生成.class二进制文件

    

5.运行,字节码文件生成后,输入java HelloWorld 回车,看!出结果了!

      

      原理总结

  • JVM:java虚拟机,跑java程序的!这个JVM实际上是一个软件,由C/C++写的,编译后的.class跑到了JVM里,类似用软件实现了一个硬件(电脑)。JVM把对应的字节码拉取过来,然后执行。
  • 类名和文件名一定要保持一致!

            

问题:我好像没有安装JVM吧?

  • JDK:java开发者工具
  • JRE:java运行环境
  • JVM:java虚拟机

    

口号:一次编译(字节码文件) 到处运行(字节码文件)  只要你安装好了JDK!

       

设想:只要我通过javac 文件名编译来了java文件,生成了.class文件以后,那么.class文件发给别人,只要对方装了JDK,他就能直接运行这个文件,因为JDK包含了JRE和JVM!

       

   

总结:

      Java是一门半编译型、半解释型语言。先通过javac编译程序把源文件进行编译,编译后生成的.class文件是由字节 码组成的平台无关、面向JVM的文件。最后启动java虚拟机来运行.class文件,此时JVM会将字节码转换成平台能够 理解的形式来运行。

    

  • JRE(Java Runtime Environment):Java运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程 序运行的所需环境。
  • JDK(Java Development Kit):Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译 器javac与自带的调试工具Jconsole、jstack等。

      

Java程序运行需要经过编译,运行两个阶段。

  • 编译:javac 命令
  • 运行:java 命令

  


        

编译器Idea的安装

      IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构JavaEE支持、各类版本工具(gitsvn等)、JUnitCVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。

      eclipse,MyEclipse不使用,现在用的已经比较少了,vscode不建议新手使用,因为配置起来十分麻烦【大号的记事本而已】

IDEA安装(戳我查看)

视频教程


    

   

 喜欢Nick的文章,

感谢关注点赞加收藏  

     




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。