[计算机软件及应用]Jaa.doc
《[计算机软件及应用]Jaa.doc》由会员分享,可在线阅读,更多相关《[计算机软件及应用]Jaa.doc(64页珍藏版)》请在三一办公上搜索。
1、*补充1:IDE工具:(Integrated Development Environment)集成开发环境,可以辅助开发程序的应用软件,就是你用来编程的软件。C的话,比如VC+,Java的话,比如Eclipse*补充2:我们知道,接口相当于一个抽象类,它不能创建实例,但可以使用“子类的对象也是父类的对象”原理,用接口做为函数的参数类型,这可以实现动态联编(binding).比如某个类A实现了接口I,那么只在是在以I为类型定义的函数参数,把类A创建的对象都可以填进去,如void f(I i) ; *OOP语言有一个性质:子类的对象也是父类的对象,即在任何父类的对象可以应用的地方,子类对象同样可以
2、应用,这是因为子类继承父类,那么它就有父类所有的东西,而且还有可能再发展自己,所以父类有的(比如一些变量,函数等),子类一定有。*Java和C+在定义数据和数据的初始化时有不同点,如:String s;这句话在C+中就是说创建一个String类对象s,但在Java中就是说创建了一个将要指向String类对象的一个引用名,这个引用名叫作s,还要对它进行指派相应的对象。所以,Java中的变量名都是引用名,这点切记!在C+中可以在类内的任何成员函数之前对变量进行定义,但只能在构造函数中对变量进行初始化(这点我深受感触),但在Java中可以在类内的函数之前进行对象的创建和直接初始化。*对System.
3、out.println()函数的注意:如果在这个函数中首次出现字符,那么在之后加到其中的其它数据(如int,float,double)也会以字符型打印。但如果首欠加到其中的是数据类型(如int,float,double)那么会进行数学运算,直到遇到一个字符对象才以字符型打印,如:int x=0,y=1,z=2;String s=”xyz”;System.out.println(s+x+y+z); /打印出:xyz012System.out.println(y+z+s);/打印出3xyz*Java的对象生成和释放:在Java中对象有构造函数,但没有析构函数,比如:String s=new Str
4、ing(“xyz”);这句话会完成三个动作:一个内容为xyz的String类对象被创建了,一个String类的引用名s被创建了,这个引用名s指向了这个xyz对象。在Java中没有析构函数,对象的释放由一个Java内部的垃圾收回机制,这个机制只会在内存快用完后才会进行内存清理,它有自己的一套确定哪些对象是垃圾的算法,一般认为一个对象没有哪个引用名引用它时,基本上可以确定它是一个垃圾了,这时该机制会调用这个对象的finalize()函数进行内存释放,我们知道,在Java中所以的类默认都是继承Object类的,而Object类中定义了finalize()函数,所以每个对象都有finalize()函数
5、。*Java程序的运行机制:Java程序没有传统的程序的思想,它就是类的集合,经编译完成后生成的是*.class文件,即字节码文件,更确切的说是类的描述文件,在Java中,认为一切事物都是对象,要运行程序时,JVM会创建一个对象的空间,并会在这些*.class文件中找到一个类中的main()函数,并从这个函数执行,当这个函数要用到其它类时,JVM才会动态的装载这个类的定义,所以Java程序又是动态的。*初始化顺序:在Java中的类中被创建时,要在内存中建立一块空间,紧接着就是对类内部的定义的对象呀,变量呀什么的进行初始化,然后才是建立构造函数和其它的一些函数,即要时刻记住,在Java的类被创建
6、时,是先建立类内定义的对象,然后才建立成员函数*初始化顺序:我们知道,在Java中所有的东西都可看作是对象,就连动态装载的类的描述文件*.class文件都看作是对象,而且我们还知道用static修辞的变量为对象的公有,不为哪个类所特有,那么这个公共的成员变量放在哪呢,要记住,它就放在*.class文件中,即如果在装载类时发现类内有静态成员的定义,那么就要在类内生成它。下面举例说明:public class StaticInitialization public static void main(String args) System.out.println(Creating new Cupbo
7、ard() int main); . Static Table t1=new Table();class Table Table() .当我们在命令行中键入java StaticInitilization时,发生了什么呢,首先JVM被启动了,然后它要在内存中找StaticInitilization类的类定义,发现没有,那么它要装载这个类的定义文件,于是在内存中就有了StaticInitilization的类描述文件,即StaticInitilization.class文件,这个文件是一个类对象,StaticInitilization.class就代表StaticInitilization这个类
8、(因为在Java中认为一切东西都是对象),而在这个类中发现有静态的Table类的对象t1,就要动态装载Table类的描述文件,在内存中生成Table.class文件,然后再用这个Table类对象来创建t1对象,完成上面的后,再转回执行StaticInitilization类的构造函数所以对上面的总结有:假如类型为Dog的一个对象首次创建时,或者Dog类的静态方法/数据首次访问时,Java解释器必须找到Dog.class,找到Dog.class后,它的所有的静态初始化模块都会运行。因此,静态初始化仅仅发生一次。创建一个new Dog()时,new语句首先会在堆里分配一个足够的空间,这个空间将会被
9、清除为零,因此Dog中所有的数据成员都得到了缺少值。然后定义初始化,最后执行构造函数。因此初始化的顺序为:整个类装载进来,先静态初始化,然后再动态初始化,先定义初始化,后构造函数。分析以下代码:class Cupsstatic Cup cup1;static Cup cup2;static cup1=new Cup(1); cup2=new Cup(2); Cups() 在上面的代码中出现了下面的语句:static cup1=new Cup(1); cup2=new Cup(2); 它在Java中叫静态初始化块,在静态初始化时,这条语句会被执行,它相当于一条静态初始化语句。还有下面语句:cla
10、ss Mugs Mug c1; Mug c2- c1=new Mug(); c2=new Mug(); System.out.println(“c1 & c2 has been created”); Mugs() 上面程序中的部分代码如下,叫定义初始化块,它是在构造函数之前就已经被创建了。如果在Java中有一个没有名字的类,那下面的程序是不是就像是这个没有名字的类的构造函数呢,实际在Java中就有这样的类,而下在的代码也正是这个目的。 c1=new Mug(); c2=new Mug(); System.out.println(“c1 & c2 has been created”); *数据:
11、我们知道在Java中数据有两种定义:int a; int a,个人建议用前者,因为如果用后者,反而会影响你对这个变量a的意义的理解,因为在Java中,数组就是实际上是一个指向数组的句柄(或引用,或指针),int a;说明a是一个数组的引用,它将来要引用一个数组。所以在Java中为数组的方括号中千万不能写上数字,不能写int 5 a;你这样是想说a将来指向一个有5个数据的数组,但这明显有语法错误,不能这么写。分析下面代码:class Arrays int a1=1,2,3,4,5; int a2; Arrays() show(a1); for(int i=0;ia1.length;i+) a1i
12、+; show(a1); a2=a1; show(a2); void show(int b) for(int i=0;i编辑,打开后,在里面写入classpath=再保存就可以了。对classpath的理解,我们知道如果一个类要声明自己属于哪个包,那么它必须在这个以这个包名为文件夹的目录下面,但是在这个包名前还可能有多得目录呢,那么在运行程序时, 怎么能快速找到这个类的定义文件呢,这就要用到classpath,在这个classpath里列出了好多路径,那么JVM就会首先按照这些给定的目录去找这个类的定义。一个小细节,如果在操作台上发现classpath为一个点,那这个点是什么意思,记住,这个点
13、是指当前目录,就是在当前目录下找文件。还有一点要注意,我们在DOS中用javac编译一个*.java文件,是以文件名+.java列出的这个文件,但如果在类文件里声明自己属于哪一个包时,那么编译这个文件时,我们要到这个文件所在的目录下面,键入javac+filename.java进行编译,完了之后,要执行它呀,如果classpath已经设置好了,那么在任何目录下都可以执行它,只不过它的名字不再是文件名了,应改为“包名”+点+“类名“,即这个文件有”姓“了,它姓包名,这时可以在任何盘盘任何目录下执行java命令都可以运行它。但如果没有在类的首行写上包名,那么执行它时不要加上包名。比如在Hellow
14、world.java文件里第一行写了package bag1;那么编译Helloworld.java文件时就要键入:javac bag1.Helloworld.java;*对批处理文件的认识:批处理文件是可以在DOS窗口中以批处理文件名为命令来执行的,就像*.exe文件一样,如java.exe,那么可以在DOS中键入java,再加点参数就可运行了,所以设置环境变量时,也可以写一个脚本文件,里面写上一行一行的命令,然后再运行这个脚本文件,且看我用批处理文件来设置环境变量classpath:打开一个文本编辑器,写上 set classpath=D:,然后保存为batfile.bat,再用DOS把目
15、录行定位符定位到这个文件所在的位置,再键入batfile就OK了,可以再键入set classpath查看是否设置好了。*类成员的访问属性:针对类内的每个成员的每个定义,Java访问属性public,protected和private都必须放在它们的前面无论是数据成员还是方法,这是因为它不能像C+那样,如果public int a,b,c,d,;那么在一个public后面定义的变量太长,在确定变量之前的修辞字时会很困难,所以在Java中规定在每个变量之前都要加关键字,如:public int a;public int b;public int c;*缺省包:在Java中,如果同一个目录下面的所
16、有java程序文件都没有声明自己属于哪个包,那么这些文件同属于一个缺省包,即在这个目录下面的这些文件*类的访问控制:类的访问控制有public,friendly(缺省值),private,protected,其各自的访问权限可见书,比如friendly访问权限是包内可见,什么意思呢,即这个类的定义是在同一个包内可以访问的,又是什么意思呢,即如果这个类的文件在这个包里,那么就可用这个类来创建对象,因为它是包内可见的。现在考虑一个问题,在包内有一个friendly的类,调用这个类的某个函数,它的返回值是类型就是该类的对象,这个返回的对像拿到包外可不可以用,这个你考虑一下,其实它是可以用的。有以下代
17、码:class Soup private Soup() public static Soup makeSoup() return Soup(); 可以看到该类的构造函数是私有的,即其它类的所有函数都不可以访问,在该类中有一个makeSoup()函数,它是静态的,而且必须是静态的,因为如果不是静态的,那要通过该类的对象去调用,而由于该类的构造方法是私有的,不能创建对象,所以无法能过对象调用。在这个makeSoup()函数中,它的返回值是一个Soup类的对象,这也就是上面讲到的问题,可以用包里的类创建对象对外返回。*在Java中子类继承父类的原理:其实在创建子类对象时,首先要在堆里面分配一块内存,
18、然后先调用父类的构造函数,生成一个父类对象,然后再调用子类的构造函数,再创建子类与父类相比多出的东西,这样一来,就创建好了子类对象,所以可以认为子类对象里“内含”父类对象。这里说明一个为什么不先初始化自己,再初始化父亲,因为如果你先初始化自己,在初始化过程中,有可能要用到父亲对象中的变量,而父亲对象还未创建,所以这样不行.*分析有继承的初始化和类的装载:分析以下代码:class Insect 1) int i=9; int j;2) Insect() prt(i=+i+,j=+j); j=39; 3) static int x1=prt(static Insect.x1 initialized
19、); static int prt(String s) System.out.println(s); return 47; public class Beetle extends Insect 4) int k=prt(Beetle.k initialized);5) Beetle() prt(k=+k); prt(j=+j); 6) static int x2=prt(static Beetle.x2 initialized); public static void main(String args) prt(Beetle constructor); Beetle b=new Beetle(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件及应用 计算机软件 应用 Jaa

链接地址:https://www.31ppt.com/p-4561544.html