|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。★第一讲 Java言语概述
【课前思索】
1.一门新的言语的发生是不是必要自创之前的编程言语?
2.在java言语呈现之前是不是存在别的跨平台的言语?
3.有哪些编程言语是面向对象的?而哪些编程言语是面向历程的?从编程思绪上存在着哪些实质不同?C++言语是面向对象的仍是面向历程的?
4.一段优异的程序代码是不是应当是可读性极强的?程序员之间是不是应当遵守不异的编程标准?
5.一个程序员编好的代码假如必要让其余程序员利用,怎样供应该代码的利用申明?
1.1java言语的开展史
1.1.1java言语在互联网时期取得伟大乐成
java言语具有平安、跨平台、面向对象、复杂、合用于收集等明显特性,java言语已成为最盛行的收集编程言语。
在履历了以年夜型机为代表的会合盘算形式和以PC机为代表的分离盘算形式以后,互联网的呈现使得盘算形式进进了收集盘算时期。收集盘算形式的一个特性是盘算机是异构的,即盘算机的范例和操纵体系是纷歧样的,比方SUN事情站的硬件是SPARC系统,软件是UNIX中的Solaris操纵体系,而PC机的硬件是INTEL系统,操纵体系是windows大概是Linux。收集盘算形式的另外一个特性是代码能够经由过程收集在各类盘算机长进行迁徙,这就急切必要一种跨平台的编程言语,使得用它编写的程序可以在收集中的各类盘算机上可以一般运转,java就是在这类需求下应运而生的。
1.1.2java言语的发生
C言语是面向历程的言语,也是利用率十分高的言语;而面向对象的头脑引进到编程言语以后,C言语就被改革成为面向对象的C++言语,失掉了普遍的使用。可是C++言语必需兼容C言语,因而C++言语是面向历程和面向对象夹杂的言语。
java言语发生于C++言语以后,是完整的面向对象的编程言语,充实吸收了C++言语的长处,接纳了程序员所熟习的C和C++言语的很多语法,同时又往失落了C言语中指针、内存请求和开释等影响程序强健性的部分。
java言语的一个方针是跨平台,因而接纳懂得释实行而不是编译实行的运转情况,在实行过程当中依据地点的分歧的硬件平台把程序注释为以后的呆板码,完成跨平台运转。而静态下载程序代码的机制完整是为了顺应收集盘算的特性,程序能够依据必要把代码及时的从服务器中下载过去实行,在此之前还没有任何一种言语可以撑持这一点。
1.2java的事情道理
1.2.1java假造机(1)
java假造机是软件摹拟的盘算机,能够在任那边理器上(不管是在盘算机中仍是在别的电子设备中)平安而且兼容的实行保留在.class文件中的字节码。java假造机的"呆板码"保留在.class文件中,偶然也能够称之为字节码文件。java程序的跨平台次要是指字节码文件能够在任何具有java假造机的盘算机大概电子设备上运转,java假造机中的java注释器(java命令)卖力将字节码文件注释成为特定的呆板码举行运转。
1.2.1java假造机(2)
可是,java假造机的创建必要针对分歧的软硬件平台做专门的完成,既要思索处置器的型号,也要思索操纵体系的品种。以下图所示,今朝在SPARC布局、X86布局、MIPS和PPC等嵌进式处置芯片上、在UNIX、Linux、windows和部分及时操纵体系上都有java假造机的完成。
1.2.2无用内存主动接纳机制
在java运转情况中,一直存在着一个体系级的线程,专门跟踪内存的利用情形,按期检测出不再利用的内存,并举行主动接纳,制止了内存的保守,也加重了程序员的事情量。
1.2.3代码平安性反省机制
字节码的实行必要经由三个步骤,起首由类装载器(classloader)卖力把类文件(.class文件)加载到java假造机中,在此历程必要查验该类文件是不是切合类文件标准;其次字节码校验器(bytecodeverifier)反省该类文件的代码中是不是存在着某些不法操纵,比方applet程序中写本机文件体系的操纵;假如字节码校验器查验经由过程,由java注释器卖力把该类文件注释成为呆板码举行实行。java假造机接纳的是"沙箱"运转形式,即把java程序的代码和数据都限定在必定内存空间里实行,不同意程序会见该内存空间外的内存,假如是applet程序,还不同意会见客户端呆板的文件体系。
1.2.4Java言语的特性
java与C/C++言语的对照:
a.全局变量
java程序不克不及界说程序的全局变量,而类中的大众、静态变量就相称于这个类的全局变量。如许就使全局变量封装在类中,包管了平安性,而在C/C++言语中,因为不加封装的全局变量常常会因为利用不妥而形成体系的溃散。
b.前提转移指令
C/C++言语顶用goto语句完成无前提跳转,而java言语没有goto言语,经由过程破例处置语句try、catch、finally来代替之,进步了程序的可读性,也加强了程序的鲁棒性。
c.指针
指针是C/C++言语中最天真,但也是最简单堕落的数据范例。用指针举行内存操纵常常形成不成预知的毛病,并且,经由过程指针对内存地点举行显现范例转换后,能够类的公有成员,损坏了平安性。在java中,程序员不克不及举行任何指针操纵,同时java中的数组是经由过程类来完成的,很好的办理了数组越界这一C/C++言语中不做反省的弱点。
d.内存办理
在C言语中,程序员利用库函数malloc()和free()来分派和开释内存,C++言语中则是运算符new和delete。再次开释已开释的内存块大概开释未被分派的内存块,会形成体系的溃散,而健忘开释不再利用的内存块也会渐渐耗尽体系资本。在java中,一切的数据布局都是对象,经由过程运算符new分派内存并失掉对象的利用权。无用内存接纳机制包管了体系资本的完全,制止了内存办理不周而引发的体系溃散。
e.数据范例的分歧性
在C/C++言语中,分歧的平台上,编译器对复杂的数据范例如int、float平分别分派分歧的字节数。比方:int在IBMPC上为16位,在VAX-11上就为32位,招致了代码数据的不成移植。在java中,对数据范例的位数分派老是流动的,而不论是在任何的盘算机平台上。因而就包管了java数据的平台有关性和可移植性。
f.范例转换
在C/C++言语中,能够经由过程指针举行恣意的范例转换,不平安要素年夜年夜增添。而在java言语中体系要对对象的处置举行严厉的相容性反省,避免不平安的转换。
g.头文件
在C/C++言语中利用头文件声明类的原型和全局变量及库函数等,在年夜的体系中,保护这些头文件长短常坚苦的。java不撑持头文件,类成员的范例和会见权限都封装在一个类中,运转时体系对会见举行把持,避免不法的会见。同时,java顶用import语句与别的类举行通讯,以便会见别的类的对象。
h.布局和团结
C/C++言语顶用布局和团结来暗示必定的数据布局,可是因为其成员均为私有的,平安性上存在成绩。java不撑持布局和团结,经由过程类把数据布局及对该数据的操纵都封装在类内里。
i.预处置
C/C++言语中有宏界说,而用宏界说完成的代码常常影响程序的可读性,而java不撑持宏界说。
1.2.5java平台-不休扩大的盘算平台
java不但是编程言语,仍是一个开辟平台,java手艺给程序员供应了很多工具:编译器、注释器、文档天生器和文件打包工具等等。同时java仍是一个程序公布平台,有两种次要的"公布情况",起首java运转时情况(javaruntimeenvironment,简称JRE)包括了完全的类文件包,其次很多次要的扫瞄器都供应了java注释器和运转时情况。今朝Sun公司把java平台分别成J2EE、J2SE、J2ME三个平台,针对分歧的市场方针和设备举行定位。J2EE是Java2EnterpriseEdition,次要目标是为企业盘算供应一个使用服务器的运转和开辟平台。J2EE自己是一个开放的尺度,任何软件厂商都能够推出本人的切合J2EE尺度的产物,利用户能够有多种选择。IBM、Oracle、BEA、HP等29家已推出了本人的产物,个中尤以BEA公司的weglogic产物和IBM公司的websphare最为出名。J2EE将慢慢开展成为能够与微软的.NET计谋绝对抗的收集盘算平台。J2SE是Java2StandardEdition,次要目标是为台式机和事情站供应一个开辟和运转的平台。我们在进修java的过程当中,次要是接纳J2SE来举行开辟。J2ME是Java2MicroEdition,次要是面向消耗电子产物,为消耗电子产物供应一个java的运转平台,使得java程序可以在手机、机顶盒、PDA等产物上运转。上述三个java平台的干系如右图所示。
1.3统统都是对象
面向对象的第一个准绳是把数据和对该数据的操纵都封装在一个类中,在程序计划时要思索多个对象及其互相间的干系。
地道的面向对象程序计划办法是如许的:
1)有的工具都是对象。
2)序是一年夜堆对象的组合。
3)个对象都有本人的存储空间。
4)个对象都属于某个类。
1.4构建java程序
java程序分为javaapplication(java使用程序)和javaapplet(java小使用程序)两种。假如这个文件的代码顶用到了体系所供应的分外的类,就必需安排一个import语句。说它是分外的是指一个特别的类库"java.lang"会主动导进到每一个java文件。
1.4.1第一个javaapplication
importjava.util.*;
/*上面我们用到了Date和Properties这两个类,是属于java.util这个包的;*/ /*而System和Runtime这两个类,是属于java.lang这个包的。*/
publicclassProperty{
publicstaticvoidmain(Stringargs[]){
System.out.println(newDate());//在命令行上面打印出日期
Propertiesp=System.getProperties();//取得体系的Properties对象p,
//getProperties()是System类的一个静态办法(static办法),因为它是"静态"的,以是不用创立
//象就能够挪用该办法
p.list(System.out);//list()的办法,它将本人的全体内容都发给一个PrintStream对象
System.out.println("---MemoryUsage:");
Runtimert=Runtime.getRuntime();
//经由过程挪用Runtime的getRuntime()办法创立了一个Runtime,该对象中包括了内存等信息
System.out.println("TotalMemory="
+rt.totalMemory()//打印总内存巨细
+"FreeMemory="
+rt.freeMemory());//打印余暇内存巨细
}
}
1.4.2第一个javaapplet
applet没有main()办法,它必需嵌在超文本文件中,在扫瞄器中举行运转。一切的applet程序都是Applet类的子类,applet程序是从办法init()入手下手实行的。Paint办法承继于其先人类Component,在component第一次被显现或重画时挪用该办法,其参数Graphics是被显现的对象。
//这是我们的第一个javaapplet,该程序保留在文件HelloEducation.java中
importjava.awt.Graphics;
importjava.applet.Applet;
publicclassHelloEducationextendsApplet{
publicStrings;
publicvoidinit(){
s=newString("WelcometoTongfangEducation");
}
publicvoidpaint(Graphicsg){
g.drawString(s,25,25);
//在扫瞄器中坐标为(25,25)的地位显现字符串s
}
}
javaapplet程序也是一个类,其编译体例与javaapplication完整一样。javaapplet的实行体例与javaapplication完整分歧,javaapplet程序必需嵌进到html文件中才干够实行,因而必需编写响应的html文件。
上面为HelloEducaiton.html文件的内容:
<html>
<appletcode=HelloEducation.classwidth=250height=250>
</applet>
</html>
然后能够经由过程JDK所供应的命令"appletviewer",在命令行上面实行javaapplet程序。假如是在windows操纵体系中,就能够在"命令提醒符"下敲进"appletviewerHelloEducation.html"。applet还能够接纳别的一种体例运转,那就是间接在扫瞄器中翻开HelloEducation.html程序,在支流的扫瞄器如IE、Netscape中都包括有java假造机,卖力注释实行javaapplet程序。
1.5java程序标准
1.5.1java源程序布局
一个完全的java源程序应当包含以下部分:
package语句;//该部分最多只要一句,必需放在源程序的第一句
import语句;/*该部分能够有多少import语句大概没有,必需放在一切的
类界说之前*/
publicclassDefinition;//大众类界说部分,最多只要一个大众类的界说
//java言语划定该java源程序的文件名必需与该大众类名完整分歧
classDefinition;//类界说部分,能够有0个大概多个类界说
interfaceDefinition;//接口界说部分,能够有0个大概多个接口界说
比方一个java源程序能够是以下布局,该源程序定名为HelloWorldApp.java:
packagejavawork.helloworld;/*把编译天生的一切.class文件放到包
javawork.helloworld中*/
importjava.awt.*; //告知编译器本程序顶用到体系的AWT包
importjavawork.newcentury;/*告知编译器本程序顶用到用户自界说
的包javawork.newcentury*/
publicclassHelloWorldApp{......}/*大众类HelloWorldApp的界说,
名字与文件名不异*/
classTheFirstClass{......}//第一个一般类TheFirstClass的界说
classTheSecondClass{......}//第二个一般类TheSecondClass的界说
......//别的一般类的界说
interfaceTheFirstInterface{......}/*第一个接口
TheFirstInterface的界说*/
......//别的接口界说
package语句:包在实践的完成过程当中是与文件体系绝对应的,比方javawork.helloworld所对应的目次是pathjavaworkhelloworld,而path是在编译该源程序时指定的。好比在命令行中编译上述HelloWorldApp.java文件时,能够在命令行中敲进"javac-df:javaprojectHelloWorldApp.java",则编译天生的HelloWorldApp.class文件将放在目次f:javaprojectjavaworkhelloworld目次上面,此时f:javaprojcet相称于path。可是假如在编译时不指定path,则天生的.class文件将放在编译时命令行地点确当前目次上面。好比在命令行目次f:javaproject下敲进编译命令"javacHelloWorldApp.java",则天生的HelloWorldApp.class文件将放在目次f:javaproject上面,此时的package语句相称于没起感化。
import语句:假如在源程序顶用到了除java.lang这个包之外的类,不管是体系的类仍是本人界说的包中的类,都必需用import语句标识,以关照编译器在编译时找到响应的类文件。
源文件的定名划定规矩:假如在源程序中包括有大众类的界说,则该源文件名必需与该大众类的名字完整分歧,字母的巨细写都必需一样。这是java言语的一个严厉的划定,假如不恪守,在编译时就会堕落。因而,在一个java源程序中最多只能有一个大众类的界说。假如源程序中不包括大众类的界说,则该文件名能够恣意取名。假如在一个源程序中有多个类界说和接口界说,则在编译时将为每一个类天生一个.class文件。(每一个接口编译后也天生.class文件)
1.5.2java编程标准
包名:包名是全小写的名词,两头能够由点分开开,比方:java.awt.event;
类名:首字母年夜写,一般由多个单词分解一个类名,请求每一个单词的首字母也要年夜写,比方classHelloWorldApp;
接口名:定名划定规矩与类名不异,比方interfaceCollection;
办法名:常常由多个单词分解,第一个单词一般为动词,首字母小写,两头的每一个单词的首字母都要年夜写,比方:balanceAccount, isButtonPressed;
变量名:全小写,通常是名词,比方:length;
常量名:基础数据范例的常量名为全年夜写,假如是由多个单词组成,能够用下划线离隔,比方:intYEAR,intWEEK_OF_MONTH;假如是对象范例的常量,则是巨细写夹杂,由年夜写字母把单词离隔。
1.5.3java正文
单行正文:从"//"入手下手到本行停止的内容都是正文,
多行正文:在"/*"和"*/"之间的一切内容都是正文,
文档正文:在正文方面java供应一种C/C++所不具有的文档正文体例。其中心头脑是当程序员编完程序今后,能够经由过程JDK供应的javadoc命令,天生所编程序的API文档,而该文档中的内容次要就是从文档正文中提取的。该API文档以HTML文件的情势呈现,与java匡助文档的作风与情势完整分歧。但凡在"/**"和"*/"之间的内容都是文档正文。比方上面的DocTest.java文件:
/**这是一个文档正文的例子,次要先容上面这个类*/
publicclassDocTest{
/**变量正文,上面这个变量次要是充任整数计数*/
publicinti;
/**办法正文,上面这个办法的次要功效是计数*/
publicvoidcount(){}
}
运转"javadoc-d.docDocTest.java",就在以后面前目今的doc目次中天生了先容类DocTest的index.html等文件。
注重:天生的doc文档包含一系列的.html文件和资本文件,javadoc仅天生public和protected标识的属性和办法,private标示的不显现在index.html文件中。每一个public或protected声明的下面的/**…*/内容为该声明的正文。如/**变量正文,上面这个变量次要是充任整数计数*/为属性i的正文。假如在该.java文件中包括其他类声明(如classsubclass1等),javadoc不为其包括的子类天生任何申明文档,由于没有public关头字。
认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点, |
|