Java操作JSON入门教程

Java操作JSON入门教程
Java操作JSON入门教程

基于java操作的JSON入门教程

尽管有许多宣传关于XML 如何拥有跨平台,跨语言的优势,然而,除非应用于Web Services,否则,在普通的Web 应用中,开发者经常为XML 的解析伤透了脑筋,无论是服务器端生成或处理XML,还是客户端用JavaScript 解析XML,都常常导致复杂的代码,极低的开发效率。实际上,对于大多数Web 应用来说,他们根本不需要复杂的XML 来传输数据,XML 的扩展性很少具有优势,许多AJAX 应用甚至直接返回HTML 片段来构建动态Web 页面。和返回XML 并解析它相比,返回HTML 片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。

现在,JSON 为Web 应用开发者提供了另一种数据交换格式。让我们来看看JSON 到底是什么,同XML 或HTML 片段相比,JSON 提供了更好的简单性和灵活性。

JSON 数据格式解析

和XML 一样,JSON 也是基于纯文本的数据格式。由于JSON 天生是为JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用JSON 传输一个简单的String,Number,Boolean,也可以传输一个数组,或者一个复杂的Object 对象。

String,Number 和Boolean 用JSON 表示非常简单。例如,用JSON 表示一个简单的String “abc ”,其格式为:"abc"

除了字符",,/ 和一些控制符(b,f,n,r,t)需要编码外,其他Unicode 字符可以直接输出。

一个Number 可以根据整型或浮点数表示如下:

这与绝大多数编程语言的表示方法一致,例如:

12345(整数)

-3.9e10(浮点数)

Boolean 类型表示为true 或false 。此外,JavaScript 中的null 被表示为null,注意,true、false 和null 都没有双引号,否则将被视为一个String 。

JSON 还可以表示一个数组对象,使用[] 包含所有元素,每个元素用逗号分隔,元素可以是任意的Value,例如,以下数组包含了一个String,Number,Boolean 和一个null:

["abc",12345,false,null]

Object 对象在JSON 中是用{} 包含一系列无序的Key-Value 键值对表示的,实际上此处的Object 相当于Java 中的Map,而不是Java 的Class 。注意Key 只能用String 表示。

例如,一个Address 对象包含如下Key-Value:

city:Beijing

street:Chaoyang Road

postcode:100025(整数)

用JSON 表示如下:

