20145326《Java程序设计》第一周学习总结
教材学习内容总结
转眼间新的一学期终于开始了!为什么我这么期待呢?因为这学期可以上娄嘉鹏老师的java程序设计课,我不是什么电脑天才,之前c语言学得也不是特别好。可我就是对hdl和java特别感兴趣(之前在我的问卷调查报告里面提到过),并且寒假的时候在家里也预习了一部分java知识。第一周要求学习两个章节并作心得体会,虽然我早已看过前两章的知识,不过为了进一步巩固,我还是用了星期六一天的时间把第一章和第二章的知识从头到尾仔仔细细的看了一遍,边看边想边体会,不断发现新的问题并解决它,以求进步与提高!(星期六一天,早上八点半开始看书思考到中午12点,吃饭睡觉到下午两点。然后健身洗澡吃饭洗衣服到晚上七点,然后博客从晚上七点一直写到晚上将近12点。虽然用的时间很长,不过我不得不承认这种学习总结的效果真的很好!)
1 java平台概论
要想更好的使用java,首先必须要深入的了解它。所谓工欲善其事,必先利其器。书的第一章就给我们讲述了java的前世今生,在其发展的过程中,其应用领域越来越广,逐渐演变出不同的分支,Sun公司在1999年6月旧金山的Java One大会上公布了新的java体系结构,该结构根据不同级别的应用开发区分了不同的应用版本,它们就是如今的三大平台Java SE、Java EE和Java ME。Java SE是本书介绍的主要对象。Java SE是学习其他平台应用的基础,Java EE则是在SE基础上更进一步,适用于开发分布式、多层次以web为基础的应用程序,Java ME是作为小型数字设备上开发及部署的平台。
2 JVM/JRE/JDK
作为基础的Java SE又可分为四个主要部分:JVM、JRE、JDK和Java语言。为了能够运行Java撰写好的程序,必须有Java虚拟机(JVM)。JVM包括在Java执行环境(JRE)中,所以为了要运行Java程序,必须安装JRE。如果要开发Java程序,必须取得JDK,JDK包括JRE及开发过程中需要的一些开发工具,像是javac、java等工具程序。了解JVM JRE JDK毫无疑问是我们学习过程中必不可少的一部分,JVM就是虚拟机,其作用就好比是一个程序翻译员,将class翻译成机器码,JVM是Java程序唯一认识的操作系统,说白了就是系统自身是无法运行class文件的,有了JVM,class文件才能运行起来,且JVM让Java可以跨平台,每个平台认识的0、1序列并不一样,因此必须使用不同的编译程序为不同的平台编译出可执行的机器码,Java是高级语言,我们的目的是让程序“编译一次,到处执行”。Java并不直接编译为相依于某平台的0、1序列,而是翻译为中介格式的位码。不同的平台必须安装专属该平台的JVM。只有这样才能达到“编译一次,到处执行”的目的。JVM是Java唯一认识的操作系统,位码文档就是JVM的可执行文件。人不在合适环境下就无法生存,java也是这样,JRE就是java执行环境,可提供所需链接库。JDK则提供工具程序,而JDK本身就包括了JRE。总而言之,其三者是一种包含关系,JDK中有JRE,JRE中有JVM。安装好JDK之后,记住该自己设定的变量或选项就要自己设定,JDK不会代劳。至今,JDK已有许多版本,当你想在不同的系统中运行java程序时,只需更改JDK版本即可,这就是大家都说java可以跨平台的原因所在。
3 简单的java程序,hello world
首先要在Windows下设置“显示扩展名”,接着选择一个文件夹来撰写Java原始码文档。再创建一个“文本文件”(也就是.text文件),编好代码后保存,并重新命名为hello world.java。确定更改文字文件的扩展名。注意扩展名必须是.java,主文档名必须与类名称相同。然后再打开DOS命令行,切换目录至刚刚新建的文件夹目录下,逐步操作,最终实现hello world。class是用来定义类的关键词,之后接类名称。public class hello world即表示hello world是它的公开类,一个java文档可以定义多个类,但只可有一个公开类,且公开类名称和主文档名称需要保持一致。之后java程序执行的起点是main()方法,必须写成public static void main(String[] args)的形式。main()表示可以被JVM公开执行,static表示JVM不用生成类实例就可以调用,main()不用传回值,声明为void即可,String[] args可以在执行程序时,取得用户指定的命令行自变量。println()与print()的区别在于输出字符串后换不换行。(前者输出后要换行,后者不换行)
4 path\classpath\sourcepath
path是操作系统中的环境变量,当你输入一个指令而没有指定路径信息时,操作系统会依照PATH环境变量中设定的路径顺序,依次寻找各路径下是否有这个命令。我们可以执行echo %path%来看看目前系统path环境变量中包括哪些路径信息。而设定path有两个方法。一 、SET PATH =" " 二、进入"系统属性"单击"环境变量"找到path直接修改。设定时有多个路径,会使用分号(;)作分隔,通常会将原有path附加在设定值后面,这样寻找其他指令时,才可以利用原有的path信息。设定完成之后,就可以执行javac而不用额外指定路径。建议将JDK的bin路径放在path变量的最前方,是因为系统搜索path路径时,会从最前方开始。
classpath:从一开始就在强调,JVM是Java程序唯一识别的操作系统,对于JVM来说,可执行文件就是扩展名为.class的文档。想在JVM中执行某个可执行文件(.class),就要告诉它到哪些路径下寻找文档,方式是通过classpath指定其可执行文件(.class)的路径信息。classpath和path功能类似,均为指令的执行路径,不同的是path为windows的搜索路径,可执行文件为exe和bat,而classpath是JVM中的搜索路径,使用-classpath为JVM指定可执行文件(.class)的路径信息(也可缩写为-cp),如java -cp C:\workplace helloworld 。 JVM预设的classpath就是读取目前文件夹中的.class。如果想从当前文件夹中开始寻找类文档,则可以使用“.”指定。
sourcepath:为javac指令指定路径,和classpath有一定程度的相似,使用时写成javac -sourcepath src main.java(在当前路径中的src文件夹中寻找main.java并编译成main.class) 在编译时,会先搜索—sourcepath指定的文件夹是不是有使用到的类原始码,然后会搜索classpath中是否有已编译的类位码。确认原始码与位码搜索路径之后,接着检查classpath是否已经有编译完成的Main类。如果存在且从上次编译后,Main类的原始码并没有改变,则无需重新编译,如果不存在,则重新编译main类。
5 package 这是一种分门别类管理类的方式,可以解决文件覆盖的问题。.java放在src文件夹中,编译出来的.class放置在class文件夹下。使用时,即在java文档的最上方添加相应语句,如书上package cc.openhome,相应main类必须放置在当前的cc/openhome文件夹中, package所定义名称与class所定义名称,会结合而成类的完全吻合名称,原始码文档要放置在与package所定义名称层级相同的文件夹层级中。由于console类使用package定义在cc.openhome.until包下,所以console.java必须放在src文件夹中的cc\openhome\until文件夹,且在没有工具辅助下,必须手动建立文件夹。在原始码中指定使用某个类时,如果是相同包中的类,只要使用class所定义的名称即可,而不同包的类,必须使用完全吻合名称。在编译时,若有使用-d指定位码的存放位置,就会自动建立对应包层级的文件夹,并将编译出来的位码文档放置至应有的位置。
6 import 注意import只是告诉编译程序,遇到不认识的类名称,可以尝试使用import过的名称,import让你少打一些字,让编译程序为你多做一些事。不过偷懒是有限度的,(书上有例子)有时候必须要自己明确的逐字打出来。
7.IDE —target —source 简单地说,IDE可以代劳我们做一些原始码文档与位码文档等资源管理工作,提升我们的效率。书上主要选取的是NetBeans IDE进行介绍。NetBeans可以切换至“文件”窗口直接查看实际文档管理,且如果我们要使用NetBeans执行程序进入main()的类,可直接右击Main.java文件,在弹出的快捷菜单中选择“运行文件”命令,会有个“输出”窗格显示执行结果。这比我们使用DOS命令行方便多了。对于一些编译错误,它也可以提醒我们,很人性化。我们还可以在NetBeans中切换JDK版本。用—verbose可以确认位码文档的版本号。在编译的时候,可以使用-target指定编译出来的位码,必须符合指定平台所允许的版本号,使用—source要求编译程序检查使用的语法,不超过指定的版本。JDK8默认的-target与—source都是1.8,—target在指定时,值必须大于或等于—source。
教材学习中的问题和解决过程
在刚开始的学习过程中,书中会经常使用如cd\或者cd..之类的DOS命令,刚开始阅读时会有许多不懂,不过通过观看视频资料以及阅读娄老师相应的博客时,问题就迎刃而解了。还有就是关于容器。容器是说比如有很多个不同的容器,一些特定的不同的东西只能放入对应的容器中,并且遵循各自的管理,每个不同的小容器又在一个大容器中,是JVM里吗?我感觉容器就是一种java应用程序,书上说是应用程序沟通、协调相关资源的系统。然后是在学习到classpath和sourcepath时,一直疑惑同样作为指定路径的两者之间有何区别,最终通过观察书中其他的编译发现,classpath是找位码(.class)文件,sourcepath是找原始码(.java)文件,使用classpath时,一般为java -cp ……使用sourcepath时,一般为javac -sourcepath……两者所指定的文件是不同的。关于IDE,目前还不是很熟练,不过我真的被它所吸引,它大大简化了我们的java操作流程,更直观,更简便。
代码调试中的问题和解决过程
(我觉得还是这个最有意思)
使用Console类编写helloworld(使用其他类链接库练习)
代码: public class main{ public static void main(String[] args) { Console.writeLine("hello world"); } }
我以为电脑中本身是自带Console类文件的,但是实际上并没有,所以我自己写了一个Console.java
public class Console{
public static void writeLine(String text)
{ System.out.println(text);}
{
因为我是将Console类和main类都放在c盘中的java文件夹中,所以在编译时只需要进入到java文件夹下直接执行java main就好了。但是如果没有把Console类和main类放在一起的话,就需要为JVM指定classpath。
其他(感悟、思考等,可选)
我感觉学习java时,书本理论知识和实践操作是缺一不可同时也是不可混作一谈的,“纸上得来终觉浅,绝知此事要躬行”的道理就是如此,对于程序类的课程,掌握了一定理论后,多练多动手才是王道。理论与实践相结合,不断发现问题,不断克服,才能不断进步!我记得在第一章的学习过程中,书上明显写着公开类名称必须要和主文档名称一致,当时看书时以为牢牢记住了,觉得很简单。可是在实际操作时候还是会犯错误,可见实践操作经验之重要! 在编写java文档的时候,也容易错误的将大小写搞混,还有空格的问题。最终发现编程工作真的是一个极其细致的工作,看书会了,并不代表动手就会,希望在今后,多动手练习,不偷懒,不怕麻烦,理论与实践相结合,能养成细致和检查的习惯,一点一滴积累。 Maybe I am a slow walker,but I never walk back! !
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
目标 | 3500行 | 25篇 | 300小时 | |
第一周 | 120/120 | 1/1 | 14/14 | |
第二周 | ||||
第三周 | ||||
第四周 |