面向对象Part2

时间:2021-10-03 12:47:02

  `变量:

成员变量:又叫全局变量,定义在类中,方法外面.

1).类成员变量.   使用Static

2).实例成员变量.  没有使用Static.

局部变量:出了成员变量,其他的都是局部变量.

1).方法内部的变量.

2).方法的形参.

3).代码块中的变量.一对花括号中的变量.

---------------------------------------------------------------------------------------------------------------------

变量的初始值:

成员变量默认是有初始值的.

面向对象Part2

局部变量:没有初始值,所以必须先初始化才能使用.否则会报错尚未初始化.初始化才会在内存中开辟空间.

----------------------------------------------------------------------------------------------------------------------

变量的作用域:

变量根据定义的位置不同,也决定了各自的作用域是不同的.看{}

成员变量:在整个作用域中都有效.

局部变量:从开始定义的位置开始到紧跟着结束的{}为止.

成员变量可以先使用后定义. 局部变量必须先定义而后使用

面向对象Part2

这里的先使用后访问是眼睛中看到的先后顺序.  如果要调用System.out.println(x)则一定会访问方法doWork()

doWork没有加static修饰.访问doWork方法必须用对象去访问,在构建对象的时候 ABC s = new ABC();  调用 s.doWork(x)    String x 已经存在,在new对象ABC()存在.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

变量的生命周期:    面向对象Part2

面向对象Part2面向对象Part2

package:

语法:  package 子包.子子包      必须把该文件作为java文件中所有代码之前.

面向对象Part2面向对象Part2

java常见包:

面向对象Part2

全限定名称:包名+类名.

import关键字:

面向对象Part2

面向对象Part2

面向对象Part2

package在第一行, import在package下面.

可以写多个import.只能写一个package.

通配符(*)    import java.until.*   引入until包下所有在该文件中使用到的类, 此时的*表示类名.

----------------------------------------------------------------------------------------------------------------------------------------------

静态导入(static import):

面向对象Part2

面向对象Part2

static成员名可以用通配符表示

import static java.until.Arrays.*;

面向对象Part2

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

封装思想:

面向对象Part2

面向对象Part2

面向对象Part2

封装setAge确保了age的安全性.

封装其实就是让有些类看不到一些类做了什么事情.所以用权限修饰符来暴露和隐藏.

private:类访问权限. 只能在本类中访问,离开本类无法访问. 可以通过间接访问.  例如:通过方法调用a, 然后将a赋值给age.访问了 private age

面向对象Part2

不写访问权限(缺省):包访问权限.只有在同一个包中才能访问.

protected:子类访问权限.同包可以访问,即使不在同一包,有继承关系也可以访问.

public:表示全局的.  可以在当前项目中任何地方访问.

面向对象Part2面向对象Part2

如果父类仅仅暴露给子类,用protected.

JAVAbean:

面向对象Part2不要把成员变量叫做属性,属性和字段是两种完全不同的东西.

面向对象Part2

面向对象Part2如果操作的字段是boolean类型,  此时不应该叫getter方法,把getName编程isName.

setter方法:

面向对象Part2

每一个字段都得提供一对setter/getter.

面向对象Part2   以后使用Eclipse工具之后, getter/setter工具都是自动生成的.

面向对象Part2

This关键字:  this指字段中的变量.

面向对象Part2

什么是this:

this主要存在于两个位置:

1).构造器中:

表示当前创造的对象.

如:  User u1 = new User().   如果此时打印u1,则会打印出十六进制的哈希编码地址值.  在这行代码中,编译时系统会为程序创建一个缺省的构造器.

User(){}   如果此时在缺省构造器中编写  System.out.println(this)    系统输出的值是和上文相同的十六进制哈希编码地址值. 这就说明了this在编译器中表示当前创造的对象.在这里,this表示的是当前创造的对象u1.

2).方法中:

哪一个对象调用this所在的方法,那么this就表示哪一个对象.

当一个对象创建之后,JVM会分配一个引用自身的this.     面向对象Part2

this关键字的使用:

1).解决成员变量和参数的二义性.必须要用.

2).同类中实例方法之间的互相调用问题,在实际编写过程中我们习惯省略this.show()的this. 其实这类问题只需要想明白是谁来调用方法的就可以找到this指代的是谁.

.面向对象Part2

3)可以把this当做参数传给另一个方法.

4)将this当做方法的返回值(链式方法编程)

5)static和this不能一起使用.

6:构造器重载时的互相调用问题

面向对象Part2this(name) 构造器判断调用重载构造器,参数为string.

一个构造器中只能调用一个重载构造器.且必须作为构造器的第一句话.   语法格式 this(实参)通过实参的个数,数据类型判断调用哪一个重载构造器

当多个方法重载或多个构造器重载时. 我们一般是少参数调用多参数.参数越多,考虑的因素也就越多,功能更强大.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

创建对象并给对象设置初始值有两种方式:

1)先通过无参数构造器创建出一个对象,再通过对象调用相应的setter方法.

2)直接调用带参数的构造器,创建出来的对象就拥有了初始值.

通过构造器和通过setter方法都可以完成相同的功能.

给对象设置数据:

1).setter注入(属性注入)

2).构造注入

面向对象Part2

面向对象Part2  根据不同的需求和合理性选择使用构造器带参数还是getter,setter.