Java的书挺多,网上的Java教程也是种类繁多,有写的好的,写的不咋地的也有,容易让人越看越晕,微微老师想创新一下,将Java和Python对比学习,毕竟两者可谓当前最主流的后端开发语言,并且是人工智能与大数据的不二之选,若能一石二鸟,两者兼备,岂不悦哉?

先说句抱歉的话,微微老师学时有限,知识浅薄,只是为了让大家理解,有时候换个角度看问题,反而有意想不到的收获。

一、Java起步

Java运行需要安装JDK,这点与Python有点像,但又有所不同,Java介于编译型语言和解释型语言之间。编译型语言如C、C++,代码是直接编译成机器码执行,但是不同的平台(x86、ARM等)CPU的指令集不同,因此,需要编译出每一种平台的对应机器码。Python是解释型语言,不存在这个问题,可以由解释器直接加载源码然后运行,代价是运行效率较低。而Java是将代码编译成一种“字节码”,它类似于抽象的CPU指令,然后,针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”的效果。当然,这是针对Java开发者而言。对于虚拟机,需要为每个平台分别开发。为了保证不同平台、不同公司开发的虚拟机都能正确执行Java字节码,SUN公司制定了一系列的Java虚拟机规范。

随着Java的发展,SUN给Java又分出了三个不同版本:

  • Java SE:Standard Edition

  • Java EE:Enterprise Edition

  • Java ME:Micro Edition

这三者之间是啥关系呢?

┌───────────────────────────┐
│Java EE                    │
│    ┌────────────────────┐ │
│    │Java SE             │ │
│    │    ┌─────────────┐ │ │
│    │    │   Java ME   │ │ │
│    │    └─────────────┘ │ │

│ └────────────────────┘ │

└───────────────────────────┘

因此推荐大家的Java学习路线图如下:

  1. 首先要学习Java SE,掌握Java语言本身、Java核心开发技术以及Java标准库的使用;

  2. 如果继续学习Java EE,那么Spring框架、数据库开发、分布式架构就是需要学习的;

  3. 如果要学习大数据开发,那么Hadoop、Spark、Flink这些大数据平台就是需要学习的,他们都基于Java或Scala开发;

  4. 如果想要学习移动开发,那么就深入Android平台,掌握Android App开发。

无论怎么选择,Java SE都是Java的核心技术!本文及之后的教程就是基于的Java SE内容介绍。

二、程序--"Hello,world!"

现在大家开始编写Java的第一个程序,几乎所有编程语言的第一个程序都是在屏幕上打印"Hello,world!"。

下面大家可以分别用Java和Python实现这一功能,对比二者区别。

Java1代码:

  •  
public class Java1 {    public static void main(String[] args) {        System.out.println("Hello, world!");    }}

Python1代码:

  •  
print("Hello, world!")

Java1运行结果:

先用javac命令把java1.java编译成字节码文件java1.class,然后,用java命令执行这个字节码文件。

Java基础 VS Python基础学习1_python

Java基础 VS Python基础学习1_字段_02

Python1运行结果:

Java基础 VS Python基础学习1_字节码_03

三、程序--变量

Java1代码:

  •  
public class Java1 {    public static void main(String[] args) {        int x = 100; // 定义int类型变量x,并赋予初始值100        System.out.println(x); // 打印该变量的值    }}

Python1代码:

  •  
x = 100print(x)

Java1运行结果:

Java基础 VS Python基础学习1_字段_04

Python1运行结果:

Java基础 VS Python基础学习1_字段_05

四、程序--运算

Java1代码:

  •  
public class Java1 {    public static void main(String[] args) {        int x = 100; // 定义int类型变量x,并赋予初始值100        System.out.println(x); // 打印该变量的值,观察是否为100        x = 200; // 重新赋值为200        System.out.println(x); // 打印该变量的值,观察是否为200    }}

Python1代码:

  •  
x = 100print(x)x = 200print(x)

Java1运行结果:

Java基础 VS Python基础学习1_字节码_06

Python1运行结果:

Java基础 VS Python基础学习1_字节码_07

五、程序--类

Java1代码:

  •  
class Person {    public String name;    public int age;}public class java1 {    public static void main(String[] args) {        Person li = new Person();        li.name = "Li Lei"; // 对字段name赋值        li.age = 12; // 对字段age赋值        System.out.println(li.name); // 访问字段name        System.out.println(li.age); // 访问字段name
Person han = new Person(); han.name = "Han Mei Mei"; han.age = 15; System.out.println(han.name); // 访问字段name System.out.println(han.age); // 访问字段name }}

由上面代码不难看出,它定义了一个Person类,分别有两个属性,名字和年龄。然后定义了两个类的实例,分别叫做lihan,它们各自有自己对应的属性信息并将其打印输出。下面大家可以看看Python同样实现这一功能(定义一个Person类,分别有两个属性,名字和年龄。然后定义了两个类的实例,分别叫做lihan)代码是怎么写的。

Python1代码:

  •  
class Person:    def __init__(self, name, age):      self.name = name      self.age = age     li = Person('LiLei',12)han = Person('HanMeiMei',15)print(li.name)print(li.age)print(han.name)print(han.age)

Java1运行结果:

Java基础 VS Python基础学习1_字节码_08

Python1运行结果:

Java基础 VS Python基础学习1_java_09