{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

其中Value 也可以是另一个Object 或者数组,因此,复杂的Object 可以嵌套表示,例如,一个Person 对象包含name 和address 对象,可以表示如下:

{"name":"Michael","address":

{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

}

JavaScript 处理JSON 数据

上面介绍了如何用JSON 表示数据,接下来,我们还要解决如何在服务器端生成JSON 格式的数据以便发送到客户端,以及客户端如何使用JavaScript 处理JSON 格式的数据。

我们先讨论如何在Web 页面中用JavaScript 处理JSON 数据。我们通过一个简单的JavaScript 方法就能看到客户端如何将JSON 数据表示给用户:

function handleJson() {

var j={"name":"Michael","address":

{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

};

document.write(https://www.360docs.net/doc/e59615051.html,);

document.write(j.address.city);

}

假定服务器返回的JSON 数据是上文的:

{"name":"Michael","address":

{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

}

只需将其赋值给一个JavaScript 变量,就可以立刻使用该变量并更新页面中的信息了,相比XML 需要从DOM 中读取各种节点而言,JSON 的使用非常容易。我们需要做的仅仅是发送一个Ajax 请求,然后将服务器返回的JSON 数据赋值给一个变量即可。有许多Ajax 框架早已包含了处理JSON 数据的能力,例如Prototype(一个流行的JavaScript 库:https://www.360docs.net/doc/e59615051.html,)提供了evalJSON() 方法,能直接将服务器返回的JSON 文本变成一

个JavaScript 变量:

new Ajax.Request("http://url", {

method: "get",

onSuccess: function(transport) {

var json = transport.responseText.evalJSON();

// TODO: document.write(json.xxx);

}

});

服务器端输出JSON 格式数据

下面我们讨论如何在服务器端输出JSON 格式的数据。以Java 为例,我们将演示将一个Java 对象编码为JSON 格式的文本。

将String 对象编码为JSON 格式时,只需处理好特殊字符即可。另外,必须用(") 而非(') 表示字符串:

view plaincopy to clipboardprint?

static String string2Json(String s) {

StringBuilder sb = new StringBuilder(s.length()+20);

sb.append('"');

for (int i=0; i

char c = s.charAt(i);

switch (c) {

case '"':

sb.append(""");

break;

case '':

sb.append("");

break;

case '/':

sb.append("/");

break;

case 'b':

sb.append("");

break;

case 'f':

sb.append("f");

break;

case 'n':

sb.append("

");

break;

case 'r':

sb.append("

");

break;

case 't':

sb.append("");

break;

default:

sb.append(c);

}

}

sb.append('"');

return sb.toString();

}

static String string2Json(String s) {

StringBuilder sb = new StringBuilder(s.length()+20);

sb.append('"');

for (int i=0; i

char c = s.charAt(i);

switch (c) {

case '"':

sb.append(""");

break;

case '':

sb.append("");

break;

case '/':

sb.append("/");

break;

case 'b':

sb.append("");

break;

case 'f':

sb.append("f");

break;

case 'n':

sb.append("

");

break;

case 'r':

sb.append("

");

break;

case 't':

sb.append("");

break;

default:

sb.append(c);

}

}

sb.append('"');

return sb.toString();

}

将Number 表示为JSON 就容易得多,利用Java 的多态,我们可以处理Integer,Long,Float 等多种Number 格式:

static String number2Json(Number number) {

return number.toString();

}

Boolean 类型也可以直接通过toString() 方法得到JSON 的表示:

static String boolean2Json(Boolean bool) {

return bool.toString();

}

要将数组编码为JSON 格式,可以通过循环将每一个元素编码出来:

view plaincopy to clipboardprint?

static String array2Json(Object[] array) {

if (array.length==0)

return "[]";

StringBuilder sb = new StringBuilder(array.length << 4);

sb.append('[');

for (Object o : array) {

sb.append(toJson(o));

sb.append(',');

}

// 将最后添加的',' 变为']':

sb.setCharAt(sb.length()-1, ']');

return sb.toString();

}

static String array2Json(Object[] array) {

if (array.length==0)

return "[]";

StringBuilder sb = new StringBuilder(array.length << 4);

sb.append('[');

for (Object o : array) {

sb.append(toJson(o));

sb.append(',');

}

// 将最后添加的',' 变为']':

sb.setCharAt(sb.length()-1, ']');

return sb.toString();

}

最后,我们需要将Map 编码为JSON 格式,因为JavaScript 的Object 实际上对应的是Java 的Map 。该方法如下:

view plaincopy to clipboardprint?

static String map2Json(Map map) {

if (map.isEmpty())

return "{}";

StringBuilder sb = new StringBuilder(map.size() << 4);

sb.append('{');

Set keys = map.keySet();

for (String key : keys) {

Object value = map.get(key);

sb.append('"');

sb.append(key);

sb.append('"');

sb.append(':');

sb.append(toJson(value));

sb.append(',');

}

// 将最后的',' 变为'}':

sb.setCharAt(sb.length()-1, '}');

return sb.toString();

}

static String map2Json(Map map) {

if (map.isEmpty())

return "{}";

StringBuilder sb = new StringBuilder(map.size() << 4);

sb.append('{');

Setkeys = map.keySet();

for (String key : keys) {

Object value = map.get(key);

sb.append('"');

sb.append(key);

sb.append('"');

sb.append(':');

sb.append(toJson(value));

sb.append(',');

}

// 将最后的',' 变为'}':

sb.setCharAt(sb.length()-1, '}');

return sb.toString();

}

为了统一处理任意的Java 对象,我们编写一个入口方法toJson(Object),能够将任意的Java 对象编码为JSON 格式:

view plaincopy to clipboardprint?

public static String toJson(Object o) {

if (o==null)

return "null";

if (o instanceof String)

return string2Json((String)o);

if (o instanceof Boolean)

return boolean2Json((Boolean)o);

if (o instanceof Number)

return number2Json((Number)o);

if (o instanceof Map)

return map2Json((Map)o);

if (o instanceof Object[])

return array2Json((Object[])o);

throw new RuntimeException("Unsupported type: " + o.getClass().getName());

}

public static String toJson(Object o) {

if (o==null)

return "null";

if (o instanceof String)

return string2Json((String)o);

if (o instanceof Boolean)

return boolean2Json((Boolean)o);

if (o instanceof Number)

return number2Json((Number)o);

if (o instanceof Map)

return map2Json((Map)o);

if (o instanceof Object[])

return array2Json((Object[])o);

throw new RuntimeException("Unsupported type: " + o.getClass().getName());

}

我们并未对Java 对象作严格的检查。不被支持的对象(例如List)将直接抛出RuntimeException 。此外,为了保证输出的JSON 是有效的,Map 对象的Key 也不能包含特殊字符。细心的读者可能还会发现循环引用的对象会引发无限递归,例如,精心构造一个循环引用的Map,就可以检测到StackOverflowException:

@Test(expected=StackOverflowError.class)

public void testRecurrsiveMap2Json() {

Map map = new HashMap();

map.put("key", map);

JsonUtil.map2Json(map);

}

好在服务器处理的JSON 数据最终都应该转化为简单的JavaScript 对象,因此,递归引用的可能性很小。

最后,通过Servlet 或MVC 框架输出JSON 时,需要设置正确的MIME 类型(application/json)和字符编码。假定服务器使用UTF-8 编码,则可以使用以下代码输出编码后的JSON 文本:

response.setContentType("application/json;charset=UTF-8");

response.setCharacterEncoding("UTF-8");

PrintWriter pw = response.getWriter();

pw.write(JsonUtil.toJson(obj));

pw.flush();

小结

JSON 已经是JavaScript 标准的一部分。目前,主流的浏览器对JSON 支持都非常完善。应用JSON,我们可以从XML 的解析中摆脱出来,对那些应用Ajax 的Web 2.0 网站来说,JSON 确实是目前最灵活的轻量级方案。

零基础自学java,先看书胜过先看视频

零基础自学java,先看书胜过先看视频 近年来,Java视频逐渐取代了“书”的作用,许多初学者已经将看视频作为最主要的学习方式。然而,通过长期对java自学者的观察研究,我们发现,书和视频均有各自的作用,看书和看视频对于java学习者来说,都是不可或缺的。然而,由于现在Java 入门级视频讲的实在是浅显易懂,导致许多零基础的学生完全忽视了书的作用,这是非常不利于以后的深入学习的。 首先,看java视频是能够更快速的学习java 这一点是毋庸置疑的,为什么现在视频教程会那么的流行,因为视频教程讲的非常的生动浅显,最关键是视频教程会由老师亲自上级演示操作,这就像是上课一样,而且可以反复看,对于初学者来说,非常有用。 其次,书籍的作用在于引导和思考 对于零基础的初学者而言,视频就像是老师讲课,然而,我们从小到大的学习,都离不开图书,书籍是知识的载体,一本图书凝聚作者毕生的知识积累。对于自学者而言,一开始就看视频,会觉得视频讲的确实容易,因此容易丧失主动思考的能力。只有,你自己拿起一本java经典图书,一字一行的理解其中的技术精髓,你才能不断的思考,而这本书则是你的引导。 看书+视频+看书的学习形式最为合适 对于零基础自学者来说,视频就是你的老师,图书就是你的课本。那么,在上课之前一定要先预习,上课之后要复习并完成作业,这是一个我们习以为常的学习流程,也是非常有效的学习过程。所以,你可以先看一章或多章图书,这时候,你可能只理解了一部分,接下来,你再看视频,你会发现视频中讲了不少东西,你又会明白一部分,看

过视频后,反过来,再复习之前看过的图书,这样,你就把整个知识和原理进行了一次思考,你将最大限度的理解其中的原理,而之后,多上机练习,由此反复,循序渐进,你将会学的扎扎实实,几个月坚持下来,你必定会成为一个优秀的初级程序员,而这离一个优秀的中高级程序员之间的距离仅仅是时间问题。而一开始,你就填鸭式的被动接受,不多加思考,那么几个月下来,你只是一个马马虎虎的初级程序员,而你离一个马马虎虎的中高级程序员的距离也只是时间问题而已。 位于沈阳和平区三好街的北大青鸟,推崇技能+学历+经验的教学模式。无论是学资学历、师资力量还是专业技术在同类机构中都占据不少优势,更重要的是北大青鸟入学就签订就业协议,很大程度上解决了学员的就业难题。 北大青鸟教材在编制测试后,会进入到正式的授课中,为了能够保证北大青鸟学员所学知识的权威性和实用性,北大青鸟每18个月便会邀请行业专家和著名企业权威人士,加上北大计算机相关学院的资深教授,进行教材的升级和更新。 如果您对IT感兴趣并且励志要成为IT精英,千万不要错过北大青鸟。 详情请咨询【点击查看】

Java基础入门教程(适合所有初学者)

第1章 Java语言概述与面向对象思想 1 1.1 Java语言的发展 1 1.1.1 Java语言的产生 1 1.1.2 Java语言的发展 1 1.2 Java语言的特点 2 1.3 面向对象与面向过程的差异 3 1.3.1 面向过程思想回顾 4 1.3.2 面向对象思想介绍 4 1.4 面向对象程序设计中的主要概念和特征 4 1.4.1 主要概念 5 1.4.2 主要特征 5 *1.5 Java与C++的差异 5 1.6本章小结5 习题 5 第2章 Java语言开发环境 6 2.1 JDK 6 2.1.1 JDK的简介6 2.1.2 JDK的构成6 2.1.3 JDK的使用6 2.2 IDE 8 2.2.1 IDE简介8 2.2.2 JBuilder 9 2.2.3 Eclipse 9 2.2.4 相关资源9 2.3 Project管理9 2.3.1 Project的含义9 2.3.2 可行的Project组织模式9 2.3.3 主要开发工具的Project目录10 2.4 本章小结10 习题10 第1章 Java语言概述与面向对象思想 1.1 Java语言的发展 1.1.1 Java语言的产生以介绍面向对象编程的基本概念、基本理论为重点,结合Java语言的语法规则、编程特点和设计思想、强调容易发生错误和编程应注意的地方,使学生能对Java 技术有一个总体了解,通过本课程学习,使学生掌握Java语言的基础知识,理解和掌握面向对象程序设计的基本思想,熟练地使用Java语言进行程序的编写、编译以及调试工作 上世纪90年代初期,Sun公司在研究一种适用于未来的智能设备的编程语言,该语言要具有一些新的特性,以避免C++的一些不足。 该语言起初命名为Oak,来源于语言作者Gosling办公室窗外的一棵橡树(Oak)。后来在注册时候遇到了冲突,于是就从手中的热咖啡联想到了印度尼西亚一个盛产咖啡的岛屿,中文名叫爪哇,Java语言得名于此。 随着Internet的迅速发展,Web应用日益广泛,Java语言也得到了迅速发展。1994年,Gosling

mooc零基础学习java语言习题答案

第一周 温度转换(5分) 题目内容: 写一个将华氏温度转换成摄氏温度的程序,转换的公式是:°F = (9/5)*°C + 32 其中C表示摄氏温度,F表示华氏温度。程序的输入是一个整数,表示华氏温度。输出对应的摄氏温度,也是一个整数。提示,为了把计算结果的浮点数转换成整数,需要使用下面的表达式: (int)x; 其中x是要转换的那个浮点数。 注意:除了题目要求的输出,不能输出任何其他内容,比如输入时的提示,输出时的说明等等都不能。这道题目要求转换后的数字,程序就只能输出这个数字,除此之外任何内容都不能输出。 输入格式: 一个整数。 输出格式: 一个整数。 输入样例: 100 输出样例: 37 程序代码 import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub int F; int C; Scanner in=new Scanner(System.in); F =in.nextInt(); C =(F-32)*5/9; System.out.println(C); in.close(); }

} 第二周 1时间换算(5分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8。现在,你的程序要读入一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分。 有效的输入范围是0到2359,即你的程序不可能从测试服务器读到0到2359以外的输入数据。 你的程序要输出这个时间对应的UTC时间,输出的格式和输入的相同,即输出一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。 提醒:要小心跨日的换算。 输入格式: 一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而且分小于10分,需要保留十位上的0。输出格式: 一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而且分小于10分,需要保留十位上的0。输入样例: 933 输出样例: 133 程序代码 import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub int UTC; int BJT;

适合java入门学习的书籍推荐

适合java入门学习的书籍推荐 作为Java初级学习者而已,最痛苦的事情莫过于想要学好java,但是面对市场上纷繁的java学习书籍,往往容易感到无所适从。牛耳教育就java学习体系流程方面为大家挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java爱好者们。 一、Java编程入门类 1、《Java编程思想》 2、《Agile Java》中文版 二、Java编程进阶类 1、《重构改善既有代码的设计》 这本书名气很大,不用多介绍,可以在闲暇的时候多翻翻,多和自己的实践相互印证。这本书对产生影响是潜移默化的。 2、《测试驱动开发 by Example》 本书最大特点是很薄,看起来没有什么负担。可以找一个周末的下午,一边看,一边照做,一个下午就把书看完,这本书的所有例子跑完了。这本书的作用是通过实战让你培养TDD的思路。 三、Java架构师之路 到这个阶段,应该已经非常娴熟的运用Java编程,而且有了一个良好的编程思路和习惯了,但是可能还缺乏对应用软件整体架构的把握,现在就是迈向架构师的第一步。 1、《Expert One-on-One J2EE Design and Development》 这本书是Rod Johnson的成名著作,非常经典,从这本书中的代码诞生了springframework。但是好像这本书没有中译本。 2、《Expert One-on-One J2EE Development without EJB》 这本书由gigix组织翻译,多位业界专家参与,虽然署名译者是JavaEye,其实JavaEye出力不多,实在是忝居译者之名。

零基础java自学教程

零基础java自学教程 java的火爆袭来,吸引了大批的初学者涉猎,想入行java,却苦于自己没有基础,担心学不好。小编告诉你,这些担心都是浮云,你只是惧怕走进一个新天地,人都是一样的,面对自己不熟悉的领域总会有莫名的恐惧感。其实来千锋学习java的大部分都是零基础,照样高薪就业。不是不可以,只是你缺乏的是勇敢迈出去的勇气。 千锋小编整理了一份关于java自学的学习路线图,希望帮助每一位想学习java的小伙伴快速成长为java开发工程师。 Java学习分为四个阶段的学习,如零开始,逐渐深入,书籍和教学视频相结合,大步走向java开发工程师。 完整的java学习路线图: 第一阶段java基础,通过对基础阶段的学习,可以让学员清晰JavaEE开发工程师的定位及发展规划,同时鼓舞学员做好迎战的心理准备。 第二阶段javaWeb,是进阶阶段,掌握Java的基本语法,数据类型及各种运算符,开始可以写一些运算相关的程序。

第三阶段java框架,框架是程序中另一种存储数据的方式,比直接使用数组来存储更加的灵活,在项目中应用十分广泛。同时,我们将深入研究其中涉及到的数据结构和算法,对学员的技术深度有了一个质的提升。 第四阶段java+云数据,亿级并发架构演进、Linux基础、搭建tomcat环境以及大数据开发云计算等高级Java教程,是Java技术的高端知识。其中穿插项目实战演练,企业真实项目供学员应用学习,进行知识体系的“二次学习”。 Java自学书籍: 《Head First Java, 2nd Edition(中文版)》这本书不仅内容丰富、有趣且通俗易懂,并且涵盖了所有Java 相关的基础知识。如果你是Java 初学者,这本书正适合你。 《Java 核心技术(卷1、2)》写作风格相比Head First 趣味性来说更显传统,所涵盖的内容包括Java 基础知识及高级应用,是对于入门来说的另一种选择。 《Java 编程思想(第4版)》必读之作,不仅涵盖所有Java 基础,对于编程思想层面的提升也有很好的帮助。 《Head First 设计模式》延续Head First 一贯生动趣味的写作风格,介绍

学习Java编程值得一看的4本书籍

对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,自学不比Java培训班那样,有老师带领学习,一切都需要自己规划计划学习,先对Java熟悉起来再说。用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要“知其然”。 《Java编程思想》 在有了一定的Java编程经验之后,你需要“知其所以然”了。这个时候《Java编程思想》是一本让你知其所以然的好书,它对于基本的面向对象知识有比较清楚的交待,对Java基本语法,基本类库有比较清楚的讲解,可以帮你打一个良好的Java编程基础。这本书的缺点是实在太厚,也比较罗嗦,不适合现代人快节奏学习,因此看这本书要懂得取舍,不是每章每节都值得一看的,挑重点的深入看就可以了。 《Agile Java》中文版 这本书是出版社送给我的,我一拿到就束之高阁,放在书柜一页都没有翻过,但是前两天整理书柜的时候,拿出来一翻,竟然发现这绝对是一本好书!这本书一大特点是以单元测试和TDD来贯穿全书的,在教你Java各种重要的基础知识的过程中,潜移默化的影响你的编程思维走向敏捷,走向TDD。另外这本书成书很新,以JDK5.0的语法为基础讲解,要学习JDK5.0的新语法也不错。还有这本书对于内容取舍也非常得当,Java语言毕竟类库庞大,可以讲的内容太多,

这本书选择的内容以及内容的多寡都很得当,可以让你以最少的时间掌握Java 最重要的知识,顺便培养出来优秀的编程思路,真是一本不可多得的好书。 虽然作者自己把这本书定位在入门级别,但我不确定这本书用来入门是不是稍微深了点,我自己也准备有空的时候翻翻这本书,学习学习。 打下一个良好的Java基础,还需要更多的实践经验积累,我想没有什么捷径。有两本书值得你在编程生涯的这个阶段阅读,培养良好的编程习惯,提高你的代码质量。 《重构改善既有代码的设计》 这本书名气很大,不用多介绍,可以在闲暇的时候多翻翻,多和自己的实践相互印证。这本书对产生影响是潜移默化的。 《测试驱动开发by Example》 本书最大特点是很薄,看起来没有什么负担。可以找一个周末的下午,一边看,一边照做,一个下午就把书看完,这本书的所有例子跑完了。这本书的作用是通过实战让你培养TDD的思路。

java架构师之路:JAVA程序员必看的15本书的电子版下载地址

作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java 程序员们。 一、Java编程入门类 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java熟悉起来再说。用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要“知其然”。 1、《Java编程思想》 下载地址:https://www.360docs.net/doc/e59615051.html,/share/p2446196.html 在有了一定的Java编程经验之后,你需要“知其所以然”了。这个时候《Java 编程思想》是一本让你知其所以然的好书,它对于基本的面向对象知识有比较清楚的交待,对Java基本语法,基本类库有比较清楚的讲解,可以帮你打一个良好的Java编程基础。这本书的缺点是实在太厚,也比较罗嗦,不适合现代人快节奏学习,因此看这本书要懂得取舍,不是每章每节都值得一看的,挑重点的深入看就可以了。 2、《Agile Java》中文版 下载地址:https://www.360docs.net/doc/e59615051.html,/share/p2564807.html 这本书是出版社送给我的,我一拿到就束之高阁,放在书柜一页都没有翻过,但是前两天整理书柜的时候,拿出来一翻,竟然发现这绝对是一本好书!这本书一大特点是以单元测试和TDD来贯穿全书的,在教你Java各种重要的基础知识的过程中,潜移默化的影响你的编程思维走向敏捷,走向TDD。另外这本书成书很新,以JDK5.0的语法为基础讲解,要学习JDK5.0的新语法也不错。还有这本书对于内容取舍也非常得当,Java语言毕竟类库庞大,可以讲的内容太多,这本书选择的内容以及内容的多寡都很得当,可以让你以最少的时间掌握Java 最重要的知识,顺便培养出来优秀的编程思路,真是一本不可多得的好书。 虽然作者自己把这本书定位在入门级别,但我不确定这本书用来入门是不是稍微深了点,我自己也准备有空的时候翻翻这本书,学习学习。 二、Java编程进阶类 打下一个良好的Java基础,还需要更多的实践经验积累,我想没有什么捷径。有两本书值得你在编程生涯的这个阶段阅读,培养良好的编程习惯,提高你的代码质量。

学习JAVA推荐书籍

Java程序员的推荐阅读书籍 原创作者: robbin阅读:110084次评论:123条更新时 间:2008-12-16 作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。 在这份推荐阅读书籍的名单中,我没有列举流行的软件框架类学习书籍,例如Struts,Hibernate,Spring之类,也没有列举AJAX方面的书籍。是因为这类书籍容易过时,而上述的大半书籍的生命周期都足够长,值得你去购买和收藏。目录[ - ] 1.Java编程入门类 2.Java编程进阶类 3.Java架构师之路 4.软件开发过程 5.软件项目管理 Java编程入门类 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java熟悉起来再说。用很短的时间快速过一遍Java语法,连懵带猜 多写写代码,要“知其然”。 1、《Java编程思想》 在有了一定的Java编程经验之后,你需要“知其所以然”了。这个时候《Java

编程思想》是一本让你知其所以然的好书,它对于基本的面向对象知识有比较清楚的交待,对Java基本语法,基本类库有比较清楚的讲解,可以帮你打一个良好的Java编程基础。这本书的缺点是实在太厚,也比较罗嗦,不适合现代人快节奏学习,因此看这本书要懂得取舍,不是每章每节都值得一看的,挑重点的深 入看就可以了。 2、《Agile Java》中文版 这本书是出版社送给我的,我一拿到就束之高阁,放在书柜一页都没有翻过,但是前两天整理书柜的时候,拿出来一翻,竟然发现这绝对是一本好书!这本书一大特点是以单元测试和TDD来贯穿全书的,在教你Java各种重要的基础知识的过程中,潜移默化的影响你的编程思维走向敏捷,走向TDD。另外这本书成书很新,以JDK5.0的语法为基础讲解,要学习JDK5.0的新语法也不错。还有这本书对于内容取舍也非常得当,Java语言毕竟类库庞大,可以讲的内容太多,这本书选择的内容以及内容的多寡都很得当,可以让你以最少的时间掌握Java最重要的知识,顺便培养出来优秀的编程思路,真是一本不可多得的好书。 虽然作者自己把这本书定位在入门级别,但我不确定这本书用来入门是不是稍微 深了点。 Java编程进阶类 打下一个良好的Java基础,还需要更多的实践经验积累,我想没有什么捷径。有两本书值得你在编程生涯的这个阶段阅读,培养良好的编程习惯,提高你的代码质量。 1、《重构改善既有代码的设计》

零基础学java从哪儿开始

零基础学java从哪儿开始 面对未知的行业,人们的第一反应应该是:拒绝踏入。因为学习真的是一个痛苦的过程。想要真正了解一个行业,熟知一个行业,并熟练掌握某一技术,是真的需要时间和精力的。面对勇敢自学的java小伙伴们,千锋小编疯狂为你们打CALL,并为你准备了一些java重要的技术点,是需要重点学习的技术哦! 1、多线程并发 多线程是Java中普遍认为比较难的一块。多线程用好了可以有效提高cpu 使用率,提升整体系统效率,特别是在有大量IO操作阻塞的情况下;但是它也是一柄双刃剑,如果用不好,系统非但提升不大,或者没有提升,而且还会带来多线程之间的调试时等问题。 在多线程中内容有很多,只是简单说明一下Java中初步使用多线程需要掌握的知识点,以后有机会单独再详细介绍一些高级特性的使用场景。 多线程的实现和启动 callable与runable区别 syncrhoized,reentrantLock各自特点和比对

线程池 future异步方式获取执行结果 concurrent包 lock 2、网络 Java中也是提供了可以直接操作TCP协议、UDP协议的API。在需要强调网络性能的情况下,可以直接使用TCP/UDP进行通讯。在查看Tomcat等的源码中,就可以看到这些相关API的使用情况。不过一般也比较少会直接使用TCP,会使用诸如MINA、Netty这样的框架来进行处理,因为这个方面的开发涉及不多,所以就不再详细罗列了。 3、时间日期处理 几乎对于每个应用来说,时间日期的处理也是绕不过去的,但是JDK8之前的时间相关API用法并不友好。在那个时代,可以选择Joda等时间框架。到了JDK8发布之后,全新的时间API基本融合了其他框架的优点,已经可以很好的直接使用了。 对于Java开发者来说,需要熟练地使用API来对时间和日期做相关的处理。 4、XML解析/JSON解析 其实这两块内容都不是J2SE里面的内容,但是在日常开发中,和其他程序交互,和配置文件交互,越来越离不开这两种格式的解析。 不过对于一个开发者来说,能够了解一些XML/JSON具体解析的原理和方法,有助于你在各个具体的场景中更好的选择合适你的方式来使得你的程序更有效率和更加健壮。

Java学习经典书籍

下面是我根据多年的阅读和实践经验,给您推荐的一些图书: 第一部分: Java语言篇 1 《Java编程规范》 星级: 适合对象:初级,中级 介绍:作者James Gosling(Java之父),所以这本书我觉得你怎么也得读一下。对基础讲解的很不错。 2 《Java核心技术:卷Ⅰ基础知识》 星级: 适合对象:初级,中级 介绍:官方机构图书,你怎么也得有一本,这本书比较全面而且易懂。放在案旁用到的时候查一查,看一看。是学习入门必备书。 注:新手必备 3 《Java编程思想》 星级: 适合对象:初级,中级 介绍:这本书的作者就是著名的C++编程思想,对OO的理解很好,Java作为一门面向对象的语言,你学习Java最好也同时参考这本书进行入门学习。 注:新手必备 4 《Effective Java》 星级: 适合对象:初级,中级,高级 介绍:作者是Java的第2号人物,目前是Google的Java老大,是James Gosling强力推荐的一本书。 5 《Java与模式》 星级: 适合对象:中级,高级 介绍:是国人写的难得的值得购买的一本书,当然现在也有大话设计模式之类的出现,这本书出现的比较早,是初级到中高级必读的图书之一。 注:没有理解面向对象前,读这本书没有意义。最好是有过项目经验再读比较好。 6 《SCJP学习指南》星级: 适合对象:初级,中级 介绍:官方考试必备图书,对你检验自己学些Java知识情况很有帮助,这本书最适合学生阅读,这本书理解透了,找工作面试Java题目不会有任何问题,工作多年的拿这里的题目不会做的都很多。 7 《Java数据结构和算法》 星级: 适合对象:初级,中级,高级

java服务器端编程基础入门

import java.awt.*; import java.awt.event.*; import https://www.360docs.net/doc/e59615051.html,.*; import java.io.*; public class ChatServer { public static void main(String[] args) { boolean started = false; // 判断服务器是否启动了,先假定没有启动 ServerSocket ss = null; DataInputStream dis = null; try { ss = new ServerSocket(8888); started = true; // 服务器已经启动了,设置started为true while (started) { //当服务器端启动时。。。。 boolean bConnect = false; //判断服务器和客户端的连接是否已经建立,没有为false,连接成功返回true Socket s = ss.accept(); //accept()与readUTF()方法一样,都是一个阻塞式方法,如果没有收到连接请求,则一直等待。。。。。 bConnect = true; //连接成功,设置bConnect为true System.out.println("一个连接已经建立!"); // -------------------------- dis = new DataInputStream(s.getInputStream()); while (bConnect) {

String str = null; str = dis.readUTF(); //如果客户端突然断开连接,该语句就会抛出异常EOFException,所以我们必须得对dis.readUTF();进行异常处理 //readUTF()是阻塞式方法,如果得不到数据,则继续等待,直到读取到数据为止 System.out.println("从客户端接受的数据是:" + str); } } } catch (BindException e) { System.out.println("端口已被占用,其使用其他端口"); System.out.println("请关闭相关程序,重新运行!"); System.exit(-1); } catch (EOFException e) { System.out.println("客户端已经断开连接!"); } catch (IOException e) { //e.printStackTrace(); System.out.println("服务器端读写错误!"); } finally { try {

Java学习视频教程 (适合Java零基础、Java入门)

动力节点Java零基础教程简介: 本套Java视频教程内容讲解深入浅出,语言表达流利标准,自发布以来,深受学员好评,Java教程中注重与学生互动,幽默风趣、细致入微,涵盖Java SE所有核心内容,深入Java虚拟机,深度剖析源码,以代码实战贯穿始终,以项目驱动教学,将独特的PDT教学法展现的淋漓尽致。来吧,让我们在快乐中学习,在实践中成长。 动力节点Java零基础教程目录: 001-Java零基础视频教程-安装EditPlus 002-Java零基础视频教程-计算机概述 003-Java零基础视频教程-Java软件工程师概述 004-Java零基础视频教程-常用DOS命令 005-Java零基础视频教程-显示文件扩展名 006-Java零基础视频教程-计算机语言发展史 007-Java零基础视频教程-Java语言发展史 008-Java零基础视频教程-Java语言特性 009-Java零基础视频教程-Java的跨平台 010-Java零基础视频教程-Java程序的编译阶段 https://www.360docs.net/doc/e59615051.html,1 / 12 Copyright?动力节点

011-Java零基础视频教程-Java程序的运行阶段 012-Java零基础视频教程-Java程序的加载与执行 013-Java零基础视频教程-JDK安装-JDK,JRE,JVM关系 014-Java零基础视频教程-HelloWorld程序的编写 015-Java零基础视频教程-PATH环境变量 016-Java零基础视频教程-编译Java源程序 017-Java零基础视频教程-运行Java程序 018-Java零基础视频教程-classpath 019-Java零基础视频教程-注释 020-Java零基础视频教程-HelloWorld程序解释 021-Java零基础视频教程-public class和class区别 022-Java零基础视频教程-总结第一章重点内容 023-Java零基础视频教程-标识符 024-Java零基础视频教程-标识符 025-Java零基础视频教程-关键字 https://www.360docs.net/doc/e59615051.html,2 / 12 Copyright?动力节点

零基础学Java第一章习题与答案

1.9 习题 一、简答题 1.Java作为一门优秀的编程语言,它有哪些特点? Java语言具有简单、面向对象、分布式、安全、可移植、多态等特点。 Java语言是一种面向对象的语言,通过理解一些重要的概念就能编写出各种功能的代码。 Java语言主要集中用在设计类和接口功能方面,提供了继承及多态的机制,对类中的成员变量和方法可进行覆盖和重写,实现了代码的重复使用,使代码编写更简单。 Java语言不支持指针,所有的访问,都必须通过具体的对象变量来实现,这样既保护了对象的私有变量,同时也避免了一些错误。 Java语言编译产生的文件是字节码文件,字节码文件和平台无关。 Java语言支持多线程技术,将多个程序任务分成几个并行的子任务。 2.简述Java程序的开发过程。 要开发Java程序,要经过以下三个步骤。 创建一个源文件。Java源文件就是Java代码文件,以Java语言编写。Java源文件是纯文本文件,扩展名为“.java”。可以使用任何文本编辑器来创建和编辑源文件,本书使用Windows系统自带的记事本作为Java源文件的编辑器。 将源文件编译为一个.class文件。使用JDK所带的编译器工具javac.exe,它会读取源文件并将其文本编译为Java虚拟机能理解的指令,保存在以后缀.class结尾的文件中。包含在CLASS文件中的指令就是众所周知的字节码(bytecodes),它是与平台无关的二进制文件,执行时由解释器java.exe解释成本地机器码,边解释边执行。在命令提示符下进入文件所在目录,输入javac 文件名.java(javac命令和java文件中间有空格),按下回车键即可进行编译。 运行程序。使用Java解释器(java.exe)来解释执行Java应用程序的字节码文件(.class 文件),通过使用Java虚拟机来运行Java应用程序。直接输入java 文件名.java即可。 3.什么是Java虚拟机? Java虚拟机(JVM)是Java Virtual Machine的缩写,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。 4.Java语言的安全机制有哪些? 线程安全,内存垃圾回收机制,类加载器和安全机制。 二、编程题 在一台没有Java开发环境的计算机中,在15min内开发出一个输出“HelloWorld”的Java 程序。 1) 安装工具包(见1.2.2节) 2) 查看与设置环境变量(见1.2.3节) 3)使用记事本输入代码,见示例代码1-1。

Java零基础入门知识整理

1. 什么是Java、Java2、JDK?JDK后面的1.3、1.4.2版本号又是怎么回事? 答:Java是一种通用的,并发的,强类型的,面向对象的编程语言(摘自Java规范第二版) JDK是Sun公司分发的免费Java开发工具,正式名称为J2SDK(Java2 Softw are Develop Kit)。 2. 什么是JRE/J2RE? 答:J2RE是Java2 Runtime Environment,即Java运行环境,有时简称JRE。 如果你只需要运行Java程序或Applet,下载并安装它即可。 如果你要自行开发Java软件,请下载JDK。在JDK中附带有J2RE。 注意由于Microsoft对Java的支持不完全,请不要使用IE自带的虚拟机来运行Applet,务必安装一个J2RE或JDK 3. 什么是J2SE/J2EE/J2ME? 答:J2SE就是一般的Java。 J2EE规范更多的是对J2EE服务器的要求和开发人员的约束。 J2ME是针对嵌入式设备的,比如Java手机,它有自己的SDK。而J2EE使用J2SE的SDK。 4. 学习Java用什么工具比较好? 1、最基本的开发运行工具:JDK+文本编辑器

2、集成开发环境:Eclipse或者MyEclipse或者NetBeans或者Intelij Idea。 3、数据库工具:MySQL或者Oracle。 4、服务器工具:Tomcat。 5. 学习Java有哪些好的参考书? 答:对于除了打游戏就不知道计算机开发是什么的同学,小雀推荐《Head First Java,2nd Edition(中文版)》,这本书涵盖了Java的基础知识、简单粗暴,语言风趣幽默,非常适合零基础的同学。 对于有一定计算机基础或者是计算机专业的童鞋来讲,小雀推荐《Thinking in Java》,《Java核心技术(卷1、2)》这两本,这两本书写作风格相对来说比较传统,不仅包含Java 基础知识而且涵盖Java的高级应用,但是对入门者有一定的基础要求。 当然书有很多各自推荐有各自的道理,深挖一本比浅读3本更有效。 6. Java和C++哪个更好? 答:这个问题是一个很不恰当的问题。你应该问:Java和C++哪个更适用于我的项目? 如果你不需要跨平台,不需要分布式,要强调程序的运行速度,C++更为适用。反之?你应当考虑Java。 7. 关键字是什么? 关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,是有特别意义的变量。 Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。 Java语言规定关键字不能作为标识符。目前共有50个Java关键字,其中,"const"和"goto"这两个关键字在Java语言中并没有具体含义。Java语言把它们列为关键字,只是因为"const"和"goto"是其他某些计算机语言的关键字。

java经典小程序,java入门100例!

1,编写程序,判断给定的某个年份是否是闰年。 闰年的判断规则如下: (1)若某个年份能被4整除但不能被100整除,则是闰年。 (2)若某个年份能被400整除,则也是闰年。 import java.util.Scanner; class Bissextile{ public static void main(String[] arge){ System.out.print("请输入年份"); int year; //定义输入的年份名字为“year” Scanner scanner = new Scanner(System.in); year = scanner.nextInt(); if (year<0||year>3000){ System.out.println("年份有误,程序退出!"); System.exit(0); } if ((year%4==0)&&(year%100!=0)||(year%400==0)) System.out.println(year+" is bissextile"); else System.out.println(year+" is not bissextile "); } } 2,给定一个百分制的分数,输出相应的等级。 90分以上A级 80~89 B级 70~79 C级 60~69 D级 60分以下E级 import java.util.Scanner; class Mark{ public static void main(String[] args){ System.out.println("请输入一个分数"); //定义输入的分数为“mark”,且分数会有小数 double mark; Scanner scanner = new Scanner(System.in); mark = scanner.nextDouble(); //判断是否有输入错误。 if(mark<0||mark>100){

Java零基础学习

Base—Day.01 Windows 的"文件系统"(就是磁盘管理的逻辑结构) C:\ |-- Windows <当前工作目录> | |-- System32 |-- Programs Files |-- Java D:\ |-- Demo E:\ Linux 的文件系统 / |-- home | |-- soft01 <当前工作目录> ls | |-- soft02 | |-- .... |-- etc |-- opt |-- usr |-- mnt |-- sdcard 挂载点 | |-- DCIM | |-- ???? |-- usb0 挂载点 |-- cdrom 挂载点 目录 == 文件夹是等同概念 Windows 资源管理器: 浏览文件系统 地址栏显示的目录: 当前工作目录 窗口中显示的是: 当前工作目录的内容列表. Linux 命令行也有当前工作目录 当前工作目录: 使用pwd 就可以显示当前的工作目录 cd 改变当前工作目录 .. 上层目录 cd .. ls 显示目录(文件夹)的内容, 默认显示"当前工作目录"内容 ls -l 按照长(long/详细) 格式显示目录内容 pwd + ls + cd == 资源管理器 资源管理器: 管理(增删改查)文件系统 增: 创建文件夹/创建文件

mkdir: 创建文件夹, 默认: 在当前工作文件夹中创建子文件夹如: mkdir abc 就在当前文件夹中创建子文件夹abc 但是: 如果文件已经存在, 会出错误, 没有写授权出错误 touch: 创建文件, 默认: 在当前工作文件夹中创建文件 touch: 如果是已经存在的文件/文件夹, 修改"最后编辑时间" 如: touch test.txt 创建文件 touch test.txt 修改时间 Linux 用户在 "用户主目录" 中有全部的管理权限! 用户主目录: User Home(用户的家) 改: 该文件/文件夹的名字 mv 移动(move)/改名 mv [存在的文件/文件夹] [不存在的文件/文件夹] 改名命令mv [存在的文件/文件夹] 存在的文件夹移动命令 将前面的文件夹/文件移动到后面的文件夹里面 在执行mv命令之前, 要执行ls , 查看文件夹情况. rm 删除(remove) 文件/文件夹 rm 文件1 文件2 ... 删除文件 rm -rf 文件1 文件夹1 ... 删除文件夹 -rf 选项 r 是递归删除所有子文件夹 f 是强制删除所有文件 绝对目录/相对目录 绝对目录(路径): 从根目(/)录算起的目录 相对目录(路径): 从当前(.)目录算起的目录 如下都想相对目录, 是当前目录下的操作 如: mkdir abc touch abc mv abc def rm -rf abc 如下是绝对目录(路径)操作 如: cd / cd /home/soft01 mv /home/soft01/demo . 将demo 移动到当前目录中 ls / 常见目录 .. 上层(父目录) . 当前目录 ~ Home 用户主目录 cd ~ 回家 cd ~ == cd 苹果电脑 == Mac 电脑 操作系统: Mac OSX , 是Unix 系统 IOS 就是移动版的 OSX

Java基础_讲义

Java基础语法 今日内容介绍 方法 第1章方法 1.1方法概述 在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法。 如:小明同学在路边准备坐车来学校学习。这就面临着一件事情(坐车到学校这件事情)需要解决,解决办法呢可采用坐公交车或坐出租车的方式来学校,那么,这种解决某件事情的办法,我们就称为方法。 在java中,方法就是用来完成解决某件事情或实现某个功能的办法。 方法实现的过程中,会包含很多条语句用于完成某些有意义的功能——通常是处理文本,控制输入或计算数值。 我们可以通过在程序代码中引用方法名称和所需的参数,实现在该程序中执行(或称调用)该方法。方法,一般都有一个返回值,用来作为事情的处理结果。 1.2方法的语法格式 在Java中,声明一个方法的具体语法格式如下: 修饰符返回值类型方法名(参数类型参数名1,参数类型参数名2,......){ 执行语句 ……… return 返回值; }

对于上面的语法格式中具体说明如下: 修饰符:方法的修饰符比较多,有对访问权限进行限定的,有静态修饰符static,还有最 终修饰符final等,这些修饰符在后面的学习过程中会逐步介绍 返回值类型:用于限定方法返回值的数据类型 参数类型:用于限定调用方法时传入参数的数据类型 参数名:是一个变量,用于接收调用方法时传入的数据 return关键字:用于结束方法以及返回方法指定类型的值 返回值:被return语句返回的值,该值会返回给调用者 需要特别注意的是,方法中的“参数类型参数名1,参数类型参数名2”被称作参数列表,它用于描述方法在被调用时需要接收的参数,如果方法不需要接收任何参数,则参数列表为空,即()内不写任何内容。方法的返回值必须为方法声明的返回值类型,如果方法中没有返回值,返回值类型要声明为void,此时,方法中return语句可以省略。 接下来通过一个案例来演示方法的定义与使用,如下图所示。 public class MethodDemo01 { public static void main(String[] args) { int area = getArea(3, 5);

零基础学员学习Java课程的心得体会

零基础学员学习Java课程的心得体会 以下内容是依据自己在千锋学习Java课程培训的记录与心得,希望通过自己的分享能够大家带来新的帮助。 虽然来到千锋的时间不长仅仅有一个月的时间,但你要知道在一个月前我还在老家不知道该干什么,我的父母就经常在耳边常说,要多学一门技术,这样有几门技术傍身,不管在哪里都不愁。在我学习Java的这一个月里,我从一个对Java零基础的慢慢的变成了一个对Java稍微了解的学员。 虽然我是从零基础开始学习,而且接受能力也有点慢,不想其他学员那样接受的较快,但是我相信我一定能慢慢的赶上那些学习能力优秀的学生,俗话说的好“笨鸟先飞”,我在老师课上所讲的地方没听懂的,就去看老师所讲内容的视频,多看几遍,有不懂的就多去问问老师和同学,晚自习时把每天老师讲的内容用自己的话总结一下,使其这些知识变成自己的知识,晚上自习回去后也要继续学习,看看网上那些优秀的视频,每天把老师第二天要讲的内容都提前预习下,先使自己有一个印象,这样到老师讲课时会更容易懂一些,也能跟上老师讲课的进度,不至于落下一些知识。 在这一个月里,我们的讲课老师给我们讲了Java的一些基本知识:让我

们认识了什么是Java,一些常用的工具和一些以后要用的工具,更给我们讲了一些在开发软件上的一些有趣的事,还有在Java中能用到的运算法则啊、函数、集合、循环、数组、等等。在这月里我也曾想过:Java太难了,放弃学习,回家算了。但是想到父母对我的期望以及自己心里的那一丝“难道我不如其他人”的不甘心,这样使我坚持了下来,我不能让家里的父母失望,也不想让以后的我后悔,因为世上并没有后悔药可吃,所以我一定会把Java学好、学透。

相关文档
最新文档