JavaSE学习笔记第四章(面向对象)

1.面向对象和面向过程的设计思路

·面向过程:(POP)关注于具体流程,一步一步实现解决问题

案例1:把大象装进冰箱

3步可以实现:

1.开门();

2.装大象();

3.关门();

·面向对象:(OOP)

1.先设计:对现实中的事物进行分类 创建出类 在类中定义功能(方法) 创建出具体对象,让对象做具体的事

案例1:把大象装进冰箱

冰箱类{

开门();

装大象();

关门();

}

大象类{

}

总结:面向对象无法取代面向过程,他们相辅相成,面向对象关注于从宏观上把握事物之间的关系,在具体到如何实现某个细节时,仍然采用面向过程的思维方式。

2.Java类

1.类的概念:类是对现实事物的抽象(概念) 一类属性(成员变量)和行为(方法)

2.类的结构:

成员变量:事物的属性

//一般不赋值 不需要初始化 (你赋值了对象创建又复制过去就没有意思了 都一样)Java会用默认值初始化(基本数据类型***(记得了懒得说);引用类型是NULL)

//哪里可以使用成员变量:

构造方法 成员方法 代码块中可以使用成员变量

方法:行为 功能

构造方法:

代码块:

内部类:(后面讲)

3.类的定义:

[访问权限修饰符] [修饰符] class 类名{

//这里的 [ ] 表示可加可不加

}

3.Java对象

1.对象客观事物 万物皆对象

2.对象内存简图:

 

创建对象: 对象中复制了一份成员变量 人手一份 方法的话是将方法的地址值传给对象

4.变量的分类

成员变量:事物的属性

//一般不赋值 不需要初始化 (你赋值了对象创建又复制过去就没有意思了 都一样)Java会用默认值初始化(基本数据类型***(记得了懒得说);引用类型是NULL)

//任何数据类型

//哪里可以使用成员变量:

构造方法 成员方法 代码块中可以使用成员变量

局部变量方法、构造方法或者语句中定义

局部变量使用前必须初始化(赋值)

任意数据类型

方法中的参数也是局部变量(只能在该方法中使用)

5.方法的分类

成员方法:成员方法是定义在类中。

语法格式:

修饰符 返回值类型 方法名 ( 参数列表) {

方法体语句;

[return 返回值]

}

构造方法:用来初始化对象的方法

6.构造方法

构造方法名与类名相同,且没有返回值,且不需要使用void修饰

作用是为创建的对象初始化

创建对象的时候至少调用一个构造方法 不显示就系统默认给一个构造方法 若定义了一个构造方法 默认构造方法就失效

每个对象创建都会调用一个构造方法

7.方法重载

方法的重载是指同一个类中具有相同的名字,但参数不同的多个方法。

● 参数不同(可以有三方面的不同)

数量不同

类型不同

顺序不同

调用时,会根据不同的参数表选择对应的方法。

注意:方法重载跟方法的返回值类型没有任何关系

构造方法可以重载 成员方法也可以重载

8.对象与引用

按数据类型分类:

基本数据类型:8个 byte short int long flaot double char boolean

引用数据类型:数组 String 自定义的类

对象内存简图

 

new Person("张三",22)// 在堆空间创建并储存的对象

Person zs 在栈空间声明的变量

= 把对象在内存中的地址 赋给 左边的变量 左边的变量只是有对象的地址 存的地方都不一样 (赋引用)

哪一个调用showInfo()方法 那么name age 就是哪个对象的属性

ls.showInfo();

李四的引用调用showInfo()方法

对象在堆存 引用在栈存

值传递和引用传递

