HelloWorld

笔记源于 视频教程Bilibili:狂神说Java 关注公众号:狂神说

HelloWorld

  1. 新建一个文件

    • 后缀改为.java
    • 注意文件名与类名一致 HelloWord.java
  2. 编写代码

    public class HelloWorld{
    	public static void main (String[] args){
    		System.out.println("HelloWorld!");
    	}
    }
    
  3. 编译javac HelloWorld.java 生成一个class文件

  4. 运行class文件, javac HelloWorld(不加.class)


程序运行机制

编译型

通过编译器(compiler)将源代码编译成机器码, 一般需经过编译(compile)、链接(linker)这两个步骤。
编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。

优点: 执行效率高。可以脱离语言环境独立运行。

缺点: 修改后需要重新编译。移植性差。

代表语言:C、C++、Pascal、Object-C

解释型

使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。

优点: 移植性强,只要平台提供相应的解释器,就可以运行源代码。

缺点:每次运行都需要将源代码解释称机器码并执行,效率较低;

代表语言: JavaScript、Python、PHP、Perl、Ruby

混合型

既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕。就出现了半编译型语言。比如C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行(博友回复指出)。软的政策限制了C#的推广。

Java生成字节码再在Java虚拟机中解释执行。

严格来说混合型语言属于解释型语言。C#更接近编译型语言。

image-20200505132634204

动态语言和静态语言

动态语言

是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。

主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。

静态语言

与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。

注意:

很多人认为解释型语言都是动态语言,这个观点是错的!Java是解释型语言但是不是动态语言,Java不能在运行的时候改变自己结构。反之成立吗?动态语言都是解释型语言。也是错的!Object-C是编译型语言,但是他是动态语言。得益于特有的run time机制(准确说run time不是语法特性是运行时环境,这里不展开)OC代码是可以在运行的时候插入、替换方法的。

C#也是动态语言,通过C#的反射机制可以动态的插入一段代码执行。所以我说C#是这个星球最好的编程语言。

动态类型语言和静态类型语言

动态类型语言

很多网上资料把动态类型语言和动态语言混为一谈,简直是误人子弟。动态类型语言和动态语言是完全不同的两个概念。动态类型语言是指在运行期间才去做数据类型检查的语言,说的是数据类型,动态语言说的是运行是改变结构,说的是代码结构。

动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。

主要语言:Python、Ruby、Erlang、JavaScript、swift、PHP、Perl。

静态类型语言

静态语言的数据类型是在编译其间确定的或者说运行之前确定的,编写代码的时候要明确确定变量的数据类型。

主要语言:C、C++、C#、Java、Object-C。

注意:

相当一部分程序员,也包括曾经的我,认为解释型语言都是动态类型语言,编译型语言都是静态类型语言。这个也是错的。swift是编译型语言但是它也是动态类型语言。C#和Java是解释型语言也是静态类型语言。

强类型语言和弱类型语言

强类型语言:

强类型语言,一旦一个变量被指定了某个数据类型,如果不经过强制类型转换,那么它就永远是这个数据类型。你不能把一个整形变量当成一个字符串来处理。

主要语言:Java、C#、Python、Object-C、Ruby

弱类型语言:

数据类型可以被忽略,一个变量可以赋不同数据类型的值。一旦给一个整型变量a赋一个字符串值,那么a就变成字符类型。

主要语言:JavaScript、PHP、C、C++(C和C++有争议,但是确实可以给一个字符变量赋整形值,可能初衷是强类型,形态上接近弱类型)

注意:

一个语言是不是强类型语言和是不是动态类型语言 也没有必然联系。Python是动态类型语言,是强类型语言。JavaScript是动态类型语言,是弱类型语言。Java是静态类型语言,是强类型语言。

posted @ 2020-05-06 15:46  小橘子ღ  阅读(624)  评论(2编辑  收藏  举报