Java-1-Setup

Introduction: Java

Java是一门面向对象编程语言(OOD, Object-Oriented Design),不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java Properties

从互联网到企业平台,Java是应用最广泛的编程语言,原因在于:

  • Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行;

  • Java程序易于编写,而且有内置垃圾收集,不必考虑内存管理;

  • Java虚拟机拥有工业级的稳定性和高度优化的性能,且经过了长时期的考验;

  • Java拥有最广泛的开源社区支持,各种高质量组件随时可用。

从上面的特点,我们可以看到java一些特性:

  1. 简单性
    Java 相对于C, C++而言,除了保留 C/C++相似的语法外, Java也把一些复杂的特性去除掉,比如说C/C++里面的显性指针 和 操作符重载。

  2. 面向对象 (OOD)
    另外Java是面向对象的编程语言,它的程序都是用Class类进行封装的,Java实现的了OOD的特点和概念,比如抽象性(abstraction), 封装性(Encapsulation), 继承性(inheritance) 和多态性(polymorphism)

  3. 软件可移植性(Portability) 和平台的独立性
    Java 不像C/C++编译时那样要生成机械码, Java编译时把程序编译成byte code 字节码,而 Java字节码能够不依赖机器平台,Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行, 下图就是一个例子, window编写好的 java类可以在带有JRE环境的Linux, Mac 等不同环境运行,不用重新编写

(图来自 https://www.topperskills.com/tutorials/java/features-properties-java-language.html)
  1. 稳健性Robustness

    • Java不支持指针,它消除重写存储和讹误数据的可能性。Java自动的“无用单元收集”预防存储漏泄和其它有关动态存储分配和解除分配的有害错误。Java解释程序也执行许多运行时的检查,诸如验证所有数组和串访问是否在界限之内。(JVM通过一定机制进行内存自动的回收,也避免像C/C++容易内存的问题)

    • Java中的异常检测是使得程序更稳健的一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。

    • Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序

  1. High Performance:
    Java JVM 每次通过 Just In Time compiler (JIT) 来转换相似的byte code到依赖于机器的环境的机器码,从而减少程序的运行时间

  2. 多线程Multithread
    Java 提供支持多线程的执行 也称为轻便过程,能处理不同任务,使具有线索的程序设计很容易。Java的lang包提供一个Thread类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。(这个C++, Python 之类的语言也支持)。 Java的线索支持也包括一组同步原语。这些原语是基于监督程序和条件变量风范,由C.A.R.Haore开发的广泛使用的同步化方案。用关键词synchronized,程序员可以说明某些方法在一个类中不能并发地运行。这些方法在监督程序控制之下,确保变量维持在一个一致的状态。

  1. 安全性Security
    Java的安全性体现在

    • 存储分配模型里面没有指针, 用户不能直接通过指针直接访问和修改内存
    • Java编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。
  2. 分布性 Distributed
    Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器

  3. 可解释性
    Java 是高度的解释性语言意味着它不依赖操作系统的运行去把byte code翻译成机器码,也不像传统的编译过程把代码重新”编译->链接-> 测试 “, 而是有它自己独立的编译器把新类装进环境,, 它是增量式的、轻量级的过程。

  4. 动态性 dynamic
    Java语言设计成适应于变化的环境,它是一个动态的语言。例如,Java中的类是根据需要载入的,甚至有些是通过网络获取的。

Installation

  1. Install JDK
    Java需要在JVM上面才能运行,所以我们首先要把Java的环境安装,所以我们要安装 JDK
    安装时根据电脑环境的不同,安装不同的版本,这里了我安装的是Window的版本

  2. Set Environment Variable for java
    在安装JDK后, 我们要让电脑和terminal检测到java的环境就要通过设置环境变量来指向Java的安装位置
    Window的安装目录大概是这样子

    1
    C:\Program Files\Java\jdk-16

    然后,把JAVA_HOME的bin目录附加到系统环境变量PATH上。在Windows下,它长这样:

    1
    Path=%JAVA_HOME%\bin;<现有的其他路径>

在Mac里面是
在Mac或者linux下,它在/.bash_profile或/.zprofile里,它是:

1
export JAVA_HOME=`/usr/libexec/java_home -v 16`
  1. Test
    在安装好Java后,可以在terminal里面简单看看java的版本 来看看jdk有没有安装完成

    1
    java --version
  2. Tools

    • java: 这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码
    • javac: 这是Java的编译器,它用于把Java源码文件(以.java后缀结尾)编译为Java字节码文件(以.class后缀结尾);
    • jar: 用于把一组.class文件打包成一个.jar文件,便于发布;
    • javadoc: 用于从Java源码中自动提取注释并生成文档;
    • jdb: Java调试器,用于开发阶段的运行调试。(类似C/C++里面的gdb)
  3. IDE 环境安装
    Java常用的IDE(Integrated development environment)集成环境有Eclipse, IntelliJ IDEA等

Simple Codes

这里简单写个Hello World的demo测试一下IntelliJ IDEA的开发环境,项目步骤创建如下:

  1. 点进在IDE左上角 file -> new -> Project
  2. 在Project里面选择java
  3. 在创建后的项目目录里面的src(源码的文件夹)里面右键选择new-> Package
  4. 在创建后的Package文件夹里面创建一个叫做demo的java文件
  5. 在新建的java文件里面添加一下代码, 这样可以把新建的java文件当作新的class,可以把这文件当成出现的入口
    1
    2
    3
    4
    5
    6
    7
    package Practice.demo;

    public class demo {
    public static void main(String[] args){
    System.out.println("Hello World");
    }
    }
  6. Alt + Shift + F10 对main入口这个文件进行运行

Reference

[1] https://www.topperskills.com/tutorials/java/features-properties-java-language.html

[2] Datawhale: https://github.com/datawhalechina/team-learning-program/blob/master/Java/0.%20Java%E7%AE%80%E4%BB%8B%E4%B8%8E%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE.md

[3] IntelliJ IDEA IDE使用: https://blog.csdn.net/oschina_41790905/article/details/79475187

[4] Java Tutorial: https://www.liaoxuefeng.com/wiki/1252599548343744/1280507291631649

Comments