认识J2SE

一、课程简单介绍

在本章学习開始前,你应该具备一些Java的基础知识。

我们将在本章来认识J2SE,并复习一下前面学过的面向对象的相关知识。

注:全部的蓝色文字都是带超链接的,这些链接是本课程为你提供的扩展知识点,一定不要错过。

本章知识点


  • J2SE的定义和架构
  • 面向对象

二、什么是J2SE

1. J2SE的定义

​J2SE​​​,全称为​​Java 2 Standard Edition​​。Java 2平台包含:标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本号。

J2SE即Java 2的标准版,主要用于桌面应用软件的开发。

以下这段话是ORACLE对于Java SE的官方描写叙述:


Java Platform, Standard Edition (Java SE) 能够让您在桌面和server以及眼下要求较高的嵌入式环境中开发和部署 Java 应用程序。 Java 提供了当今应用程序所须要的丰富的用户界面、良好的性能、多功能性、可移植性和安全性。


J2SE与J2EE、J2ME之间的关系能够通过下图来表示:


2. J2SE的架构

J2SE的架构例如以下图所看到的,它主要包含了UI、集成库、语言和工具基础库、其它基础库、Java虚拟机等组件。


综上所述,将J2SE压缩一点再加上一些CLDC等方面的特性就是J2ME。将其扩充一点再添加一些EJB等企业应用方面的特性就是J2EE。因此J2SE是J2EE的基础,建议从事Java的开发者从J2SE開始学习。

三、面向对象——巩固与提高

在前面Java基础语法的学习中,你应该接触了一些面向对象的基础知识。面向对象的概念在Java的开发体系中无处不在,在今后的开发过程中,你也应该以面向对象的思想来看待和解决这个问题。

既然是面向对象。就会始终谈论到类和对象的概念,以及它们之间的关系:


​类​​是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。

​对象​​是具有类类型的变量。

​类​​​是​​对象​​​的抽象,而​​对象​​​是​​类​​​的详细实例。​​类​​​是抽象的,不占用内存,而​​对象​​​是详细的。占用存储空间。​​类​​​是用于创建​​对象​​的蓝图,它是一个定义包含在特定类型的对象中的方法和变量的软件模板。


以下。我们通过一些样例来巩固面向对象的相关知识。

1. 自己定义图书类

首先在Eclipse中创建一个项目​​HelloJ2SE​​​,新建一个名为​​com.shiyanlou.course​​的包。

然后在这个包里面加入一个​​Book​​类。

对于一个图书对象。一般有​​书名​​​、​​作者​​​和​​编码​​等属性。

我们利用这些常见属性来自己定义这个图书类,创建的​​Book.java​​文件里主要代码例如以下:

特别说明:在实验楼的实验环境中,暂不支持输入中文,因此你不必将代码片段中的凝视也输入开发环境。该说明相同适用于本课程兴许的章节。

package com.shiyanlou.course;
//此为包名,假设你在创建包时已自己主动生成了该行,请忽略

public class Book {
private String name; // 定义书名
private String author; // 定义作者
private String ISBN; // 定义编码
//Tips: ISBN是国际标准书号。每本书背面的条形码即为此物

public Book(String name, String author, String ISBN) {
// 利用构造方法初始化域
this.name = name;
this.author = author;
this.ISBN = ISBN;

//Q:你清楚this的使用方法吗?
}

public String getName() { // 获得书名
return name;
}
public String getAuthor() { // 获得作者
return author;
}
public String getISBN() { // 获得编码
return ISBN;
}
}

为了測试我们刚刚自己定义的图书类。我们在​​com.shiyanlou.course​​​这个包中再创建一个名为​​Test​​​的类文件。并在​​main()​​​方法中创建一个​​Book​​对象。

最后,我们在控制台输出这个​​Book​​对象的属性。

创建的​​Test.java​​文件里,基本的代码例如以下:

package com.shiyanlou.course;

public class Test {
public static void main(String[] args) {
Book book = new Book("This is my 1st book", "Peter", "1234567890");
// 创建Book对象并设定其各个属性
System.out.println("Book Name: " + book.getName());
// 输出这本书的名字
System.out.println("Book Author: " + book.getAuthor());
// 输出这本书的作者
System.out.println("ISBN: " + book.getISBN());
// 输出这本书的编码
}
}

点击编译并执行。


