您好,欢迎访问三七文档
第一章JAVA概述什么是JDKJDK(JavaDevelopmentKit)是SunMicrosystems针对Java开发员的产品。JDK是整个Java的核心,包括了Java运行环境(JavaRuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。什么是JREJRE为JavaRunTimeEnvironment的简称,JavaRuntimeEnvironment(包括JavaPlug-in)是Sun的产品,包括两部分:JavaRuntimeEnvironment和JavaPlug-in。JavaRuntimeEnvironment(JRE)是可以在其上运行、测试和传输应用程序的Java平台。它包括Java虚拟机、Java平台核心类和支持文件。JRE需要辅助软件--JavaPlug-in--以便在浏览器中运行applet。JRE不包含开发工具、编译器、调试器以及其他工具。什么是JVMJava虚拟机(JavaVirtualMachine)简称JVM,Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM在整个JDK中处于最底层,负责与操作系统的交互,用来屏蔽操作系统环境,提供一个完整的Java运行环境。JDK、JRE、JVM的包含关系JDK包含了JRE,JRE包含了JVMJAVA程序编译执行过程Name.javaName.classJVM1)Java编译器将Java源文件编译为字节码文件,即.class文件字节码文件与系统平台无关,是介于源代码和机器指令之间的一种状态。2)JVM负责解释执行字节码文件JVM将字节码文件解释成与系统平台相对应的机器指令,这样既减少了编译次数,又增强了程序的可移植性,因此被称为“一次编译,多次运行”。字节码文件概念字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码,它是一种二进制文件,是Java源文件由Java编译器编译后生成的目标代码文件。它必须由专用的Java解释器来解释执行。Java解释器负责将字节码文件翻译成具体硬件环境和操作系统平台下的机器代码,它运行在被称为Java虚拟机的软件平台之上。JAVA平台无关性平台无关性:一种语言在计算机上运行不受平台的约束。从微观来说,Java编译出来都是字节码文件,去到哪个平台都可以使用,只要有那个平台的JVM就行。字节码好比是一个人,平台好比国家,JVM则好比这个国家的语言。只要这个人(字节码)拥有了这个这个国家的语言(JVM),便可以在这个国家(平台)生活下去!JAVA平台无关性Java平台无关性的关键:JVMJava虽然是一门高级语言,它通过其他的低级语言来实现一个虚拟机,虽然平台不同,但是也可以使用不同的技术来实现一个功能相近的虚拟机,然后在Java程序在虚拟机上运行,就“与平台无关了”。课后习题P16下面哪些代码可作为Java应用程序的main方法?A.publicstaticvoidmain(){}B.publicstaticvoidmain(String[]string){}C.publicstaticvoidmain(String[]args){}D.staticpublicintmain(String[]args){}答案:BCD第二章JAVA语言基础JAVA数据类型划分JAVA基本数据类型类型字节数byte1short2int4long8float4double8boolean1char2一个char是可以存储一个汉字的!C语言char只占一个字节JAVA基本数据类型表数范围基本数据类型转换1.自动类型转换低优先级的数据自动转换为高优先级的数据低------------------------------------------------------------高byte,short,charintlongfloatdoubleJava中涉及byte、short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果。因此,如果把两个byte类型值相加,最后会得到一个int类型的结果。如果需要得到byte类型结果,必须将这个int类型的结果显式转换为byte类型。基本数据类型转换例如,下面的代码会导致编译失败:classBadArithmetic{staticbyteaddOneAndOne(){bytea=1;byteb=1;bytec=(a+b);returnc;}}将相应代码改为bytec=(byte)(a+b);基本数据类型转换int型和char型在Java中,char型数据存储的是其字符的Unicode值,是一个16为的无符号整数。所以它和int型可以进行转换。如下例:inti=‘a';charch=97;都是可以通过编译的,但是如果打印其值的话,会转换为相应的数据类型:System.out.println(i);//输出结果为:97System.out.println(ch);//输出结果为:a基本数据类型转换float和double型在Java中,带小数点的数据会自动设为double型,哪怕数据类型声明为float型也一样,如下面代码:floatf=1.2;会通不过编译,因为此处1.2是一个double型,必须进行强制类型转换:floatf=(double)1.2;JAVA课堂练习大数向小数转换,要加强制类型转换break和continuebreak用于强行退出循环,不执行循环中剩余的语句,这可能导致没有循环完就结束了。而continue则停止执行当前的反复,然后退回循环起始,开始新的反复。publicstaticvoidmain(String[]args){intcount=0;for(inti=1;i=10;i++){if(i%3==0)break;count++;}System.out.println(count);}程序运行结果:2break和continuepublicstaticvoidmain(String[]args){intcount=0;for(inti=1;i=10;i++){if(i%3==0)continue;count++;}System.out.println(count);}程序运行结果:7数组知识点一维数组声明数组对象的创建--元素为基本类型数组对象的创建--元素为基本类型数组对象的创建--元素为基本类型数组对象的创建--元素为对象类型数组对象的创建--元素为对象类型数组对象的创建--元素为对象类型数组-----一维数组1)int[]a;//声明,没有初始化,我是曾轶可2)int[]a=newint[5];//初始化为默认值,int型为03)int[]a={1,2,3,4,5};//初始化为给定值4)int[]a=newint[]{1,2,3,4,5};//同(3)int[]a=newint[5]{1,2,3,4,5};//错误,如果提供了数组初始化操作,则不能定义维表达式5)int[]a;a=newint[5];//正确,同(2)一样int[]a;a={1,2,3,4,5};//错误,数组常量只能在初始化操作中使用,如(3)6)inta[];a[0]=1;//错误,因为数组没有初始化,不能赋值a[1]=2;数组-----二维数组1)int[][]a;//声明,没有初始化2)int[][]a=newint[2][3];//初始化为默认值,int型为03)int[][]a={{1,2},{2,3},{3,4}};//初始化为给定值int[][]a={{1,2},{2,3},{3,4,5}};//没有错,数组空间不是连续分配的,所以不要求每一维的大小相同4)int[][]a=newint[2][];a[0]=newint[3];//a[0]其实就是一个数组a[1]=newint[4];//每一维的大小可以不一样;5)int[][]a=newint[][]{{1,2},{2,3},{3,4,5}};//同(3)int[]a=newint[5]{{1,2},{2,3},{3,4,5}};//错误,如果提供了数组初始化操作,则不能定义维表达式int[][]a=newint[2][];a[0]={1,2,3,4,5};//错误,数组常量只能在初始化操作中使用6)int[][]a=newint[2][];a[0][1]=1;//错误,第二维没有初始化,不能赋值,java.lang.NullPointerException异常数组-----初始化1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;3.默认初始化:若数组元素是基本数据类型,每个元素被自动赋予默认值,如整型为0,否则必须初始化。字符串知识点----字符串的创建方式形式一:Stringstr=newString(“abc”);形式二:Stringstr=“abc”;创建String对象的方式不同直接赋值的方式是在字符串驻留池中创建对象,但new这种方式是在堆中创建对象。字符串知识点P26来了解一下Java中的字符串驻留池的概念。JVM为了提高性能,将一下两种形式的字符串放在一个称之为字符串驻留池的内存块中:形式一:Stringstr=abc;形式二:abc“其实,形式一和形式二都是字符串的字面常量。所以,可以这样理解,即把字符串的字面常量都放在了字符串驻留池中。对形式一来说,str其实就是引用的字符串驻留池中abc这个String对象。如果有如下的两行代码:Stringstr1=abc;Stringstr2=abc;答案是一个。根据我们刚才所述,那么第一行语句将在池中创建一个String对象,第二行会先在池中寻找是否有值与abc相同的String对象,如果有,就直接引用,没有这在池中新建String对象。这下,就明白了为什么上面的两行语句仅仅创建了一个String对象。字符串知识点P26Stringstr=newString(“abc”);以上语句创建了几个对象?答案是两个。传入的abc字符串字面常量在驻留池中创建了一个对象,new操作符在堆中创建了一个对象,所以,一共创建了两个String对象。==与equals()区别P261.==是运算符,当==两边的对象属于基本类型时,==的作用仅是比较对象的值是否相等,如果相等返回true,否则返回false;当两边的对象属于引用数据类型时,==的作用是判断对象的内存地址是否一致,如果同时指向同一地址,则返回true,否则返回false.2.equals属于方法,两边对象只能是引用数据类型。所以它是如何具体判断对象是否相等是根据程序而定的,equals是属于object类,默认是判断内存地址是否相同,但在object的子类中可以重写equals方法,如在String类中只是比较对象内容是否一致,一致则返回true,否则返回false参看P26例题课后习题P4621publicclassEqualTest{publicstaticvoidmain(String[]args){chara='\u0005';Strings=a==0X005L?Equal:NotEqual;System.out.println(s);}}执行结果:C程序能被编译,运行时输出:Equal课后习题P4725publicclassEqualTest{publicstaticvoidmain(String[]args){long[]count=newlong[10];System.out.println(count);System.out.println(count[1]);}}执行结果:D先输出一个表示数组对象的字符串,然后输出0布尔型数据布尔型数据只有两个值:true和
本文标题:Java习题课1
链接地址:https://www.777doc.com/doc-2880693 .html