JAVA面向对象程序设计基础知识--知识回顾与疑点解析
- 格式:docx
- 大小:531.55 KB
- 文档页数:14
Java基础知识总结(超详细整理)Java语⾔的特点1.⾯向对象⾯向对象(OOP)就是Java语⾔的基础,也是Java语⾔的重要特性。
⾯向对象的概念:⽣活中的⼀切事物都可以被称之为对象,⽣活中随处可见的事物就是⼀个对象,我们可以将这些事物的状态特征(属性)以及⾏为特征(⽅法)提取并出来,并以固定的形式表⽰。
2.简单好⽤Java语⾔是由C和C++演变⽽来的,它省略了C语⾔中所有的难以理解、容易混淆的特性(⽐如指针),变得更加严谨、简洁、易使⽤。
3.健壮性Java的安全检查机制,将许多程序中的错误扼杀在摇蓝之中。
另外,在Java语⾔中还具备了许多保证程序稳定、健壮的特性(强类型机制、异常处理、垃圾的⾃动收集等),有效地减少了错误,使得Java应⽤程序更加健壮。
4.安全性Java通常被⽤在⽹络环境中,为此,Java提供了⼀个安全机制以防恶意代码的攻击,从⽽可以提⾼系统的安全性。
5.平台⽆关性Java平台⽆关性由Java 虚拟机实现,Java软件可以不受计算机硬件和操作系统的约束⽽在任意计算机环境下正常运⾏。
6.⽀持多线程在C++ 语⾔没有内置的多线程机制,因此必须调⽤操作系统的多线程功能来进⾏多线程程序设计,⽽ Java 语⾔却提供了多线程⽀持。
多线程机制使应⽤程序在同⼀时间并⾏执⾏多项任务,该机制使得程序能够具有更好的交互性、实时性。
7.分布式(⽀持⽹络编程)Java语⾔具有强⼤的、易于使⽤的⽹络能⼒,⾮常适合开发分布式计算的程序。
java中提供了⽹络应⽤编程接⼝(),使得我们可以通过URL、Socket等远程访问对象。
8.编译与解释共存Java语法基础标识符: ⽤来标识类名、对象名、变量名、⽅法名、类型名、数组名、⽂件名的有效字符序列。
合法的标识符:由字母、数字、下划线“_”、美元符号“$”或者“¥”组成,并且⾸字符不能是数字。
不能把java关键字和保留字作为标识符。
标识符对⼤⼩写敏感。
关键字:Java语⾔中已经赋予了特定含义的保留字: const、goto,Java版本中尚未使⽤,但以后版本可能会作为关键字使⽤变量:程序运⾏期间可以被改变的量。
⾯向对象知识点总结1、⾯向对象三⼤特征封装:封装就是隐藏对象的属性和实现细节,仅对外公开接⼝,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和⾏为(或功能)相结合,形成⼀个有机的整体。
继承:继承就是⼦类继承⽗类的特征和⾏为,使得⼦类对象(实例)具有⽗类的实例域和⽅法,或⼦类从⽗类继承⽅法,使得⼦类具有⽗类相同的⾏为。
多态:多态指同⼀个⾏为具有多个不同表现形式或形态的能⼒,是指⼀个类实例(对象)的相同⽅法在不同情形有不同表现形式,使具有不同内部结构的对象可以共享相同的外部接⼝。
2、类与对象对象:对象是类的⼀个实例,有状态和⾏为。
类:类是⼀个模板,它描述⼀类对象的⾏为和状态。
⼀个类可以包含以下类型变量:(1)局部变量:在⽅法、构造⽅法或者语句块中定义的变量被称为局部变量。
变量声明和初始化都是在⽅法中,⽅法结束后,变量就会⾃动销毁。
(2)成员变量:成员变量是定义在类中,⽅法体之外的变量。
这种变量在创建对象的时候实例化。
成员变量可以被类中⽅法、构造⽅法和特定类的语句块访问。
(3)类变量:类变量也声明在类中,⽅法体之外,但必须声明为 static 类型。
3、构造⽅法每个类都有构造⽅法。
如果没有显式地为类定义构造⽅法,Java 编译器将会为该类提供⼀个默认构造⽅法。
在创建⼀个对象的时候,⾄少要调⽤⼀个构造⽅法。
构造⽅法的名称必须与类同名,⼀个类可以有多个构造⽅法。
4、封装封装是指⼀种将抽象性函式接⼝的实现细节部分包装、隐藏起来的⽅法。
封装可以被认为是⼀个保护屏障,防⽌该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接⼝控制。
修改属性的可见性来限制对属性的访问(⼀般限制为private),可通过getter和setter⽅法访问和操作类中私有成员变量。
如下代码:class BookClass{private String title;private int pageNum;BookClass(){};// 设置名称public void setTille(String title) {this.title = title;}public String getTitle() {return title;}// 设置页数public void setPageNum(int pageNum) {if (pageNum>=200) {this.pageNum = pageNum;} else {System.out.println("页数输⼊错误,图书页数不能⼩于200页,设置为默认值200");this.pageNum = 200;}}public int getPageNum() {return pageNum;}// 显⽰图书信息public void detail() {System.out.println("图书名称为:"+title+",页数为:"+pageNum);}}5、继承在 Java 中通过 extends 关键字可以申明⼀个类是从另外⼀个类继承⽽来的。
实用文档Unit1:1.面向对象中类的概念:类是创建对象的模版,定义了对象的属性和方法;类中的属性赋予确定的取值得到该类的一个对象,对象是类的实例。
2.阐述类属性和操作的概念和作用?属性:已被命名的类的特性,描述对象的特征操作:是类的特征,用来定义如何激活该类对象的行为,类操作是对类属性的处理3.面向对象中对象的概念所要解决的现实世界的问题抽象为软件对象;需求描述问题域中拥有属性的实体或概念都可以看做对象。
4.阐述类与对象的联系类是一组对象的描述类是创建对象的模板,对象是类的实例类是一种数据类型,可以使用类名称声明对象变量5.阐述类与对象的区别抽象和具体,模板与实例6.类是否是数据类型?与你学过的其他类型进行比较,有何不同?类是一种数据类型,称之为对象类型,所以可以使用类名称声明对象。
类可以包含多个数据类型。
7.变量UML类图中类及其类中属性和方法如何表示?类名,类属性,类方法,各占一行8.UML类图中类与类之间的继承关系如何表示?其代表的含义是什么?实心线空心箭头;指一个类自动拥有另一个类的所有数据和操作。
9.UML类图中类与类之间的关联关系如何表示?其代表的含以是什么?实用文档单向为实心箭头,双向为实心直线;指一个类拥有另一个类的一到多个对象10.如果UML类图中类A与类B之间是1对多的关联关系,关联属性的数据类型是什么?类B对象的容器类型11.如果UML类图中类与类之间1对1的关联关系中,关联属性的数据类型是什么?被关联类的对象类型12.根据用户需求,建立面向对象设计方案—UML类图的方法和步骤是什么?分析需求,找出类,类之间的关系,类的属性,定义类的方法,绘制类图13.一般情况下,每个类都应该提供哪些常用的方法?增删改查,add, remove, set, get14.一般情况下,包含容器的类应该提供哪些常用的方法?获取容器,返回容器迭代器或迭代器接口Unit2:1.撰写java类的具体语法2.根据Java类,Java对象变量如何声明?Java对象如何创建与使用?类名变量名(参数); new方法3.什么是Java引用(变量),其内涵是什么?地址,其值指向对象所在内存中的位置。
JAVA基础知识重难点声明:以下内容为个⼈期末对JAVA基础知识的总结,来源于各种资料搜索和个⼈理解整理⽽出,也许有不妥的地⽅,欢迎学习指教1.Java语⾔具有可移植性、可跨平台运⾏特点的原因是什么?Java——编译器——jvm——平台Java⽤编译器编译成.class的字节码⽂件,字节码类似于机器指令,同⼀字节码可以在任何带jvm虚拟机的平台运⾏,从⽽实现java的跨平台性。
所谓语⾔的跨平台性并不是说是源⽂件的跨平台性(如果要这么定义那么任何的语⾔都是跨平台性的),⽽是指源⽂件编译⽣成的⽂件的跨平台性。
因为Java字节码是结构中⽴的,所以Java 的程序是可移植的。
他们可以不经过重新编译⽽在任何⼀个机器上运⾏。
2.为什么说Java语⾔具有健壮、安全的特性?Java 编译器检测出许多别的语⾔只有在⾸次执⾏的时候才会指出的问题。
Java 已经清除了⼏种在其它语⾔中被发现易于出错的编程结构。
Java具有运⾏时异常处理特性,垃圾回收机制,它为健壮性提供了编程⽀持。
Java 实现了⼏种安全机制以保护你的系统遭受危险程序的破坏。
3.简述Java虚拟机(JVM)的作⽤是什么?JVM就是Java虚拟机,它是⼀个虚构出来的计算机,可在实际的计算机上模拟各种计算机的功能。
JVM有⾃⼰完善的硬件结构,例如处理器、堆栈和寄存器等,还具有相应的指令系统。
JVM是java字节码执⾏的引擎,还能优化java字节码,使之转化成效率更⾼的机器指令。
Java程序的跨平台特性主要就是因为JVM 实现的。
在编译java程序时会将写好的源程序通过编译器编译⽣成.class⽂件(⼜称为字节码⽂件),不同的平台对应着不同的JVM,之后就是通过JVM内部的解释器将字节码⽂件解释成为具体平台上的机器指令执⾏,所以就可以实现java程序的跨平台特性。
4.简述JVM的垃圾回收机制。
确保被引⽤对象的内存不被错误的回收。
当⼀个对象不再有任何⼀个引⽤变量指向它时,这个对象就被应⽤抛弃。
复习1保留字goto2.标识符数字、字母、下划线、$组成,不能以数字开头,不能使用关键字或保留字,不能包含空格,不能包含除$以外的符号,不能包含中文起名规范:包名:所有字母小写:aaabbbccc类名/接口名:所有单词首字母大写:AaaBbbCcc变量名/函数名:第一个字母全小写,后面单词首字母大写:aaaBbbCcc常量名:所有字母大写,单词之间用下划线连接:AAA_BBB_CCC3.基本数据类型、字节数、大小、包装类byte 1字节2^7-1 Byteshort 2字节2^15-1 Shortint 4字节2^31-1 Integerlong 8字节2^63-1 Longfloat 4字节2^31-1 Floatdouble 8字节2^63-1 Doublechar 2字节2^15-1 Characterboolean 1位Boolean4.a++、++ab=a++:temp=a,a=a+1,b=tempb=++a:a=a+1,b=a5.&和&&的区别&:无论左侧结果是什么,两侧都需要进行运算&&:当左侧为false时,右侧不参与运算6.最有效的方式计算2乘以82<<37.if和switch的区别if后面是条件表达式,返回的是boolean类型,switch后面是byte/short/int/char类型的表达式8.能被switch的数据类型有哪些boolean、short、int、char(jdk1.7之后增加了String)9.for循环执行顺序for(初始化表达式1;循环条件表达式2;循环后操作表达式3){执行语句(循环体);}执行顺序:先执行表达式1进行初始化;根据表达式2判断是否执行循环体,如果返回true 执行循环体,如果false退出循环;执行完循环体一次后,执行表达式3,这个过程修改变量;再执行表达式2以此循环10.数组和链表的区别数组链表查快慢改慢快增删慢快11.面向对象三大特点封装:将数据等集合在一个单元内,称之为类,被封装的对象被称之为抽象数据类型继承:可传递性,如果C从B类中派生,B又从A类中派生,那么C既继承了B类中声明的成员,也继承了A类中的成员多态:指同一操作作用于不同的对象可以有不同的解释,也会产生不同的结果12.类中主要包含哪几个元素,分别有什么作用属性:用来定义对象的数据方法:用来定义对象的行为构造方法:用来创建对象内部类:作为类的一个成员存在,能够访问外部类的属性和方法代码块:用来在类加载时执行操作或者在每次实例化前执行通用操作13.成员变量(全局变量)和局部变量的区别1.定义的位置:成员变量:定义在类中局部变量:定义在方法体内,语句中2.生命周期:成员变量:也称为实例变量,随着对象的出现而出现,随着对象的消失而消失局部变量:一旦作用域结束立即释放3.内存的位置:成员变量:存储在堆内存中局部变量:存储在栈内存中4.初始值:成员变量:可以不赋初值,有默认的初始值,数据类型的默认值局部变量:可以不赋初值。
主要内容:学习方法介绍、面向对象思想介绍、类与对象关系、封装概念1.学习方法介绍:四问法①什么?②有什么特点③怎么用demo④什么时候用?test2.面向对象与面向过程的区别面向过程强调的是功能和行为,面向对象强调的是具有某种功能的对象,即只要调用具有功能的对象即可。
面向对象实现了从执行者向指挥者的转变。
举例1:买电脑面向过程:①先在网上查询好电脑的相关信息②到电脑城询价③在电脑城查看电脑的配置信息④挑选配置的硬件⑤自己砍价讨价⑥把电脑带回家整个过程都是亲力亲为,即都在执行功能面向对象:①找一个具有选电脑技术和经验的朋友一起去②让朋友前去去询价③让朋友去选电脑,查看电脑信息④让朋友去挑选要配的硬件⑤让朋友砍价讨价⑥让朋友把电脑扛回家⑦让朋友把电脑组装起来整个过程都是在下命令举例2,洗衣服面向过程:①要自己动手将脏衣服拿去洗②自己动手搓衣服③自己动手漂干净④自己动手拧干面向对象:调用洗衣机这个对象,将以上过程全部封装进洗衣机,我们只要用洗衣机就行了,不用管洗衣机怎么做的3.类与对象的关系类:类是对事物的描述对象:该类事物的实例,在java中通过new关键字创建/**需求:描述人类1.人类属性:姓名;年龄;性别;2.人类行为:跑;说;class Person{//描述姓名String name;//描述年龄int age;//描述性别String sex;//描述跑的行为void run(){(“I can run”);}//描述说的行为void speak(){(“I can speak”);}}class PersonDemo{public static void main(String [] args){Person p=new Person();=”张三”;p.age=23;p.sex=”男”;}}*/内存图对象的属性对应着类的成员变量,就好比拿人来说,人有名字,年龄,性别等,这些就是人这个个体的属性对象的行为对应着类的成员方法,而人的吃喝拉撒是人类有的行为,对应着具体的个体对象的行为4.封装面向对象的三大特征:①封装②继承③多态封装:在内部隐藏其实现细节,只对外提供公共的访问接口封装的好处:①高了安全性,因为不允许外界直接访问,因而实现了可控②提高了代码的复用性③提高了易用性④对外隔离了内部变化,电视机的例子封装的体现方式之一是私有private,通过private修饰符修饰类内部的成员,达到控制类成员的有效范围的目的。
面向对象程序设计万物皆对象冯君,李永,李群,薛红芳编1面向对象的特性-封装性学习目标:1.理解封装的概念2.掌握private 关键字3.掌握构造方法4.掌握方法重载 重点与难点:封装性的理解,构造方法的使用,方法重载的定义✍理解为什么需要封装封装的定义1.封装,就是隐藏实现细节2.将属性私有化,提供公有方法访问私有属性3.通过这些公有方法访问私有属性,这样做的好处是防止外界直接对属性进行不合理的更改。
✪理解为什么需要构造方法构造方法的定义:构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值。
构造方法必须满足以下语法规则:1、方法名与类名相同2、没有返回类型构造方法的调用:创建对象时自动调用。
这好比是人刚出生父母就给他起好了名字。
带参构造方法:通过调用带参数的构造方法,简化对象初始化的代码。
特殊的this:this 表示当前对象,为了区分成员变量和参数,如果不同名,可以不加this 。
✍方法重载的定义:1.方法名相同。
2.方法的参数类型、个数、顺序至少有一项不相同。
3.方法的返回类型可以不相同。
4.方法的修饰符可以不相同。
思考:构造方法可以重载吗?(可以)public class Teacher{private String name; // 姓名// 返回姓名public String getName() {return name;}// 设定姓名public void setName(String name) { = name;}}public class Teacher {private String name; //姓名// 构造方法public Teacher() {name = "张三";}}//存在问题,每个教师在new 出来时的名字都一样,最简单的解决办法——带参构造方法public Teacher(String name){=name;}Math.max(1,2);Math.max(1.0F,2.0F);Math.max(1.0,2);运行时,Java 虚拟机先判断给定参数的类型,然后决定到底执行哪个max()方法☺使用private关键字修饰某个成员变量后,这个成员变量可以被同一包中的其它类访问吗?☺在Java程序中,代码封装带给我们的好处是什么?☺请通过代码封装,实现如下需求:编写一个类Book,代表教材:具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200为各属性设置赋值和取值方法具有方法:detail,用来在控制台输出每本教材的名称和页数编写测试类BookTest进行测试:为Book对象的属性赋予初始值,并调用Book对象的detail方法,看看输出是否正确☺编写一个类Book2,代表教材:具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200具有方法:Sdetail,用来在控制台输出每本教材的名称和页数具有带参数的构造方法:用来完成对象的初始化工作,并在构造方法中完成对页数的最小值限制编写测试类Book2Test进行测试:初始化一个Book2对象,并调用该Book2对象的detail方法,看看输出是否正确☺编写一个类Book3,代表教材:具有属性:名称(title)、页数(pageNum)、类型(type)具有方法:detail,用来在控制台输出每本教材的名称、页数、类型具有两个带参构造方法:第一个构造方法中,设置教材类型为“计算机”(固定),其余属性的值由参数给定;第二个构造方法中,所有属性的值都由参数给定编写测试类Book3Test进行测试:分别以两种方式完成对两个Book3对象的初始化工作,并分别调用它们的detail方法,看看输出是否正确改进上学期所编写的宠物猫程序:运用封装、构造方法及构造方法的重载编写一个宠物猫类,能吃,能喝,能睡,能运动,能捉老鼠。
说完了封装,接下来说说java的另两大特性:继承和多态。
之所以继承和多态放在一起,是本人觉得继承和多态联系较紧密。
总结为一句:有继承才会有多态。
一、继承:当我们了解了封装的概念后,知道可以把同一类事物的属性和功能封装到一个统一的描述中去,生成一个类。
然而后来我们发现,有时候这样做会做很多重复的动作。
比如我们抽象出一个猫类描述猫,然后抽象一个狗类描述狗。
但是我们发现猫类和狗类有许多相同的特性,比如说长毛,四腿走路等等。
为了避免这种重复工作,java提供了继承的机制。
那么我们怎么应用呢?示例如下:class 类A extends 类B{//code}表示类A继承类B,这个时候,类A就具有了类B中的除了private修饰以外的东西。
代码示例:class animal{//各种公有属性,比如,长毛,四腿走路...}class cat extends animal{}class dog extends animal{}继承的好处:A:提高了代码的复用性。
B:让类与类之间产生了关系,是多态的前提。
说了很多的东西,接下来总结下继承的概念。
1:继承:是以现有类型定义为基础来创建新类型的技术。
同类之间的继承,派生类可以享受基类所提供的服务的同时,还可以对基类的功能进行扩充,而不对基类本身进行修改。
这种重用技术大大提高了软件开发的效率。
(1)继承:在java中,我们在定义一个类的时候,可以不用全部定义类中的内容,通过继承把其他类的非私有功能可以直接拥有。
(2)父类:被继承的类。
(超类,基类)(了解)子类:继承其他类的类。
(派生类)(3)继承的好处:(掌握)A:提高代码的复用性。
B:让类与类之间产生了关系,是多态的前提。
(4)使用继承:(掌握)格式:class 类A extends 类B{}什么使用时候继承呢?假设判断法。
继承是:"is a"的关系"x is a y"(5)特点:(掌握)A:java只支持单继承(这句话的就是说,java一个类只能继承一个父类,换句话说,一个儿子只有一个亲爹,面向对象来源生活的体现。
第四章JAVA面向对象程序设计基础知识--知识回顾与疑点解析4.1 面向对象的基本概念4.1.1 面向对象编程的概念封装,继承,多态是面向对象的三个特性。
封装:encapsulation继承:inherit,Java只支持单继承,使用关键字extends多态:polymorphic,多态分为静态多态(方法重载等)以及动态多态(方法重写等);父类中定义的属性或方法可以被子类继承之后具有不同的数据类型或者表现出不同的行文,同一个属性或方法在父类及其各个子类中可以具有不同的语义。
关于多态性描述的证明如下:1)对于@Override注记标识的方法重写,必须与父类中的申明一模一样,包括返回值的类型该测试表示@Override重写的方法必须与父类中的申明一模一样,但若无虽然无@Override注记,但是与父类中的函数名,函数参数个数,类型,对应顺序一样,则返回值也必须一模一样,此时,没有@Override也和有一模一样;此外如果其其他类型的重写,则必须不能使用@Override注记。
2)重写属性具有不同的数据类型在该测试中,属性a被重写,父类中是int类型,但是在子类中则为String类型。
3)重写方法表现不同的行为在该测试用例中,getA(String s)方法即是对getA()方法的重载。
4.2 类的定义4.2.1 类的声明[public|缺省即default] [abstract|final] class 类名extends 父类implements 借口列表。
说明:class的声明若是public的,则该类可以被所有的类(包括同一个包和不同包下的类)所引用;若是缺省的,则该类只能被同一个包下的类所访问;若类修饰是abstract的,则该类必须被继承而不是被new实例化一个对象;若该类的修饰符是final的,则该类必须不能被继承,即该类不能派生出子类。
4.2.2 类体的申明类体在一对大括号中进行声明,包括属性和行为的声明,格式如下:{[public|protected|private|缺省即default] [static][final] [transient] [volatile]类型变量名;[public|protected|private|缺省即default] [static][final|abstract] [native] [synchronized]返回类型函数名(参数列表) [throws 异常列表]{函数体声明}}说明:对于属性声明:1)如果是声明为public类型的,则任何包下的的任何类可以通过该类的实例访问该属性。
以上测试表明,package a中公共类A可以被package b中的类所import并创建A的实例,并且在package b中可以通过类A实例访问a的公共属性。
2)如果声明是为protected类型的,则同一包下的任何类均可通过该类的实例访问该属性;同一包的该类的子类讲继承自该类的protected继承为自己的protected成员;不同包的该类的子类将继承自该类的protected成员继承为自己的private成员。
protected类型的测试最为麻烦和复杂,测试截图如下:在该测试中,package a 中的类A的子类AAA继承A的protected成员a为自己的protected属性a,所以在同一包下的Main方法中可以通过AAA实例的对象访问该成员,而在package b 中的A的子类BB将父类A中的protected属性继承为自己的private成员,因而在同一包下的类B中无法通过BB的实例访问其自己的private属性a。
3)如果声明是为private类型的,则该属性只能在该类中的方法中被访问,也就是说该类实例不能够通过点操作符访问。
这一点是最严格不过的了,我想应该就不必测试了。
4)如果声明为缺省类型的,则该属性可以在该包下的任何类中通过该类的实例进行访问。
作为最好的对照,在第一问的测试中,讲类A中a成员的public去掉(缺省)则,结果如下图所示:结果表明,公共类A的default属性也只能被同一个包下的Main类所访问,而不能被package b下的B类所访问(尽管能够import并实例化公共类A)。
4)static将成员声明为类成员,即所有对象所共享的成员,但是只要一份,不需要依赖一对象而存在。
final将成员声明为常亮,一个final类型的对象不能声明为volatile(我想这是因为volatile修饰的成员是因为易变性而需要保证内存可见性,而final类型成员不存在内容可见性问题);transient变量声明为短暂性的变量,用于不同对象的串行化功能。
5)通过对属性的声明的分析,可以得到如下结论:对于一个类,如果变量需要最严格的保护,为自己私有,并且不想被对象在类外直接访问,那就将此变量声明为private类型的;如果该变量需要能够被同一包下的所有类通过该类的类实例所访问的话,就将该变量声明为default类型的;如果还需要能够被不同包下的子类所继承为private类型,那么就应该将该变量声明为protected类型的;如果想要该变量的访问不受任何限制,就将该变量声明为public类型的。
将一个变量声明为什么类型,需要根据该变量的被访问范围来决定。
对行为的声明:1)public修饰的方法可以在任何其他类中通过该类的实例调用2)protected修饰的方法可以被同一包中的任何类通过该类的实例访问;该类同一包下的子类将protected方法继承自己的protected类型;该类不同一包下的子类继承该protected方法为自己的private类型以上代码证明,在类AAA继承自同一包下的类A的protected方法为自己的protected 方法,从而能够在同一包下的Main方法通过类AAA的实例访问sayHello方法;同时在不同包下的类A类子类BB将该protected方法继承为自己的private方法,所以在类B中不能通过BB的对象访问sayHello方法。
3)private修饰的方法只能在该类内部由其他成员函数调用4)static修饰的方法为类方法,可以通过类名和该类的实例调用,但是在static方法内不能访问类的实例变量,必须通过对象才能访问在类A中有一个方法sayGoodBye被声明为protected static类型,在同一包下载在类AA 中通过类名A调用了该保护类型的静态类方法,但是在不同包下的类B中却不能通过类名访问其他包下的保护类型静态类方法。
5)final修饰的方法不能被子类所重写6)abstract修饰的方法必须无方法体,其子类必须实现该抽象方法;抽象方法只能由抽象类即abstract关键字修饰的类定义;在抽象类中也可以有非abstract方法,也可以有其他成员。
并且抽象类中的抽象方法必须只能是public或protected类型的,或者缺省类型的;但是若类型是default类型的话,在其他的包中的该类的子类就会出现进退两难的尴尬地位,从而不能不将该抽象类的方法修改为对其他包可见的。
上述测试表明,abstract方法只可能定义在abstract类AC中,并且abstract类AC中也可以有非abstract方法的实例方法和其他实例成员变量。
其中在同一包下的AC1子类中,必须实现两个父类的抽象方法,但是对于不同包下的子类AC2就没有这么辛运了,其中一个public的abstract方法sayGoodMorning被正确的重写了,但是由于sayGoodEvening是AC类的default方法,导致在类AC2中不可见,也就无法实现重写,所以AC2类的定义就无法实现和完成。
综上所述:抽象方法只能定义在抽象类中;抽象类只能用于派生子类;抽象类中的抽象方法必须被子类所重写;抽象类中可以有其他的实例方法和实例成员变量。
在定义抽象类的时候一定要考虑子类所需要的抽象方法。
7)native修饰的方法为本地方法,即方法的实现与本地计算机系统相关,native修饰的方法也无方法体8)synchronized修饰的方法为同步方法9)函数的返回值必须和声明中的返回类系统一致,要么是一模一样,要么是其子类的对象,当返回值是一个接口时,必须是一个实现了该接口的类的实例以上的测试表明,返回接口的函数必须返回实现了该接口的一个类的类实例,返回一个类类型的方法必须返回该类的类实例或者该类子类的类实例。
4.2.3 实例化对象的步骤1)为对象分配内存空间2)初始化实例变量的值3)调用对象的构造函数4.2.5 对象的清除垃圾收集器作为一个线程运行,当系统的内存用尽或者在程序中调用System.gc()要求运行垃圾收集时,垃圾收集器线程与系统同步运行,否则垃圾收集器在系统空闲时异步运行。
在对象作为垃圾被收集器释放之前,Java运行时系统会自动调用对象的方法finalize(),使他清除自己所使用的资源。
4.2.6 方法的重载与重写所谓方法的重写是指子类重写父类中定义过的方法,重写的方法声明必须与父类中的一模一样。
所谓方法重载是指同一个函数名称的两个函数在参数列表中不完全一样,此处不包含对返回值得讨论,即函数的返回值不能参加重载的判断。
4.3 类对象的使用4.3.2 实例方法和类方法关于类方法的使用有如下一些限制:1)不能使用this,super关键字2)不能访问实例变量和实例成员函数4.4 包package1)java系统应至少支持一个无名包(也叫默认包),一般为当前目录。
2)package语句作为Java源文件的第一条语句,指明该文件中所定义的类所在的包。
从类文件中package字段可以看出包层次的根目录。
3)当用户使用-cp选项将应用的类库包含进来的时候,可以认为-cp的选项是将所有被引用的包放在项目路径之下而成为项目的一部分(即放在包的根目录下,即根包下)。
注意:instanceof操作符的一个使用方法是,a instanceof B,如果a是B的子类,那么该判断也是正确的,如果a是实现了B接口的一个实例,那么该判断也是正确的,现在验证如下:该截图正好验证了上述说法。
4.6 jar命令压缩jar文件,使用jar文件a.b.A如下:a.b.c.C如下:编译好之后:编写一个清单文件a.mf,内容如下:jar命令压缩项目:jar命令显示压缩的内容:java命令执行发布的项目a.jar。