假设在控制台中能够看到下图这种信息,那么祝贺你,一个自己定义的图书类就成功完毕了。


当然,你也能够为​​Book​​​对象加入很多其它的属性,并为每一个属性编写​​get​​方法。

2. 动态化实例类

在面向对象的编程中,把用类创建对象的过程称为实例化。一般是使用有參数或无參数的构造方法来创建对象。其格式例如以下:

//有參数的情形
类名 对象名 = new 类名(參数1,參数2...參数n);

//比如以下这个样例
Person peter = new Person("Peter","boy");

//无參数的情形
类名 对象名 = new 类名();

//比如以下这个样例
Dog dog_1 = new Dog();

你能够仿照自己定义图书类的样例,通过自己创建相关的​​Person​​​类和​​Dog​​类以及測试的方法来验证上述过程。

可是在Java中,类的实例化方法一共同拥有四种途径:


  1. 使用​​new​​操作符
  2. 调用Class对象的​​newInstance()​​方法
  3. 调用​​clone()​​方法。对现有实例的拷贝
  4. 通过​​ObjectInputStream​​​的​​readObject()​​方法反序列化类

我们在自己定义图书类这个样例中。编写了有參数的构造方法​​public Book(String name, String author, String ISBN)​​​。但假设类中未定义构造方法。编译器便会自己主动加入一个无參数的构造方法。使用构造方法创建对象尽管经常使用,但并不灵活。因此。我们再来了解一下动态化实例类。也就是调用Class对象的​​newInstance()​​方法,通过反射创建对象。

了解一下反射的概念:


JAVA反射机制是在执行状态中,对于随意一个类,都能够知道这个类的全部属性和方法。对于随意一个对象。都能够调用它的随意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。


那么我们就開始来学习怎样动态化实例类:

请在在Eclipse中创建一个项目​​DynamicClass​​​。并在该项目中创建​​com.shiyanlou.course​​​包。在该包中创建​​Test​​​类,并编写​​main()​​方法。

在​​main()​​​方法中创建一个File对象(你仅仅须要知道File对象也是一个对象就可以,进一步了解File对象)。

最后。使用该对象在桌面创建一个文本文件。

基本的代码例如以下:

package com.shiyanlou.course;

import java.io.File;
import java.lang.reflect.Constructor;
//须要引用上述两个包

public class Test {

public static void main(String[] args) {
try {

Constructor<File> constructor = File.class.getDeclaredConstructor(String.class);
//获得File类的Constructor对象

System.out.println("Create File Object with reflection.");
//使用反射创建File对象
File file = constructor.newInstance("/home/shiyanlou/Desktop/MyFile.txt");
System.out.println("Use File Object to create MyFile.txt on desktop.");
//指定了创建的路径为桌面。名称为“MyFile.txt”

file.createNewFile(); //创建新的文件
System.out.println("File is created ?" + file.exists());
//验证文件是否创建成功

} catch (Exception e) {
e.printStackTrace();
}
}
}

你可能会问为什么会用到​​try​​​、​​catch​​​以及​​Exception​​之类的奇怪的东西。这是由于上述代码会抛出大量的异常。

我们通常不推荐这样写。不用操心,我们将在错误处理一章为你详细介绍他们的原理和使用方法。

点击编译并执行。假设在控制台能够看到下列信息则表示你成功了。


同一时候,你也应该能够在桌面上发现自己创建的这个​​MyFile.txt​​文件。


四、实验总结

本章我们学习了J2SE的基本概念和架构,复习了面向对象中类和对象、动态实例化类的相关知识。建议大家再积累一些数据结构相关知识。以便更好地投入到兴许的学习中。

J2SE的整个体系还是非常庞大的,本课程会力所能及地涵盖其核心的知识点,假设你想更加深入地学习Java知识。

五、作业

好了。我们今天的认识J2SE课程就讲完了,你对Java这个大家庭又了解了多少?

最好还是通过解决以下的问题来巩固今日所学吧。

一个学校里面有老师和学生,他们具有一些相同的属性,比如​​姓名​​​、​​生日​​​、​​性别​​​等。但老师另一个特别的​​工龄​​​属性,请尝试利用学生类来编写老师类,利用继承技术让老师类使用学生类中定义的属性和方法,而且为老师类创建新的​​工龄​​属性。

为什么要这样做?由于继承技术