Java中进行方法调用中传递参数时,有两种传递方式:

  1. 值传递:(形参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

2.引用传递:(形参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象,这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下 来,所以方法执行中形式参数的改变将会影响实际参数。基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身

9.static this final关键字

1.this关键字

this关键字代表当前对象,一般使用在引用成员变量 成员方法

在一个类或方法内部,用this.成员变量名来引用成员变量名,用来区分同名的成员变量和局部变量

A类{

int r;

public A(int r){

this.r=r;//表示这个r是构造方法里的r 不是成员变量里的r 就近原则

}

}

2.static关键字

static被称为静态,可以用来修饰类的属性,方法,代码块,内部类

·随类加载而加载

·优先于对象存在

·修饰的成员被所有对象所共享

·修饰的方法可以直接被类调用,不可创建对象//可直接通过类名调用,不需要创建对象

3.final关键字(常量,不可变的)

用于声明方法 属性 类

属性:定义的时候就必须赋值 而且后期都不能改变

(声明时不赋值,就必须在构造方法中逐一赋值)

方法:子类中不可以重写

类:不能被定义为抽象类或是接口 也不能被继承

常常于static一起使用,原则是保证创建每一个对象的时候,final属性的值都是确定的,防止数据在方法体中被修改

10.代码块

代码块在类中加载,类似没有名字的方法体

分类

·实例代码块:{ java语句 }//每次创建对象自动调用

·静态代码块:static{ java语句 }//随类加载自动调用,仅执行一次,与是否创建对象无关

11.包

用于区别类名的命名空间

包的作用

1.避免类重名

2.按照不同功能管理类

3.控制访问权限

包的命名规范:全小写

第一级:项目类型,com(商业),org(机构),gov(政府)等

第二级:项目所开发或者运行的公司名称,如:oracle,sun,huawei等

第三级 :项目的名称,如:bcms,oa,erp,cms等

第四级:项目模块的名称,如bean,action,exception等

导入外部包的类,关键字“import”

12.访问权限修饰符

·public 公共的(类,方法,属性,可以被任意类访问)

·protected 受保护的 (方法,属性)(同类,不同包的子类)

·(default) 默认的(就是不写)(类,方法,属性,只能被同包访问)

·private 私有的 (方法,属性)(只能在本类访问,子类也不可以访问)(但是可以通过set,get方法访问)

 

13.面向对象的特征(继承封装多态)

1.封装(隐藏,私有化)

将一些信息隐藏在类中,不允许外部直接访问,但可以通过该类提供的方法(set/get)来实现对隐藏信息的操作和访问

类{

private String name;

//set()方法

public void setName(String name){

if(条件){

//如厨房重地闲人免进,但你可以点单,有的话就会给你做,没有就不行,你符合条件就可以,不符合不可以

this.name=name;

}

}

//get()方法

public String getName(){

return name;

}

}

2.继承(extends)(java是单继承)

继承是面向对象设计不可缺少的设计思想,是实现代码重用的根基,提高代码可扩展性

继承是从已有的类中派生出来的新类,新类吸收了已有类的行为和属性(除了私有的)还可以扩展自己的新能力

1.继承的形式

[访问权限修饰符] [修饰符] 子类名 extends 父类名{ }

2.继承的传递性

C继承B,B继承A 则C有A和B类所以非私有的属性和方法

当一个类没有继承任何一个类时,jvm默认继承Object类(基类)

3.继承中的构造方法:

·子类构造方法会先调用父类构造方法

·使用super关键字调用父类任意一个构造方法,必须写在构造方法的第一行

//·如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参数的构造方法

4.super关键字用途

使用super关键字访问父类成员 :

• 用super.成员变量名来引用父类成员变量

• 用super.方法名(参数列表)访问父类的方法。

• 用super.构造方法(参数列表)访问父类构造方法//写在方法第一行

//不是创建父类对象,是将父类的信息加载到子类对象储存

5.方法的重写

方法名相同,参数列表相同

返回值类型相同

访问权限不能小于父类权限

public>procted>default>private

(构造方法 静态方法不能重写,成员变量不存在重写)

3.多态:同一种事物在不同表现出的不同状态

1.多态存在的三个必要条件:

·要有继承(包括接口的实现)

·要有重写

·父类的应用指向子类对象 //Animal cat=new Cat();

(编译看左边,运行看右边)

2.多态的好处:

提高代码的扩展性

方法参数具有多态性

class Animal{

void eat() {}

}

class Cat extends Animal{

void eat() {}

}

class Dog extends Animal{

void eat(){}

}

//方法的形式参数类型是父类类型,而传递的实际参数可以是任意

子类的对象

method(Animal animal){

animal .eat();

向上转型:Animal animal=new Cat();

向下转型:Animal animal=new Cat();

Cat cat=(Cat)animal;//把上升到动物的又强制转型下降到Cat类型

cat.eat();//子类父类中的方法都可以调用

为了使用子类中独有的方法

}

14.抽象类(abstract)

1.语法:

[访问权限] abstract class A类名{

成员列表

public abstract 方法名();//抽象方法

//abstract修饰 只有声明,没有具体实现,需要子类来实现

}

public class B extends A {

具体实现

}

·抽象类不能实例化对象(即抽象类不能创建对象),但成员变量 成员方法 构造方法依然存在

·一个类如果包含抽象方法,就必须定义为抽象类

·子类继承抽象父类的话就必须实现父类中的抽象方法,不然子类也要定义为抽象类

15.接口(interface)

1.接口存在的意义:

Java 中一个类只能有一个父类,接口可以实现多继承的逻辑

从本质上讲:接口是一种特殊的抽象类,有抽象方法(就是功能定义,谁想要这个功能就接这个接口 自己重写)

2.接口的定义:

[访问权限修饰符] interface 接口名

//可以再接 (直接接在后面即可) extends 其他接口1,其他接口2.....

3.接口的使用(类使用implements关键字,放在class后面)

[访问权限修饰符] class 类名 implements 接口名1,接口名2...{ }

4.结合继承:

[访问修饰符] class 子类名 extends 父类名 implements 接口1,接口2...{ }

4.接口的特征:

·接口是隐式抽象,声明时不需要用abstract

·接口中方法可以是抽象的 静态的 默认的

·接口中的属性默认为public static final的

·接口不是被类继承 而是被类实现

·接口不能实例化对象,无构造方法

·与继承关系类似,接口与实现类之间存在多态性

·当一个类实现接口的时候,类要实现接口中所有的抽象方法,否则类必须声明为抽象类

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java面向对象程序设计》(第版)课后答案 39 / 39 《Java面向对象程序设计》(第版)课后答案全文共39页,当前为第1页。《Java面向对象程序设计》(第版)课后答案全文共39页,当前为第1页。Java面向对象程序设计 《Java面向对象程序设计》(第版)课后答案全文共39页,当前为第1页。 《Java面向对象程序设计》(第版)课后答案全文共39页,当前为第1页。 〔编著耿祥义张跃平〕 习题1 1.James Gosling 2. 〔1〕使用一个文本编辑器编写源文件. 〔2〕使用Java编译器〔javac.exe〕编译Java源程序,得到字节码文件. 〔3〕使用Java解释器〔java.exe〕运行Java程序 3.Java的源文件是由若干个书写形式互相独立的类组成的. 应用程序中可以没有public类,若有的话至多可以有一个public类. 4.系统环境path D\jdk\bin; 系统环境classpath D\jdk\jre\lib\rt.jar;.; 5. B 6. Java源文件的扩展名是.java.Java字节码的扩展名是.class. 7. D 8.〔1〕Speak.java 〔2〕生成两个字节码文件,这些字节码文件的名字Speak.class 和 Xiti8.class 〔3〕java Xiti8 〔4〕执行java Speak的错误提示 Exception in thread "main" java.lang.NoSuchMethodError: main 执行java xiti8得到的错误提示 Exception in thread "main" java.lang.NoClassDefFoundError: xiti8 <wrong name: Xiti8> 执行java Xiti8.class得到的错误提示 Exception in thread "main" java.lang.NoClassDefFoundError: Xiti8/class 执行java Xiti8得到的输出结果 I'm glad to meet you 9.属于操作题,解答略. 习题2 1. D 2.[代码1][代码2]错误 //[代码3]更正为 float z=6.89F; 3.float型常量后面必须要有后缀"f"或"F". 对于double常量,后面可以有后缀"d"或"D",但允许省略该后缀. 4.public class Xiti4{ public static void main <String args[ ]>{ char ch1='你',ch2='我',ch3='他'; System.out.println<"\""+ch1+"\"的位置:"+<int>ch1>; System.out.println<"\""+ch2+"\"的位置:"+<int>ch2>; System.out.println<"\""+ch3+"\"的位置:"+<int>ch3>; } } 5.数组名字.length 6.数组名字.length 7.[代码1]A,65 [代码2]-127 《Java面向对象程序设计》(第版)课后答案全文共39页,当前为第2页。《Java面向对象程序设计》(第版)课后答案全文共39页,当前为第2页。[代码3] 123456.783,123456.78312 《Java面向对象程序设计》(第版)课后答案全文共39页,当前为第2页。 《Java面向对象程序设计》(第版)课后答案全文共39页,当前为第2页。 8. [代码1]false [代码2]true [代码3]false [代码4]3 [代码5]4.4 [代码6]8.8 习题3 输出110 if-else语句书写的不够规范,复合语句缺少大括号"{}",代码不够清晰. 2.你好好酷!! 3. public class Xiti3_3 { public static void main <String args[ ]>{ int startPosition=0,endPosition=0; char cStart='а',cEnd='я'; startPosition=<int>cStart; //cStart做int型转换据运算,并将结果赋值给startPosition endPosition=<int>cEnd ; //cEnd做int型转换运算,并将结果赋值给endPosition System.out.println<"俄文字母表:">; for<int i=startPosition;i<=endPosition;i++>{ char c='\0'; c=<char>i; //i做char型转换运算,并将结果赋值给c System.out.p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

团团kobebryant

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值