总结
包package概念
概念:简单的理解包就是一个文件夹。
包作用
① 方便管理项目中的类等文件。
② 可以避免类名冲突的问题。
使用包
定义包
包命名规范:一般是公司域名反写.项目名.模块名字.子模块名;
要求:包名是全英文小写。
package cn.itsource.packagedemo;// 声明包
导入包
为什么要导包?
当我们需要使用别人或者JDK中的类的时候,就需要告知JVM从什么地方去加载这个类,这个过程就是导包。
其实本质是导入包中的类。
导入包的语法 : import 包名.子包名.类名;
现在用eclipse工具自动导包,快捷键:ctrl + shift + o
注意:
1.导入包的代码应该在声明包(就是该类所在的包)的后面,声明类的前面。
2.import java.util.*; 表示导入本包中所有会使用到的util包中的类,只会导入util包下面直接的类型,不包括util包的子包中的类型。
3.java.lang是核心包,下面的直接类型是自动导入的;
例如:String、System类,lang包的子包中的类型不会自动导入,需要手动导入。
4.在一个类中会用到同名不同包的时候必须使用全限定路径
封装
-
为什么要封装
Java中是通过封装来完成保护内部成员的目的,所以,这就是我们学习封装的目的。
-
封装的作用
封装是为了保护内部数据的安全:
- 不希望在外部类中随意访问类中的成员变量
- 达到权限要求的才能访问。
- 只是获取数据的时候。例如:单例模式。
-
怎么封装
步骤:
- 私有化成员变量(用private修饰成员变量)。
- 为每一个成员变量提供合理的public修饰的:
getXxx()方法 获取成员变量的值,如果当前成员变量类型是boolean类型,将getXxx()改为isXxx()。
setXxx(...)方法 设置成员变量的值。 - 提供一个无参构造,有参构造根据需求确定是否要写。
- 该类用public修饰。
-
封装的注意事项
- 不是只有private才叫封装,private只是最大限度的封装而已。
- get和set方法都是只能获取或者赋值一个成员变量,不能set(String n, double m, boolean v)赋值3个成员变量。
- 单一职能原则:功能最小化,不要想着一个方法写完所有的功能,因为代码复用率高。
-
封装小结
对象赋值的方式:
- 有参构造 :new 类名(...);
- 对象名.setXxx(...);
- 对象名.成员变量 = 值;// 封装后不能用
一般配合使用,如果成员变量比较少,可以直接用有参构造。
如果成员变量比较多,一般用无参构造 + setXxx(...)。
如果对象已经创建,需要修改值,用setXxx(...)。
3.对象取值的方式: - 对象名.getXxx(); / 对象名.isXxx()
- 对象名.成员变量 ;// 封装后不能用
this
-
1.this的概念:
this指代当前对象,即,哪个对象调用就指代哪个对象。
-
this使用
-
解决局部变量和成员变量的二义性【set方法和有参构造中形参跟成员变量同名不同义】
public Account(String name) { // 在方法中使用变量的时候,优先从局部范围找,就近原则 // 这里因为成员变量和局部变量名字相同,存在二义性问题 // 要解决二义性问题,就需要用到this,加上this,就会直接从成员变量位置找name this.name = name; }
-
本类中构造方法之间的相互调用,但是必须是构造方法内的第一句。
语法:this(...); 调用本类中的另一个构造方法,并不会创建额外的对象,会根据参数自动匹配调用对应的构造方法。 作用: 1.可以创建对象的时候,给定某些成员变量默认值 2.可以复用其它构造方法,简化给成员变量赋值的代码 例如: // 1.可以创建对象的时候,给定某些成员变量默认值 public Account(String name) { // name和111111都是String类型,只不过name是一个变量,而111111是一个写死的值 // 并通过该构造方法创建的对象都有相同的 【默认密码】 this(name,"111111");// 必须是构造方法内的第一句,这里调用的是有两个String参数的构造方法 } public Account(String name,String pwd) { // 要解决二义性问题,就需要用到this,加上this,就会直接从成员变量位置找name this.name = name; this.pwd = pwd; } // 2.可以复用其它构造方法,简化给成员变量赋值的代码 public Account(String name,String pwd,double money) { /* this.name = name; this.pwd = pwd; 可以使用下面的方式,this(...)简化代码 */ this(name,pwd);// 复用上面的有两个String参数的构造方法,简化代码作用 this.money = money;
-
-
this注意和小结
- this用途:
- 解决局部变量和成员变量的二义性(掌握)
- 在本类之间,构造方法之间的相互调用this()调用无参数的构造方法,this(...)可以添加参数, 表示调用有参数的构造方法 (掌握)
- this作为参数传递,this作为返回值 (了解)
- this注意事项:
- this不能在静态的方法中使用: 无法从静态上下文中引用非静态成员this。
- static是类级别,this是对象级别
static修饰的是属于类。
this是属于某一个具体的对象。
- this用途:
继承
-
继承引入
三个类都有重复的代码,可以把这共同的代码抽出去,抽出去放到另外一个类里面;下面的3个类和上面的类需要发生一点关系(继承),上面的类叫做 父类(超类,基类,根类),下面的类叫子类(派生类,拓展类);
好处 : 提高了代码的复用性 -
继承作用
代码复用,提高开发效率和程序的扩展性。
-
Java中类继承的基本语法
① Java类中的继承的语法格式:
class A{}
class B extends A{}
A 就是B的父类、基类、根类、超类
B是A的子类、派生类、拓展类
② 验证:子类中是否可以继承到父类中的东西(通过创建子类对象来操作从父类继承的东西) -
子类可以从父类继承哪些成员
除了构造方法和private修饰的属性和方法外不能被继承其他都可以继承过来
但是,私有化成员不能直接通过子类对象直接访问,但是可以通过继承过来的公共方法间接访问。 -
Java中类的继承特点
① 单继承(一个类只能够有一个直接父类)
② 多重继承(多层级的继承), 一个类可以有子类,子类还可以有子类...③ 每一个类都有一个直接父类,如果没有看到显示的继承代码,那么就隐式继承Object