目录
一、封装
1.封装:从语法来看,就是被private修饰的成员变量或者成员方法。只能在当前类当中使用。
2.快捷键,自动生成set或者get方法
3.限定访问修饰符(private、 protected、public)
public:可以理解为一个人的外貌特征,谁都可以看得到
default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了
private:只有自己知道,其他人都不知道
二、包的概念(封装扩展涉及到)
简单说,包就是一个文件夹,里面有很多类,用来组织和管理类的,
就像数组里用到的包 import java.util.Arrays;
java.util就是一个包,里面包含了很多类(例如:Arrays等),类里有很多方法(Arrays.sort()等)
(1)包的导入
(2)尽量不要使用通配符*适配所有类,可能会出现问题
(3)自定义包
三、再次理解封装(默认封装)
1.默认情况下封装:不同包中,无论子类或者非子类,都不能访问!!!(同一个包里可以)
default在代码当中是没有的,不用写上去,是默认的意思。
(1)在不同包里创建了java文件,无法访问类
(2)同一个包里创建类,可以访问类
四、static静态 - 属于类(不属于对象)
(1)静态成员
【静态成员变量特性】
(2)静态方法
【静态方法特性】
面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说 就是套壳屏蔽细节 。封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互。拿洗衣机举例,我们只管把衣服和洗衣液扔进去。而洗衣机的构造,零件,组成这些细节,我们是看不见的,在出厂前已经被隐藏了,我们看见的仅仅就是一个大箱子洗衣机。
public class Person {
private String name;
public int age;
public Person(){
System.out.println("不带参数的构造方法!");
}
public Person(String name, int age) {
this.name = name;
this.age = age;
System.out.println("带2个参数的构造方法!!!");
}
public void sleep(){
System.out.println(this.name+"正在睡觉~~");
}
}
public class Test2 {
public static void main(String[] args) {
Person person = new Person();
person.name = "zhangsan";
}
}
但是,换成private之后,就报错了,提示都没有了。
虽然用private对name和age这些属性封装了,但是可以通过public公开的方法来修改或者获取当前的name、age属性
public String getName() { return name; } public void setName(String name) { this.name = name; }
运行结果
public:可以理解为一个人的外貌特征,谁都可以看得到
default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了
private:只有自己知道,其他人都不知道
就像听歌一样,可以分为民族音乐、流行音乐、轻音乐等等。可以建立歌单分类,组织和管理里面的歌曲。
包:包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一 个包中的类不想被其他包中的类使用。
包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在 不同的包中即可。
简单说,包就是一个文件夹,里面有很多类,用来组织和管理类的,
就像数组里用到的包 import java.util.Arrays;
java.util就是一个包,里面包含了很多类(例如:Arrays等),类里有很多方法(Arrays.sort()等)
假如要使用一个Date类,就会弹出提示相关的包
通常直接选择想要的回车,包就会自动加上了
例如:假设现在我要用到的类,需要导入这两个包
import java.util.Arrays; import java.util.Date;import java.util.Arrays; import java.util.Date; public class Test2 { public static void main(String[] args) { Date date = new Date(); int[] array = {1,2,3}; System.out.println(Arrays.toString(array)); }
其实可以这样
看似没问题,实则容易起冲突
假如有多个包,旗下都有同名的类,就会报错。
import java.util.*; import java.sql.*;因为此时,util和sql这两个包下,都有叫Date的类,那么此时使用Date会冲突,不知道使用的是哪一个包下的Date
所以建议,导入具体的包,不要用*
创建一个包
(1)在不同包里创建了java文件,无法访问类
在TestTwo里访问TestOne里的name,无法访问
可以看到,name打出n没有提示,即使写上name之后,也报红了err
(2)同一个包里创建类,可以访问类
理解了包和这个default,这样就可以懂得前面的private和public了
在Java 中,被 static 修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对 象,是所有对象所共享的 。【静态成员变量特性】
1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问3. 类变量存储在方法区当中4. 生命周期伴随类的一生 ( 即:随类的加载而创建,随类的卸载而销毁 )
例如:一个班级有很多个学生,这些同学张三,李四,王五,它们的姓名年龄都是不同的,在实例化这些对象的时候,这些属性就是不同的。而相同的是,他们都是属于同一个班级,这样的被所有对象共享的就是static静态成员 。用static来修饰
【静态方法特性】
1. 不属于某个具体的对象,是类方法2. 可以通过对象调用,也可以通过类名 . 静态方法名 (...) 方式调用,更推荐使用后者3. 不能在静态方法中访问任何非静态成员变量
这个调用时错的,因为name是属于对象的,name的调用是需要对象的引用来调用的。