J2SE核心开发实战(一)——认识J2SE
认识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) 可以让您在桌面和服务器以及目前要求较高的嵌入式环境中开发和部署 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中,类的实例化方法一共有四种途径:
- 使用
new
操作符 - 调用Class对象的
newInstance()
方法 - 调用
clone()
方法,对现有实例的拷贝 - 通过
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知识,我们还推荐你去阅读《Java 2核心技术》等书籍。
五、作业
好了,我们今天的认识J2SE课程就讲完了,你对Java这个大家庭又了解了多少?
不妨通过解决下面的问题来巩固今日所学吧。
一个学校里面有老师和学生,他们具有一些相同的属性,例如姓名
、生日
、性别
等。但老师还有一个特别的工龄
属性,请尝试利用学生类来编写老师类,利用继承技术让老师类使用学生类中定义的属性和方法,并且为老师类创建新的工龄
属性。
为什么要这样做?因为继承技术可以让你少写很多代码啊…
本文原文链接:https://www.shiyanlou.com/courses/111 本课为实验楼原创课程,转载请注明。
J2SE核心开发实战(一)——认识J2SE相关推荐
- J2SE核心开发实战(二)——字符串与包装类
字符串与包装类 一.实验简单介绍 在本章.我们将学习一些用于处理字符串的API以及包装类的相关知识. 本章知识点 字符串API 包装类及其应用 二.认识字符串类 1. 什么是字符串类 Java字符串类 ...
- python程序设计从基础到开发电子书_Python核心编程从入门到开发实战(pdf+txt+epub+azw3+mobi电子书在线阅读下载)...
作者:朱红庆 格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT 内容简介: 本书以学会.用好 Python 语言进行软件编程为目标,不仅讲解了基本概念.数据类型.变量.运算符. ...
- 访《VR开发实战》作者冀盼——VR 开发者的核心竞争力
"一边是火焰,一边是深海",可谓是 VR 行业的真实写照,因资本而起又因资本而却的 VR ,一时之间宛如六月天.如今硬件不温不火持续地升级,应用也一步一步地向 B 端市场摸索前行, ...
- 《Java和Android开发实战详解》——1.2节Java基础知识
本节书摘来自异步社区<Java和Android开发实战详解>一书中的第1章,第1.2节Java基础知识,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...
- J2ME移动应用开发实战视频教程
J2ME即JAVA 2 Micro Edition,是Java 2的组成部分,与J2SE.J2EE并称.J2ME是一种高度优化的Java运行环境,应用于大量的消费类电子设备,如蜂窝电话.可视电话.数字 ...
- 小程序picker_小程序·云开发实战 - 迷你微博
0. 前言 本文将手把手教你如何写出迷你版微博的一行行代码,迷你版微博包含以下功能: Feed 流:关注动态.所有动态 发送图文动态 搜索用户 关注系统 点赞动态 个人主页 使用到的云开发能力: 云数 ...
- python django web典型模块开发实战下载_Django实战 Python Web典型模块与项目开发
本书结合样例,介绍 Django 的基础知识.主要模块的开发以及权限管理等高级内容,并且通过图书管理系统.博客系统.车费管理系统 3 个项目的开发实战,使读者既能掌握 Django 的重要开发技术,又 ...
- 《Unity 4 3D开发实战详解》一6.7 物理引擎综合案例
本节书摘来异步社区<Unity 4 3D开发实战详解>一书中的第6章,第6.7节,作者: 吴亚峰 , 杜化美 , 张月霞 , 索依娜 责编: 张涛,更多章节内容可以访问云栖社区" ...
- java ee核心框架实战 pdf_Java EE核心框架实战 高洪岩 中文PDF
资源名称:Java EE核心框架实战 高洪岩 中文PDF 第1章 MyBatis 3操作数据库 第2章 MyBatis 3常用技能 第3章 Struts 2必备开发技能 第4章 Struts 2文件的 ...
最新文章
- html漂浮广告随页面移动代码,JS漂浮广告代码,慢慢漂移的广告JS代码
- Synchronize死锁
- Vue中怎样获取json文件中的数据
- [云炬创业基础笔记]第二章创业者测试9
- Pytorch实战1:线性回归(Linear Regresion)
- 边框的复合写法(HTML、CSS)
- javascript学习一、js的初步了解
- 一个关于传奇3G游戏的感言
- 智能公租房管理系统概要流程
- 【路径规划】局部路径规划算法——B样条曲线法(含python实现)
- 最适合使用外汇跟单软件的人
- jeecgboot修改登录界面、背景图等的页面记录
- JDK的下载、安装和环境配置教程(2021年,win10)
- 基于ASP.NET开发的固定资产管理系统源码 企业固定资产管理系统源码
- wtg linux双系统,Windows和Linux同时装入移动硬盘,实现可移动专属双系统
- 简单阅读golang的net/http包和Negroni的源码
- CookieSession
- mysql公司简介_MySQL简介
- Vue中的@blur和@focus事件
- STM32智能门锁学习一,按键解锁,蓝牙解锁、oled显示,步进电机
热门文章
- Android模拟器(包括Genymotion)访问本机服务器
- 软件工程之四则运算开发感悟与收获
- hdu 4911 求逆序对数+树状数组
- JavaScript学习笔记(四十四) 装饰器
- 自动化测试框架实践2--STAF
- 小白学编程“Java小白”入门解疑大全
- Spark1.x和2.x如何读取和写入csv文件
- springboot-文件上传xls及POI操作Excel
- 1Python生成高质量Html文件:Pyh模块+Bootstrap框架
- 基于Delphi的接口编程入门