第一篇:JAVA期末总结终极版
JAVA期末总结
1,运行时,调用Java解释器Java.exe对类文件解释执行。(编译)2,Scanner常用的输入数据方法中输入int型数据方法 intnextInt()。Import Java.util.Scanner;Scanner input= new Scanner(System.in);A=input.nextInt();3,Java源程序代码的三个要素:①包申明(package statement);②导入语句(import statement);③类定义和接口定义。
4,Java关键字: interfaceinstanceof synchronized throw throws threadsafe transient 5,Java标识符:分大小写 以字母、下划线、$开始。6,八大基本数据类型中不包括String。
7,符号常量在使用前先声明格式为final 数据类型 常量名 = 缺省值 final double PIE=3.14 final int count=10000 8,不等于!= 9,!逻辑取反(!X X真时为假,X假时为真。)||逻辑或(x||y)。&& 逻辑与(x&&y)。
10,运算符优先级:单算关逻条赋
11,如果方法的返回值类型不是void,则必须包含return语句,且return后必须带返回值如return 0。
12,方法的重载:在一个类中定义多个同名的方法,但要求个方法具有不同的参数类型或参数个数。调用重载方法时,Java编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。方法参数必须有所区别:①参数类型不同②参数顺序不同③参数个数不同。
13,数组对象需要使用new关键字来创建。int a[]=new int[5];14,交换算法中swap(a,b)输出仍为原值
15,数组对象一旦创建之后,在程序整个执行期间,就不能再改变数组元素的个数。
16,类的成员:域、构造函数、方法。
17,方法一般是对类中的数据成员进行操作。18,构造方法一般用于初始化某个类的对象。
19,成员访问控制修饰符:1.public(公共 可在类外被使用)2.protected(保护 在同一包或子类中被使用)3.package(缺省值)(包作用域成员 只能在同一包中被使用)4.private(私有 只能在类中访问)
20,定义构造方法:1.构造方法必须与其类名相同。2.构造方法没有返回类型,但可以有参数,且可以被重载。
21,this定义为被调用的方法的当前对象的引用。
22,当申明一个成员变量时,可以指定成员变量是属于一个类的所有对象共享(称为类的变量)还是属于一个类的各个对象所拥有(称为实例变量)属于类的变量或方法被称为静态变量或静态方法,以关键字static加在申明前。static private int count;23,类只支持单继承,接口支持多继承。
24,在JAVA中,Object类定义和实现了Java系统…。
25,类的公共接口用抽象方法描述。每个抽象类中至少包含一个抽象方法,也可以多个抽象方法仅仅声明了功能的接口,并不提供功能实现,如getName()。
26,声明一个类来实现一或多个接口时,在类的声明中用关键字implements。27,产生随机数的方法 Math.random()。28,Swing组件在Javax.swing包中。
29,阻塞状态(Blocked,Waiting,Sleeping)
30,Java的异常是一个对象,所有异常都直接或间接的继承Throwable类。31,每个try语句必须伴随一个或多个catch语句,用于捕获try代码块所产生的异常,并作相应的处理。
32,通过继承thread的子类创建线程:class pppp extends Thread 33,通过实现Runnable接口创建线程:public class Clock extends JAppletimplements Runnable
简答题
Java有哪些基本数据类型?
Boolean char byte(-128 127)short int(-2^31 2^31-1)long float double Break和Continue的不同?
Break 使流程从一个语句块内部跳转出来,switch 循环体 Continue 结束本轮循环,判断是否执行下一轮 JAVA程序的组成?
由一个包的声明,任意数量导入语句(import statement 可选)任意数量的类定义或(package statement 可选)接口定义三要素组成,该三要素必须以上述顺序出现,如果使用包声明,则包声明必须出现在类和导入语句之前,任何导入语句出现在所有类定义之前。方法的重载?
方法重载通常用于创建完成一组相似但参数的类型或参数的个数不同的方法,重载的方法参数必须有所区别:1,参数的类型不同 2,参数的顺序不同 3,参数的个数不同
将数据及对数据的操作行为放在一起,作为一个相互依存不可分割的整体称之为对象。对相同类型的对象进行分类抽象以后,得出共同的特性而形成了类。类是藐视相同类型的对象集合,类的成员 域:一个类的数据属性由它成员变量(域)定义。方法:方法一般是对类中的数据成员进行操作。构造方法:一般用于初始化某个类的对象
简述成员访问控制符?
成员访问控制是用来控制类中成员的访问范围,修饰符声明 Public 说明公共成员可以在类外被使用
Protected 说明保护成员,在同一包中或子类中被使用
Package(缺省值)说明包作用域成员,该成员只能在同一包中被使用 Private 说明私有成员,该成员只能在类中访问
修饰类:public protected 修饰类成员:private package(缺省)protected public 父类子类?
父类是子类的一般化,子类是父类的特化。子类是在弗雷德公共特性基础上的扩展和延伸。抽象方法?
抽象方法用于声明一组类的公共操作的规范接口。仅仅声明了方法的头,没有定义方法体。抽象方法的方法体在子类中实现。简述布局管理器? Java提供个标准的布局管理器类有:FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout和BoxLayout。其中前五个在Java.awt包中,而BoxLayout在Javax.swing包中。简述线程的概念?
线程是进程中可独立执行的子任务,一个进程可以含有一个或多个线程。每一个线程都有一个唯一的标识符,进程是程序一次动态执行的过程,它对应着从代码加载,执行到执行完毕的一个完整过程。这个过程也是从进程本身中产生,发展到消亡的过程。
创建状态Born 就绪状态Ready 运行状态Running 阻塞状态Blocked Waiting Sleeping 死亡状态Dead
补充:
1,构造方法必须与其类名相同,没有返回类型。
2,JAVA中的数组是对象,因此属于引用类型,数组对象需要使用new关键字来创建 3,JAVA中的类单继承,接口多继承
4,接口由一组常量和一组抽象方法组成,接口中不包括变量和有具体实现的方法
5,Swing组件不能直接添加到顶层容器中,必须添加到内容面板上,内容面板式顶层容器包含的一个普通容器
6,命令按钮式一种组件,单击将产生动作事件AcctionEven
P69 P29 P85 P98 P102 P103 P119 P220 程序 星星
public class star{ public static void main(String []args){ inti,j;for(i=4;i>=1;i--){ for(j=1;j<=4-i;j++)System.out.print(“ ”);for(j=1;j<=2*i-1;j++)
} } System.out.print(“ *”);System.out.println();} for(i=1;i<=4;i++){ for(j=1;j<=4-i;j++)System.out.print(“ ”);for(j=1;j<=2*i-1;j++)System.out.print(“ *”);System.out.println();}
数组
public class sumarry{ public static void main(String[]args){
int array[]={1,2,3,4,5,6,7,8,9,10};
double ping=0;
int b=0;
for(int a=0;a if(array[a]%2==0){ ping+=array[a]; b++;} System.out.println(“数组中偶数平均值为:”+ping/b);} } 冒泡 public class bubble{ public static void main(String[]args){ int array[]={3,45,89,7,5,65,4,8,25,62}; } System.out.println(“排序前:”);for(int a=0;a for(int e=0;e<=array2.length-p-1;e++) if(array2[e]>array2[e+1]){ int h=array2[e]; array2[e]=array2[e+1]; array2[e+1]=h; } } } 盒子 public class box{ inta,b,h;public box(){ s(0,0,0);} public box(intl,intm,int n){ s(l,m,n);} public void s(intp,intq,int r){ a=p;b=q;h=r;} public String toString(){ return “长为:”+a+“ 宽为:”+b+“ 高为:”+h+“的立方体的体积为:”+a*b*h;} void seta(int p){ } voidsetb(int p){ } voidseth(int p){ } intgeta(){ } intgetb(){ } intgeth(){ returnb;returna;h=p;b=p;a=p;} returnh;} public class test{ public static void main(String args[]){ box a=new box(3,4,5); System.out.println(a.toString());a.seta(10);//改变a的值 System.out.println(a.geta());//输出a的值 } } public class boll{ public static void main(String args[]){ double s=100; double h=100;for(int i=1;i<=9;i++){ h=h/2;s+=h*2;} System.out.println(“球第十次落地时走过的路程为:”+s);System.out.println(“球第十次弹起的高度为:”+h/2);} } 课程总结与知识点回顾 第一章 Java入门 了解Java发展史。掌握Java的特点。掌握Java工作机制。 掌握环境配置、编译和运行程序的过程。掌握两类程序的组成结构。第二章 关键字和数据类型 掌握标识符的定义规则。 了解常用的保留字和分隔符。掌握各种基本数据类型的使用。 掌握Java中数组的定义和使用方法。第三章 运算符和表达式 掌握运算符和表达式。算数运算符及表达式 关系运算符和表达式 逻辑运算符和表达式 赋值运算符和表达式 位运算符 掌握选择结构 if-else、switch语句。掌握循环结构 while、do~while及for语句。掌握跳转语句: break、continue。 了解在方法中使用的return语句 第四章 面向对象设计 掌握类的声明和使用 构造方法 成员变量 方法 掌握对象的定义和使用 声明 使用 参数传递 掌握static关键字 实例变量和类变量 实例方法和类方法 了解this关键字 实例变量和类变量 实例方法和类方法 的不同以及使用位置。掌握访问修饰符和非访问修饰符 public,private,缺省,protected static,final,abstract 第五章 继承与接口 掌握包的定义和使用 package和import 掌握类的继承的实现(extends)了解对象的上转型对象 掌握抽象类和抽象方法(abstract)了解super关键字 掌握接口的定义和使用 掌握多态的表现形式 重载 重写 第六章 数组与集合 掌握数组的定义和使用方法。一维数组 二维数组 掌握常用集合的操作方法。List Vector ArrayList HashTable 第七章 字符串 String类的创建 String类的使用 StringBuffer类的创建 StringBuffer类的使用 String与StringBuffer的区别(难点)第八章 异常处理 掌握异常处理的概念 掌握异常处理的方法 抛出 捕获 了解自定义异常处理(难点)第九章 文件输入输出 掌握输入/输出流的概念和类层次结构 了解文件管理以及文件操作 掌握文件字节流的定义和使用 掌握文件字符流的定义和使用 了解文件随机访问 了解其他常用流的定义和使用 第十章 JDBC数据库编程 JDBC的概念 数据库操作过程。下载驱动 加载驱动 创建连接 创建Statement对象 执行SQL语句 处理结果 关闭数据库 数据库操作使用到的对象。Connection DriverManager Statement PreparedStatement ResultSet JDBC实例 第十一章 GUI图形界面设计 Swing组件 窗口组件 菜单组件 文本组件 按钮和标签组件 布局管理器 面板 选择组件 掌握事件处理的概念 授权处理模型 掌握事件处理的过程 实现接口或继承适配器类 注册监听器 编写事件处理代码 掌握JTable的使用方法 第十三章 多线程 掌握线程的基本概念 掌握线程的状态和生命周期。 掌握通过两种方式创建线程:继承Thread类、实现Runnable接口。了解线程的互斥。了解线程的同步。第十四章 网络编程 了解使用URL读取和显示网络资源。掌握InetAddress类和套接字的概念。掌握使用TCP协议进行通信的方法。掌握使用UDP协议进行通信的方法。其他知识点 Applet的运行原理 创建 结构 生命周期 在Applet中播放声音、使用组件、绘制图形图像 数据结构的Java实现 动态数组 散列表 向量 2015级Java期末复习 考试题型和分值: 1、判断题(每题1分,5题,共5分) 2、填空题(每题1分,5题,共5分) 3、选择题(每题2分,15题,共30分) 4、简答题(4题,共30分) 5、程序题(2题,共30分) 程序练习: 1. 编程实现:求出一组数中的最大数和最小数。 2. 提示用户输入1—10的字符,然后判断这个整数的奇偶性。3.字符串的相关操作(参考实验指导 实验 19、实验20) 4.编程实现:在程序中定义一个Person类,一个Person类的子类Student类,再定义主类C1,在main方法中,生成Student的对象,并输出各项信息。(参考《实验指导》实验 32、实验33) 5.求自定义几何图形的面积和周长。首先定义一个抽象类Geometry,该来中包含两个抽象方法,一个是表示求面积的getArea(),另一个表示求周长的getPerimeter()。然后通过继承来分别求出圆形、等边三角形、长方形的面积和周长。最后定义主类,给出具体的值后输出一个圆形、一个等边三角形和一个长方形的面积和周长。 6.定义一个学生类,包括学生的姓名、学号、英语成绩、数学成绩、Java成绩、操作系统成绩、求每个学生的总分和求平均分。再定义主类来测试该类,创建两个学生对象,例如:王平1号 成绩分别为80、90、85、70 输出该学生的总分和平均分。(需要用构造方法来实现各个属性的初始化) 7.定义描述职工档案的类Archives,保护成员变量有职工号(No)、姓名(Name)、性别(Sex)、年龄(Age)。成员方法有:显示职工信息的方法Show()。再由职工档案类派生出职工工资类Laborage,在职工工资类Laborage中新增私有成员变量:应发工资(SSalary)、社保金(Security)、实发工资(Fsalary),其公有成员方法有:构造方法,计算实发工资的方法Count(),计算公式为:实发工资=应发工资-社保金。显示职工档案及工资的方法Display()。最后定义主类,在主方法中用Laborage类定义职工对象lab,并赋初始值: (1001,“张三”, “男” ,21,2000,100),然后显示职工档案与工资。8.构造方法的使用。参考实验指导 实验 27、实验28。9.编写一个Java程序,在程序中建立一个窗口,有四个文本框、两个按钮,单击“求和”按钮,能把第一个和第二个文本框的整数相加后结果显示在第三个文本框中,点击“复制”按钮,能将第三个文本框的内容复制到第四个文本框中,最后还可以正常关闭窗口。运行效果如下图所示: 第1章 Java语言概述 1.Java语言的特点。(Java语言在1995年是哪个公司推出,2010年又是被谁收购?P2平台无关性、编译与解释并存,Java是如何实现“一次编写,到处运行”? 2.面向对象的基本特征。 3.什么是Java虚拟机?字节码的好处? 4.Java应用程序的种类及区别。 第2章 Java语言开发环境 1.JDK环境的配置。2.Path和ClassPath的作用? 第3章 Java语言基础 1.基本数据类型有哪些?了解它们的数据的性质、取值范围、存储方式、参与的运算?它们在内存中存放的是数据值本身。2.Java定义了哪些整数类型。 3.引用数据类型有哪些?在内存中存放的是指向该数据的地址,不是数据值本身。 4.Java 标识符的命名规则是什么?(给定标识符,会判断是否合法) 5.Java语言是如何声明常量的。用final定义常量。单精度后加f或F,双精度后加d或D可省略。 6.变量。注意:Java 语言程序中可以随时定义变量,不必集中在执行语句之前。 7.字符串数据类型转换为数值型数据。8.数值型数据转换为字符串类型。(使用 +) int MyInt=1234; String MyString=“"+MyInt; 9.Java 语言中从键盘输入数据。 由键盘输入的数据,不管是文字还是数字,Java皆视为字符串。 两种输入方式。(输入缓冲区和Scanner,至少掌握一种输入方式。)10.表达式求值表达式求值,自增自减1 ++和——的运算,注意前置和后置,尤其是用在复合语句中。 第4章 流程控制 1.Java语言不允许在两个嵌套的复合语句内声明两个同名的变量。2.Java中的三种注释方式。(Java特有的文件注释,产生html文档)。3.可以用选择和循环结构来解决问题,三种循环语句的区别(见程序)4.break和continue的含义和区别。 第5章 数组与字符串 1.数组的概念。相同数据类型的元素按一定顺序排列的集合。Java中,数组元 素可以为简单数据类型,也可以为对象。2.Java语言内存分配问题 栈内存:定义的基本类型的变量和对象的引用变量,超出作用域将自动释放。 堆内存:存放由new运算符创建的对象和数组。由Java虚拟机的自动垃圾回收器来管理。 3.什么是引用变量?(为数组或对象起的一个名称)4.Java 中一维数组的定义和使用。 int a[ ];//不能给出数组长度,因为此时还没有给数组分配内存 int[ ] a;int a[ ] = {1,2,3,4};int[ ] a = new int[4];// 用new分配内存时,数组的每个元素都会自动赋默认值 Java对数组元素要进行越界检查。 每个数组都有一个属性length指明它的长度,如a.length指出数组a所包含的元素个数。(常作为循环控制条件)5.二维数组的定义和使用。 Java中的二维数组看作是由多个一维数组构成。 求二维数组的维数 计算某数组的行数:数组名.length 计算某数组中某行元素的个数:数组名[下标].length 二维数组申请内存方式(必须指定高层维数):(下面哪些错误) int[][] MyArray = new int [10][];int[][] MyArray = new int [10][3];int[][] MyArray = new int [][3];int[][] MyArray = new int [][]; 6.字符串的声明和使用。 String 变量名; 变量名 = new String(”字符串“); String 变量名 = new String(”字符串“); String 变量名 = ”字符串"; String 类的常用方法(求长度,定位,==和equals方法比较) 第6章 类与对象 1.什么是类?什么是对象?类和对象有怎样的关系? 2.类的定义和使用。 类修饰符及含义见教材所示。 类的成员不能是执行语句。 成员变量和成员方法的定义、修饰符见教材所示。 在定义类的成员变量时,可以同时赋初值,但对成员变量的操作只能放在方法中。 类中成员间的访问机制。(在一个类中的访问机制,一个类访问另外一个类) 3.成员变量与局部变量的区别? 4.对象的创建和使用。对象的创建: Cylinder volu; //声明指向对象的变量volu volu = new Cylinder(); //利用new创建新的对象,并让变volu指向它 或者:Cylinder volu = new Cylinder();volu只是对象的名称,它是指向对象实体的引用变量,而非对象本身。5.当一个对象被创建时,会对其中各种类型的成员变量按表6.4自动进行初始化。 6.一个类多个对象,它们的成员变量分配在不同的内存,因此修改某一对象的成员变量时其他不受影响。7.this关键字的使用。“this.成员名”,此时this代表调用此成员的对象。 若在通过方法调用,将外部传入的参数赋值给类的成员变量,方法的形式参数与类的成员变量同名时,则需用this来标识成员变量。 8.传递数组:指明参数是一个数组,实参只给出数组名。 9.当参数是基本数据类型时,采用传值方式调用;当参数是引用型的变量时,则是传址方式调用。10.了解匿名对象。 第7章 Java语言类的特征 1.私有成员(private)、公共成员(public)、保护成员(protected)、缺省访问控制符各自的访问权限是什么? 2.什么是方法的重载,即方法的重载条件是什么?会判断哪些是合法的重载形式。 3.什么是构造方法?构造方法有哪些特征?何时被调用?什么是默认构造方法?何时被调用? 4.什么是静态成员(类成员)?什么是实例成员?使用静态成员有什么意义?静态成员的访问格式是什么?main方法为何是public,static的呢? 5.对象的赋值与比较。 6.对象是一种引用型变量,它实际保存的是对象在内存中的地址。7.引用变量也可作为方法的参数,采用传址调用。例如: Circle c1 = new Circle(2); Circle c2 = new Circle(3); c2 = c1; //它们所共同指向的同一对象的内容相等还是两个引用变量中所保存的地址相等呢? 第8章 继承、抽象类和接口 1.什么是继承?什么是父类、子类?子类是如何创建的? 在Java语言中有一个名为java.lang.Object的特殊类,所有的类都是直接或间接地继承该类而得到的。2. 在子类中如何访问父类的成员。 3. 什么是方法的覆盖。方法的覆盖与方法的重载有和区别? 4. ”==”和equal()方法比较对象的异同? 5.什么是抽象类和抽象方法?抽象类有哪些特征? 6.接口的定义?接口与抽象类有何区别? 7.利用接口如何实现类的多重继承? 8. 软件包的概念、作用、应用。(package、import语句应放在哪里)9. Java的垃圾自动回收机制。10.如何理解Java的多态性? 第9章 异常处理 1.什么是异常?按照错误的性质将错误如何分类及其含义?(哪些属于异常,会判断) 2.什么是抛出异常和捕获异常?try-catch-finally语句如何使用? 3.Java的异常处理机制是如何实现的,为什么有一些异常一定要捕获,否则编译不能通过? 4.抛出异常的方式 在捕获一个异常前,必须有一段代码生成一个异常对象并把它抛出。根据异常类的不同,抛出异常的方法也不相同。 第12章 图形界面设计 1. 了解java.awt包中主要类及组件类的继承关系。2.什么是组件?组件是怎样分类的? 3.什么是窗口?窗口又如何分类,他们又分别具有怎样的特征? 4.什么是面板?面板与窗口有何区别? 5.图形用户界面设计的步骤? 6.什么是控件?它有何作用?Java中有哪些常用控件? 7.什么是窗口的布局管理?有哪些布局管理方式?它们分别具有怎样的策略或特征? 8.容器和普通组件的区别是什么? 第13章 事件处理 1.什么是事件处理?什么是事件?什么是事件源?什么是事件监听者?什么是事件处理接口? 2.什么是委托事件模型? 3.担任监听者的方式有哪些? 4.java语言把事件如何分类? 5.Java语言的事件处理类及其继承关系? 6.什么是适配器类?它与接口完成事件处理有何区别? 调用父类构造方法 在子类的构造方法中可使用super(argument_list)语句调用父类的构造方法 如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法 如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错 1public class Person { 3private String name; 4private int age;private Date birthDate; 7public Person(String name, int age, Date d){ 8this.name = name; 9this.age = age; 10this.birthDate = d; 11} 12public Person(String name, int age){ 13this(name, age, null); 14} 15public Person(String name, Date d){ 16this(name, 30, d); 17} 18public Person(String name){ 19this(name, 30);} 21// …… 22} 1public class Student extends Person { 2private String school; 4public Student(String name, int age, String s){ 5super(name, age); 6school = s; 7} 8public Student(String name, String s){ 9super(name); 10school = s; 11} 12public Student(String s){ // 编译出错: no super()13school = s; 14} 15} 对象构造和初始化细节 分配存储空间并进行默认的初始化 按下述步骤初始化实例变量 1.绑定构造方法参数 2.如有this()调用,则调用相应的重载构造方法,然后跳转到步骤5 3.显式或隐式追溯调用父类的构造方法(Object类除外) 4.进行实例变量的显式初始化操作 5.执行当前构造方法的方法体 ==操作符与equals方法 ==操作符与equals方法的区别: 引用类型比较引用;基本类型比较值; equals()方法只能比较引用类型,“==”可以比较引用类型及基本类型; 特例:当用equals()方法进行比较时,对类File、String、Date及封装类(Wrapper Class)来说,是比较类型及内容而不考虑引用的是否是同一个实例; 用“==”进行比较时,符号两边的数据类型必须一致(可自动转换的基本数据类型除外),否则编译出错; 由装箱引发的——Integer比较的来龙去脉 前置知识: 众所周之,java是保留了int,char等基本数据类型的,也就是说int类型的并不是对象,然而有些方法却需要object 类型的变量,所以java使用了装箱机制,我们可一自豪的这样声明一个整型变量:Integer a = new Integer(10);那么整型的a也就是对象了,那这句是什么意思呢:Integer a= 10;java中可以这样声明一个对象吗?当然不是,从jdk1.5后,java实现了自动装箱,也就是自动将Integer a =10 中的int类型的10转化为了 Integer类型。好,有了前面的只是我们且先看一个题目: Integer a = 127; Integer b = 127; Integer c = 128; Integer d = 128; System.out.println(a==b); System.out.println(c==d); 答案是什么呢? 如果您回答true,false,那么很遗憾的告诉你,哈哈,其实你答对了!! 那我们晕了就相差1的两个数为啥走向了“反目成仇”的地步呢?凭啥127等于127,我128就不等于128呢?且听我慢慢道来,Integer a =127,Integer a=128。 127,128应该不会造成什么差异吧,难道是自动装箱的过程有猫腻?找下源码看看: private static class IntegerCache { private IntegerCache(){} static final Integer cache[] = new Integer[-(-128)+ 127 + 1];static { for(int i = 0;i < cache.length;i++) cache[i] = new Integer(i128); } 这是用一个for循环对数组cache赋值,cache[255] = new Integer(255-128),也就是newl一个Integer(127),并把引用赋值给cache[255],好了,然后是Integer b= 127,流程基本一样,最后又到了cache[255] = new Integer(255-128),这一句,那我们迷糊了,这不是又new了一个对象127吗,然后把引用赋值给cache[255],我们比较这两个引用(前面声明a的时候也有一个),由于是不同的地址,所以肯定不会相等,应该返回false啊!呵呵,这么想你就错了,请注意看for语句给cache[i]初始化的时候外面还一个{}呢,{}前面一个大大的static关键字大咧咧的杵在哪呢,对静态的,那么我们就可以回想下static有什么特性了,只能初始化一次,在对象间共享,也就是不同的对象共享同一个static数据,那么当我们Integer b = 127的时候,并没有new出一个新对象 来,而是共享了a这个对象的引用,记住,他们共享了同一个引用!!,那么我们进行比较a==b时,由于是同一个对象的引用(她们在堆中的地址相同),那当然返回true了!! 然后我们在看Integer c = 128;Integer d = 128;这两句。现在不用我说就应该能明白了吧,当数据不再-128到127之间时,是不执行return IntegerCache.cache[i + offset];这句的,也就是不会返回一个static的引用,而是执行了return new Integer(i);于是当 Integer d = 128 时,又会重新返回一个引用,两个不同的引用 在做c==d 的比较时当然返回false了! 下面附上本程序的字节码以供喜欢底层的读者参考: Compiled from “CompareInteger.java” public class CompareInteger extends java.lang.Object{ public CompareInteger(); Code: 0:aload_0 1:invokespecial#1;//Method java/lang/Object.“ public static void main(java.lang.String[]); Code: 0:bipush 127 2:invokestatic#2;//Method java/lang/Integer.valueOf:(I)Ljava/lang/Int eger; 5:astore_1 6:bipush 127 8:invokestatic#2;//Method java/lang/Integer.valueOf:(I)Ljava/lang/Int eger; 11: astore_2 12: sipush 128 15: invokestatic#2;//Method java/lang/Integer.valueOf:(I)Ljava/lang/Int eger; 18: astore_3 19: sipush 128 22: invokestatic#2;//Method java/lang/Integer.valueOf:(I)Ljava/lang/Int eger; 25: astore 4 27: getstatic#3;//Field java/lang/System.out:Ljava/io/PrintStream; 30: aload_1 31: aload_2 32: if_acmpne39 35: iconst_1 36: goto40 39: iconst_0 40: invokevirtual#4;//Method java/io/PrintStream.println:(Z)V43: getstatic#3;//Field java/lang/System.out:Ljava/io/PrintStream; 46: aload_3 47: aload4 49: if_acmpne56 52: iconst_1 53: goto57 56: iconst_0 57: invokevirtual#4;//Method java/io/PrintStream.println:(Z)V60: return } 评论:呵呵,这么想你就错了,请注意看for语句给cache[i]初始化的时候外面还一个{}呢,{}前面一个大大的static关键字大咧咧的杵在哪呢,对静态的,那么我们就可以回想下static有什么特性了,只能初始化一次,在对象间共享,也就是不同的对象共享同一个static数据,那么当我们Integer b = 127的时候,并没有new出一个新对象来,而是共享了a这个对象的引用,记住,他们共享了同一个引用!! 呵呵,博主我被你这句话小小的误导了一下,其实你这里说的原理没错,但是把位置说错了,这段代码只是初始化cache: static { for(int i = 0;i < cache.length;i++) cache[i] = new Integer(i-128); } 但真正让cache[i]为static变量的是这句代码: static final Integer cache[] = new Integer[-(-128)+ 127 + 1]; Java实验 1.调试HelloWorld程序 2.this,super,get ,set,把课本90页程序4.7中的name改成私有变量 3.继承,重写,父类引用指向子类对象 4.验证数组Arrays类和Collection类 5.编写一个自己的异常类并捕获之。 6.编写一个类,将该类的几个对象装入TreeSet容器中,并将该容器的内容通过输出流写入文件中。 前三章重点 0.java的数据类型:四类八种-(1)布尔类型Boolean;(2)字符类型char;(3)整数byte,short,int,long;(4)浮点类型:float,double;1.面向对象的3个基本特征:封装,继承,多态。 2.构造方法和普通方法的区别:对构造方法而言,它有以下特性---(1)方法名必须与要创建对象的类名相同。(2)不允许声明返回类型,即使声明为void也不被允许。 3.this关键字:是一个引用,this引用指向的是其本身所在方法的当前对象。this的使用方法:(1)调用成员变量;(2)可以用this()调用其他构造函数。 4.java中只对类成员变量进行自动初始化,而方法内部的局部变量在使用前必须手动初始化。 5.static 关键字:可用来修饰类的成员变量和成员方法,需要注意两点--(1)静态方法不能调用类的非静态方法,不能访问类的非静态变量。(2)静态方法和静态变量(非私有的)可以有两种调用方式,一是实例对象调用,二是类名直接调用。 6.类成员访问控制修饰符public、private、default(可不写,即缺省状态)、protected的使用:public-公用的;private-私有的,只在定义它的类内部使用;default-可以被同一包中的类访问;protected-既可以被同一包中的类访问,也可以被不在同一包中的子类访问。 7.方法的重载:指方法名相同,而方法的参数列表不相同。参数列表不同有三层意思:(1)参数类型不同。(2)参数顺序不同。(3)参数个数不同。另外需注意,在同一个类中,当方法名和参数列表都相同时,访问控制修饰符或方法返回类型不相同并不是方法的重载,而且这种情况在java中是不被允许的。 第四五章重点 1.继承:需使用关键字extends.在使用继承时需注意--(1)每个子类只能定义一个超类(父类),即extends后面应且仅应跟一个类名作为该类的父类。(2)父类中的私有属性和私有方法不能被继承。 2.方法的重写:即子类对超类中的方法保持方法名、返回类型和参数列表不变,重写了方法体,使子类和超类完成不同的工作。重写需注意下面几个关键点:(1)超类中的私有方法不能被重写。(2)访问限制符强度由低到高依次是:public、protected、default、private,在重写过程中,如果子类和父类中方法的返回值、方法名及方法的参数列表都相同,这时,要求子类中该方法的访问限制符强度不能超过父类的。即如果父类中为public时,子类也只能为public,而不能是余下的三种。 3.重载(overload)和覆盖(override)的区别:(1)重载—发生在一个类的内部或子类与父类之间,要求方法名相同而参数列表不一样。(2)覆盖—只能发生在继承过程中,要求子类方法的返回类型,方法名和参数列表同父类的都相同,而方法体不一样。 4.构造器的调用顺序:先祖先,再客人,最后自己。 5.多态:指在类继承中子类和父类中可以有同名但意义或实现方式不同的属性和方法。分为:覆盖和重载。多态的优点:因为多态,可以在程序中对类进行扩展,而不需改变那些操作基类接口的方法。 6.动态绑定:指在代码执行期间,判断所引用对象的实际类型,根据其实际类型调用相应方法。动态绑定存在的三个必要条件--(1)要有继承;(2)要有重写(覆盖);(3)父类引用指向子类对象(向上转型)。 7.Object中常用的方法总结:toString();wait();equals();notify();notifyAll();hashCode();getClass();clone();finalize();(呵呵,尽可能记几个,以防老师让咱们列举)注:java中Object类是所有类的父类,即java中所有的类都有上述9种方法。 8.对象的比较:注意关键字instanceof的使用。 9.抽象类: 抽象方法—用关键字abstract修饰的方法,该方法只需方法的声明,而不需方法的实现(即无方法体)。 抽象类——至少包含一个抽象方法的类,也用abstract关键字声明。(注:(1)抽象类中可以有一些具体方法。(2)抽象类不能实例化。(3)子类继承抽象类必须实现其抽象方法。) 10.接口: (1)可以看成是高度抽象的抽象类,但是接口不是类。 (2)用关键字interface来声明接口,用关键字imlpements来实现接口。 (3)接口不能有具体方法,不能有实例数据,但可以定义常量。 (4)实现接口的非抽象类必须实现接口的所有方法。 (5)每个类可以实现多个接口,这些接口用逗号隔开,同时,一个接口可以被多个类实现。 第六章:重点看一下实验四 1.容器——Collection(接口)和Map(接口).Collection——Set(接口)和List(接口)。其中,List必须保持元素的特定顺序,常见的实现类有ArrayList和LinkedList;Set不能有重复元素,常见的实现类有HashSet和TreeSet。 Map——一组成对的“键值对”对象,即其元素是成对的对象,常见的实现类有HashMap和TreeMap。 第七章 1.异常类的根类是Throwable类,它的两个直接子类是Error类和Exception类。 2.异常中常用的5个关键字为:try,catch,finally,throw,throws.其中,try和catch:用于捕获异常;finally:无论try块中的异常是否抛出,finally中的代码块总能被执行;throw:抛出异常;throws:声明异常。 3.“未被检查的异常(Unchecked Exceptions)”和“受检查的异常(Checked Exceptions)”—— Unchecked Exceptions :编译器不检查方法是否处理或抛出的异常,即不做处理,编译时不报错。 Checked Exceptions:受编译器检查的异常,即不做处理编译时通不过。 4.常见的几种Checked Exceptions:ClassNotFoundExceptionIOExceptionInterruptedExceptionFileNotFoundException.(尽可能的记几个吧,以防不测)第八章 1.流--字节流和字符流; 流--节点流和处理流。 2.所有的输入流都是从抽象类InputStream和Reader继承而来。所有输出流都是从抽象类OutputStream和Writer继承而来。3.字节流:InputStream和OutputStream;字符流:Reader和Writer; 4.节点流:直接与文件等底层打交道,如FileInputStreamFileOutputStreamFileReaderFileWriter.处理流:相当于包装流,套在节点流上,方便数据处理。相关一些用法,具体参考最后一次实验。第二篇:Java期末总结doc版
第三篇:Java期末复习
第四篇:java总结
第五篇:Java总结