目录
一、包(package)
1.1包的概念
1.2包的作用
1.3如何使用包
1.3.1定义包
1.3.2导入包(其实本质是导入包中的类)
二、封装
2.1什么是封装
2.2封装的作用
2.3怎么封装
2.4封装的注意事项
三、this引入
3.2this的使用
3.3this的注意和小结
3.3.1用途
3.3.2this注意事项:
可以简单的理解为一个文件夹
前面说了我们写的一行行代码多了可以用方法装起来,方法多了可以用类将方法装起来,而类多了后呢,就用包将一个个的类给装起来
比如,腾讯视频上面有很多电影,但是如果他没有给电影分类的话我们就很难找到我们想看的电影,所以这就把包的重要性体现出来了。
包命名规范:
一般是公司域名反过来写+项目名+模块名字+子模块名
包名中应该全部都是英文,并且是小写的
例如 : rst.com 域名 org.lisang.项目名.子模块名
package com.rst.erp.oa.domain;自动化办公
package com.rst.erp.sa.entity; 系统管理
注意:不要写成nc.
导入包的语法 : import 包名.子包名.类名;
现在用eclipse工具自动导包,快捷键:ctrl + shift + o
注意:
导入包\的代码应该在声明包(就是该类所在的包)的后面,声明类的前面
import java.util.*; 表示导入本包中所有会使用到的,util包中的类;
只会导入util包下面直接的类型,不包括util包的子包中的类型
java.lang是核心包,下面的直接类型是自动导入的;
例如:String、System类
lang包的子包中的类型不会自动导入,需要手动导入
在一个类中会用到同名不同包的时候必须使用全限定路径
例如:同时使用java.util.Date和java.sql.Date
封装是面向对象三大特征之一,其含义有两个:
把对象的字段和方法存放在一个独立的模块中(类).
信息隐藏,尽可能隐藏对象的数据和功能的实现细节封装的好处︰
1.提高组件的重用性,把公用功能放入类中,谁需要就直接调用这个类就好了
2.保护内部数据的安全
1)不希望在外部类中随意访问类中的成员变量
2)达到权限要求的才能访问。
3)只是获取数据的时候,例如 单例模式
1,私有化成员变量(用privtate)
2,在定义一个public的方法来获取这个值
setXxx()对这个值进行设置
getXxx()获取设置的成员变量,要有返回值
例如
年龄都是女生比较敏感的,所以我们将年龄封装起来,如果年龄大于25岁就输出25岁,如果小于25岁就输出本来的年龄
public class Girl {
private int age;
private String name;
void play(){
System.out.println("会化妆");
}
public void setAge(){
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
if(age>25){
System.out.println("年龄:"+25);
}else {
System.out.println("年龄:"+age);
}
return age;
}
//测试类
public class Text {
public static void main(String[] args) {
Girl girl = new Girl();
girl.setAge(23);
girl.getAge();
}
}
这样我们就封装好了,然后要用的时候就在main方法里面调用就行了
1. 不是只有private才叫封装,private只是最大限度的封装而已。
2. get和set方法都是只能获取或者赋值一个成员变量
不能\set(String n,double m,boolean v)赋值3个成员变量
3.单一职能原则:功能最小化,不要想着一个方法写完所有的功能,因为代码复用率高
如果我们将上面的代码this去掉
public class Girl {
private int age;
private String name;
void play(){
System.out.println("会化妆");
}
public void setAge(){
}
public void setAge(int age){
age = age;
}
public int getAge(){
if(age>25){
System.out.println("年龄:"+25);
}else {
System.out.println("年龄:"+age);
}
return age;
}
//测试类
public class Text {
public static void main(String[] args) {
Girl girl = new Girl();
girl.setAge(23);
girl.getAge();//0,发现赋值是失败的
}
}
这是为什么呢
如果将this加上的堆栈分析图
3.2.1解决局部变量和成员变量的二义性 ---> get set 方法以及有参构造,代码还是上面的我就不重复截取了
3.2.2 本类中构造方法之间的相互调用,但是必须是\构造方法内的第一句\
解决局部变量和成员变量的二义性 ---> get set 方法以及有参构造
在本类之间 ,构造方法之间的相互调用 this()调用无参数的构造方法,this(...)可以添加参数,表示调用有参数的构造方法
this不能在静态的方法中使用 : 无法从静态上下文中引用非静态成员this
static类级别,this对象级别
static修饰的是属于类,被共享 。而this是某一个具体的对象地址
注意:你用static 修饰这个成员变量/方法的时候,这个成员变量/方法会在这个类加载的时候就被加载到静态区