没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1
JAVA 的面向对象编程--------课堂笔记
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了
解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可
以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类
称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适
合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世
界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、
抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
5、String 是最基本的数据类型吗?
基本数据类型包括 byte、int、char、long、float、double、boolean 和 short。
java.lang.String 类是 final 类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用
StringBuffer 类
6、int 和 Integer 有什么区别
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int 是 java 的原始数据类型,Integer 是 java 为 int
提供的封装类。Java 为每个原始类型提供了封装类。
原始类型 封装类
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它
们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所
指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
7、String 和 StringBuffer 的区别
JAVA 平台提供了两个类:String 和 StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个
String 类提供了数值不可改变的字符串。而这个 StringBuffer 类提供的字符串进行修改。当你知道字符数据要改变的时
候你就可以使用 StringBuffer。典型地,你可以使用 StringBuffers 来动态构造字符数据。
8、运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常
2
见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行
时异常。
9、说出 Servlet 的生命周期,并说出 Servlet 和 CGI 的区别。
Servlet 被服务器实例化后,容器运行其 init 方法,请求到达时运行其 service 方法,service 方法自动派遣运行与请求
对应的 doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其 destroy 方法。
与 cgi 的区别在于 servlet 处于服务器进程中,它通过多线程方式运行其 service 方法,一个实例可以服务于多个请求,
并且其实例一般不会销毁,而 CGI 对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于 servlet。
面向对象主要针对面向过程。
面向过程的基本单元是函数。
什么是对象:EVERYTHING IS OBJECT(万物皆对象)
所有的事物都有两个方面:
有什么(属性):用来描述对象。
能够做什么(方法):告诉外界对象有那些功能。
后者以前者为基础。
大的对象的属性也可以是一个对象。
为什么要使用面向对象:
首先,面向对象符合人类看待事物的一般规律。
对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节。
方法的定义非常重要。方法有参数,也可能有返回值。
注意区分:对象(本身)、对象的实现者、对象的调用者。
分析对象主要从方法开始。
我们通过类来看待对象,类是对象的抽象。
其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。
对象之间的耦合性一定要低(比如不同硬盘和不同主板之间的关系)。这样才能使每个对象本身做成最
好的。
对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。
实现高内聚就是要最大限度低提高复用性(复用性好是因为高内聚)。
可复用性是 OOP 的基础。
比较面向过程的思想和面向对象的思想:
面向过程的思想:由过程、步骤、函数组成,以过程为核心;
面向对象的思想:以对象为中心,先开发类,得到对象,通过对象之间相互通信实现功能。
面向过程是先有算法,后有数据结构。
面向对象是先有数据结构,然后再有算法。
在用面向对象思想开发的过程中,可以复用对象就进行复用,如无法进行复用则开发新的对象。
开发过程是用对个简单的对象的多个简单的方法,来实现复杂的功能 。
从语法上来看,一个类是一个新的数据类型。
在面向对象编程中,除了简单数据类型,就是对象类型。
定义类的格式:
class Student{
代码
3
}
注意类名中单词的首字母大写。
实例变量:定义在类中但在任何方法之外。(New 出来的均有初值)
局部变量:定义在方法之中的变量。
局部变量要先赋值,再进行运算,而实例变量均已经赋初值。这是局部变量和实例变量的一大区别。
实例变量的对象赋值为 null。
局部变量不允许范围内定义两个同名变量。实例变量的作用域在本类中完全有效,当被其他的类调用的
时候也可能有效。
实例变量和局部变量允许命名冲突。
书写方法的格式:
修饰符 返回值 方法名 调用过程中 方法体
可能出现的例外
public int/void addNumber(参数) throw Excepion {}
例:
public int addNumber(int a,int b){
}
注:方法名中的参数 int a,int b 为局部变量
类方法中的一类特殊方法:构造方法。
构造方法是当用类生成对象时,系统在生成对象的过程中利用的方法。
注意:构造方法在生成对象的时候会被调用,但并不是构造方法生成了对象。
构造方法没有返回值。格式为:public 方法名。
构造方法的方法名与类名相同。
构造方法是在对象生成的过程中自动调用,不可能利用指令去调用。
在一个对象的生成周期中构造方法只用一次,一旦这个对象生成,那么这个构造方法失效。
用类来生成对象的语句:
Student s=new Student()。
第一个 Student 表示这是用 Student 类进行定义。“Student()”表示调用一个无参数的构造方法。
如果()中有参数,则系统构造对象的过程中调用有参的方法。
此时 S 称为一个对象变量。
Student s 的存储区域存放的是地址:一个对象在硬盘上占有一个连续地址,首地址赋予 s 空间。
S 称为对象 Student 的引用。
注意:在对象变量中存放的是引用(地址);在简单变量中存放的是数值。
可以构造多个构造方法,但多个构造方法的参数表一定不同,参数顺序不同即属于不同的构造方法:
public student(string name,int a){
}
public student(int a,string name){
}
为两个不同的构造方法。
如果我们未给系统提供一个构造方法,那么系统会自动提供一个为空的构造方法。
练习:写一个类,定义一个对象,定义两个构造方法:一个有参,一个无参。
(编写一个程序验证对象的传递的值为地址)
注意下面这种形式:
static void changename(student stu){stu.setName “LUCY”}
注意生成新的对象与旧对象指向无关,生成新对象生命消亡与旧对象无关。
4
面向对象方法的重载(overloading)和覆盖(overriding)。
在有些 JAVA 书籍中将 overriding 称为重载,overloading 称为过载。
Overloading 在一个类中可以定义多个同名方法,各个方法的参数表一定不同。但修饰词可能相同,
返回值也可能相同。
在程序的编译过程中根据变量类型来找相应的方法。因此也有人认为 overloading 是编译时的多态,
以后我们还会学到运行时多态。
为什么会存在 overloading 技术呢?作为应对方法的细节。
利用类型的差异来影响对方法的调用。
吃()可以分为吃肉,吃菜,吃药,在一个类中可以定义多个吃方法。
构造方法也可以实现 overloading。例:
public void teach(){};
public void teach(int a){};
public void teach(String a){}为三种不同的方法。
Overloading 方法是从低向高转。
Byte—short—float—int—long—double。
在构造方法中,this 表示本类的其他构造方法:
student(){};
student(string n){
this();//表示调用 student()
}
如果调用 student(int a)则为 this(int a)。
特别注意:用 this 调用其他构造方法时,this 必须为第一条语句,然后才是其他语句。
This 表示当前对象。
Public void printNum(){
Int number=40;
System.out.println(this.number);
}
此时打印的是实例变量,而非局部变量,即定义在类中而非方法中的变量。
This.number 表示实例变量。
谁调用 this.number 那么谁即为当前(this)对象的 number 方法。
封装:使对象的属性尽可能私有,对象的方法尽可能的公开。用 private 表示此成员属性为该类的私有
属性。
Public 表示该属性(方法)公开;
Private 表示该属性(方法)为只有本类内部可以访问(类内部可见)。
(想用 private 还要用 set 和 get 方法供其他方法调用,这样可以保证对属性的访问方式统一,并且便于
维护访问权限以及属性数据合法性)
如果没有特殊情况,属性一定私有,方法该公开的公开。
如果不指明谁调用方法,则默认为 this。
区分实例变量和局部变量时一定要写 this。
5
11.29
继承:
父类(SuperClass)和 子类(SonClass)。
父类的非私有化属性和方法可以默认继承到子类。
Class Son extends Father{
}
而如果父类中的私有方法被子类调用的话,则编译报错。
父类的构造方法子类不可以继承,更不存在覆盖的问题。(非构造方法可以)
如果子类访问父类的构造方法,则在编译的时候提示访问不到该方法。
JAVA 中不允许多继承,一个类有且只有一个父类(单继承)。
JAVA 的数据结构为树型结构,而非网状。(JAVA 通过接口和内部类实现多继承)
方法的覆盖(overriding)
方法的重载并不一定是在一个类中:子类可以从父类继承一个方法,也可以定义一个同名异参的方法,
也称为 overloading。
当子类从父类继承一个无参方法,而又定义了一个同样的无参方法,则子类新写的方法覆盖父类的方法,
称为覆盖。(注意返回值类型也必须相同,否则编译出错。)
如果方法不同,则成重载。
对于方法的修饰词,子类方法要比父类的方法范围更加的宽泛。
父类为 public,那么子类为 private 则出现错误。
之所以构造方法先运行父类再运行子类是因为构造方法是无法覆盖的。
以下范围依次由严到宽:
private :本类访问;
default :表示默认,不仅本类访问,而且是同包可见。
Protected:同包可见+不同包的子类可见
Public :表示所有的地方均可见。
当构造一个对象的时候,系统先构造父类对象,再构造子类对象。
构造一个对象的顺序:(注意:构造父类对象的时候也是这几步)
① 递归地构造父类对象;
② 顺序地调用本类成员属性赋初值语句;
③ 本类的构造方法。
Super()表示调用父类的构造方法。
Super()也和 this 一样必须放在第一行。
This()用于调用本类的构造方法。
如果没有定义构造方法,那么就会调用父类的无参构造方法,即 super()。
要养成良好的编程习惯:就是要加上默认的父类无参的构造方法。
思考:可是如果我们没有定义无参的构造方法,而在程序中构造了有参的构造方法,那么如果方法中没
有参数,那么系统还会调用有参的构造方法么?应该不会。
多态:多态指的是编译时类型变化,而运行时类型不变。
多态分两种:
① 编译时多态:编译时动态重载;
② 运行时多态:指一个对象可以具有多个类型。
剩余30页未读,继续阅读
资源评论
悠闲饭团
- 粉丝: 150
- 资源: 3302
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功