动态创建:
数据类型
[]
数组变量名
=new
数据类型
[
元素个数
]
静态创建:
数据类型
[]
数组变量名
={
元素
1,
元素
2,...}
动态创建并赋初始值:
数据类型
[]
数组变量名
=new
数据类型
[]{
元素
1,
元素
2,...}
数组特点:
只能存储相同类型的数据
数组中的值可以重复
数组的长度是固定的
数组是连续的内存空间
相关的算法
冒泡排序
二分法查找
系统预定义类型引入
基本类型及其包装类
字符串类型
日期类型基础
随机数
Math.random()
Random r=new Random()
ublic class
Test01
{
public static
void
main
(
String
[]
args
) {
Count c
=
new
Count
();
int
sum
=
c
.
sum
(
24
);
System
.
out
.
println
(
sum
);
}
}
class
Count
{
//
从出生后第
3
个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子
/*
*
第
1
个月,
1
对
f(1) = 1
*
第
2
个月,
1
对
f(2) = 2
*
第
3
个月,
2
对 老兔子本身
1
对,加上生出来的一对第
1
个月
* f(3) = f(2) + f(1)
*
第
4
个月,
3
对 老兔子本身
1
对,上月出生的兔子第
2
个月,老兔子又生出一对新的第
1
个
月
*
整理: 老兔子本身
1
对,老兔子又生出一对新的第
1
个月
==
》等价于第
3
个月
的状态
上月出生的兔子第
2
个月,
==>
等价于第
2
个月的兔子状态
* f(4) = f(3)+f(2)
*
第
5
个月,
5
对 老兔子本身
1
对,老兔子又生出
1
对新的第
1
个月,第
3
个月初始的兔子也成
新的老兔子
1
对,
它也生出一对新的第
1
个月,第
4
个月出生的兔子第
2
个月
1
对
*
整理分析:
*
老兔子本身
1
对,老兔子又生出
1
对新的第
1
个月,第
4
个月出生的兔子第
2
个月
1
对
==
》等价于
第
4
个月的状态
*
第
3
个月初始的兔子也成新的老兔子
1
对,它也生出一对新的第
1
个月
==
》等价于第
2
个月的兔
子状态
* f(5) = f(4) + f(2)
* .... f(n) = f(n-1) + f(n-2)
*
*/
public
int
sum
(
int
n
){
if
(
n
==
1
||
n
==
2
){
return
1
;
}
else
{
return
sum
(
n
-
1
)
+
sum
(
n
-
2
);
}
}
public class
Test02
{
public static
void
main
(
String
[]
args
) {
Count c
=
new
Count
();
System
.
out
.
println
(
c
.
sum
(
1
));
System
.
out
.
println
(
c
.
sum
(
2
));
System
.
out
.
println
(
c
.
sum
(
3
));
System
.
out
.
println
(
c
.
sum
(
4
));
System
.
out
.
println
(
c
.
sum
(
5
));
System
.
out
.
println
(
c
.
sum
(
6
));
System
.
out
.
println
(
c
.
sum
(
7
));
System
.
out
.
println
(
c
.
sum
(
8
));
System
.
out
.
println
(
c
.
sum
(
9
));
System
.
out
.
println
(
c
.
sum
(
10
));
}
class
Count
{
public
int
sum
(
int
n
){
if
(
n
==
10
){
//
第
10
天
return
1
;
}
else
{
/*
*
第
9
天没吃之前是 第
10
天
+1
个的
2
倍
*
第
8
天没吃之前是 第
9
天
+1
个的
2
倍
*
。。。。
*/
return
(
sum
(
n
+
1
)
+
1
)
*
2
;
public class
Test3
{
public static
void
main
(
String
[]
args
) {
Count c
=
new
Count
();
System
.
out
.
println
(
c
.
f
(
5
));
System
.
out
.
println
(
c
.
f
(
10
));
}
}
class
Count
{
public
long
f
(
int
n
) {
long
sum
=
0
;
if
(
n
==
1
){
sum
+=
1
;
}
else if
(
n
>
1
){
sum
+=
n
+
f
(
n
-
1
);
}
return
sum
;
}
面向对象概论
【考试题】
面向对象的三大基本特征是:封装、继承、多态
封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了
数据
隐藏功能或者信息的细节,使用者只关注功能的使用,而不需要关心实现细节
继承是为了重用父类代码,同时为实现多态性作准备
关键字
extends
,子类可以集成父类的成员变量和成员方法
java
采用的是单根集成体系
多态性是发送消息给某个对象,让该对象自行决定响应何种行为。通过将子类对象引用赋值给超类
对象引用变量来实现动态方法调用。
一个事物可以有多种表现形式
体现形式常见的有
3
种
父类型引用子类对象
方法重写
方法重载
面向对象三大特征的优缺点
设计目标:高内聚低耦合
可维护性提高
重用性提高
扩展性增强
面向对象的概念
OO
面向对象
Object Oriented
是软件开发方法
面向对象是一种新兴的程序设计方法
,
或者是一种新的程序设计规范
paradigm
,其基本思想是使用
对象、类、继承、封装、消息等基本概念来进行程序设计
从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类
的自然思维方式
开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域
不仅仅是软件,还有计算机体系结构和人工智能等
面向对象的思想已经涉及到软件开发的各个方面。如面向对象的分析(
OOA
,
Object Oriented
Analysis
),面向对象的设计(
OOD
,
Object Oriented Design
)、以及经常说的面向对象的编程
实现(
OOP
,
Object Oriented Programming
)
OOP
使得现实世界中的概念在计算机程序中编程模块,它包括构造程序的特征以及组织数据和算法
的机制
面向对象是一种对现实世界理解和抽象的方法
传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向
对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们
都可以被看作一个小型的
“
机器
”
,即对象
OOP
语言有
3
大特征:封装、继承及多态,所有这些特征与类的概念是息息相关的
面向对象是指一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的集合。它将对象
作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性
对象、类、实体之间的关系和面向对象的问题求解思维方式
对象
对象是要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事
物,还能表示抽象的规则、计划或事件。对象是一个客观存在的、唯一的实体,是一个类的动态实例,
拥有自己的标识、数据与行为
在现实世界中:是客观世界中的一个实体
在计算机世界中:是一个可标识的存储区域
现实世界中所有的事物都是对象
对象都具有某些特征,并展现某些行为
对象的状态和行为
对象具有状态,一个对象用数据值来描述它的状态
对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中
对象的两个要素
属性:用于描述对象静态特性(结构特性)的一个数据项,描述一个人可用姓名、性别、身份证号
等属性
方法(也称服务):用于描述对象动态特性(行为特性)的一个操作系列
每个人都具有工作、学习等行为特性
对象将数据和施加于数据上的操作打包成一个不可分割的最基本的模块,使得仅有该类的有限个方
法才可以操纵、改变这些数据
类
用
Java
语言对现实生活中的事物进行描述,通过类的形式来体现
类是具有共同属性和行为的对象的抽象,具有相同特性(数据元素)和行为(功能)的对象的抽象
就是类
对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象
类实际上就是一种数据类型
类是用于组合各个对象所共有操作和属性的一种机制
类是具有相同属性和行为的一组对象的集合
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述
类可以定义为数据和方法的集合,类也称为模板,因为它们提供了对象的基本框架
一旦定义类后,就可以用这种新类来创建该类型的对象
类就是对象的模板(
template
)
而对象就是类的一个实例(
instance
)
消息和方法
对象之间进行通信的结构叫做消息。发送一条消息至少要包括说明接受消息的对象名、发送给该对
象的消息名(即对象名、方法名)
类中操作的实现过程叫做方法,一个方法有方法名、返回值、参数、方法体
类和对象之间的关系
类是事物的描述
类是
Java
程序的核心,它定义了对象的形状和本质,可以用类来创建对象。当使用一个类创建了一
个对象时,通常说给出了这个类的一个实例
类由类声明和类体构成,一般命名方法为:首字母大写,大写字母分词,例如
XueSheng
类包含数据成员
(
数据、属性
)
和成员方法(函数)。一般建议数据成员应该是通过函数
(
方法
)
访问的
对象是类的实例,就是应用中定义的某个类的变量,例如
Person p=new Person(); p
就是对象
类是和问题域相关的具有相同属性和行为的对象的抽象;对象是该类事物的实例,在
Java
中通过
new
来创建的
封装
在面向对象程式设计方法中,封装
Encapsulation
是指一种将抽象性函式接口的实现细节部分包装、隐藏
起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问
反射机制
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于能修改自己的实现代码,而不用修改那些调用代码的程序片段
//
第一步是确定研究的目标对象
---
可以区分的独立个体
//
需要方法和属性
class
Student
{
//
成员属性
---
静态特征的描述
private
boolean
sex
;
//
一般使用私有属性,共有的
get/set
方法
//
成员方法
---
提供的功能描述
public
boolean
getSex
(){
return this
.
sex
;
}
//
不允许修改
sex
,所以不提供
set
方法
protected
void
setSex
(
Boolean
sex
){
//
如果在特殊情况下允许修改
,
可以使用范围限
定词进行表示
this
.
sex
=
sex
;
}
//
构建对象
Student s1
=
new
Student
();
s1
.
setSex
(
true
);
s1
.
setSex
(
false
);
//是否允许取
封装有三大好处
良好的封装能够减少耦合
类内部的结构可以自由修改
可以对成员进行更精确的控制
隐藏信息,实现细节
绝于限制