JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)

目录

一、封装

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";
    }
}

1.封装:从语法来看,就是被private修饰的成员变量或者成员方法。只能在当前类当中使用。

 在使用public的时候,引用赋值很正常JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第1张图片

但是,换成private之后,就报错了,提示都没有了。

被private修饰之后,访问权限变小了,此时只能在类内使用,这就是封装。JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第2张图片JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第3张图片

虽然用private对name和age这些属性封装了,但是可以通过public公开的方法来修改或者获取当前的name、age属性

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第4张图片

 运行结果

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第5张图片

2.快捷键,自动生成set或者get方法

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第6张图片

 3.限定访问修饰符(private、 protected、public)

public:可以理解为一个人的外貌特征,谁都可以看得到

default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了

private:只有自己知道,其他人都不知道

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第7张图片

二、包的概念(封装扩展涉及到)

        就像听歌一样,可以分为民族音乐、流行音乐、轻音乐等等。可以建立歌单分类,组织和管理里面的歌曲。

        包:包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一 个包中的类不想被其他包中的类使用。

        包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在 不同的包中即可

简单说,包就是一个文件夹,里面有很多类,用来组织和管理类的,

就像数组里用到的包 import java.util.Arrays;

java.util就是一个包,里面包含了很多类(例如:Arrays等),类里有很多方法(Arrays.sort()等)

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第8张图片

(1)包的导入 

 假如要使用一个Date类,就会弹出提示相关的包

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第9张图片

 通常直接选择想要的回车,包就会自动加上了

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第10张图片

但是如果不加包,也可以这样写 包名.类JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第11张图片

(2)尽量不要使用通配符*适配所有类,可能会出现问题

例如:假设现在我要用到的类,需要导入这两个包

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.*;JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第12张图片

看似没问题,实则容易起冲突

假如有多个包,旗下都有同名的类,就会报错。

import java.util.*;
import java.sql.*;

        因为此时,util和sql这两个包下,都有叫Date的类,那么此时使用Date会冲突,不知道使用的是哪一个包下的Date

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第13张图片

 所以建议,导入具体的包,不要用*

(3)自定义包 

创建一个包

 包的命名一般采用公司域名的颠倒形式JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第14张图片

 其实就是建立了三个文件夹,再这三个文件夹里都可以创建包JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第15张图片

 然后此时我再这个www里创建了一个TestOne.javaJavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第16张图片

三、再次理解封装(默认封装)

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第17张图片

 1.默认情况下封装:不同包中,无论子类或者非子类,都不能访问!!!(同一个包里可以)

default在代码当中是没有的,不用写上去,是默认的意思。

(1)在不同包里创建了java文件,无法访问类

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第18张图片

 在TestTwo里访问TestOne里的name,无法访问

可以看到,name打出n没有提示,即使写上name之后,也报红了err

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第19张图片

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第20张图片

 (2)同一个包里创建类,可以访问类

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第21张图片

 理解了包和这个default,这样就可以懂得前面的private和public了

四、static静态 - 属于类(不属于对象)

(1)静态成员

       在Java 中,被 static 修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对 象,是所有对象所共享的

【静态成员变量特性】

1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
3. 类变量存储在方法区当中
4. 生命周期伴随类的一生 ( 即:随类的加载而创建,随类的卸载而销毁 )

例如:一个班级有很多个学生,这些同学张三,李四,王五,它们的姓名年龄都是不同的,在实例化这些对象的时候,这些属性就是不同的。而相同的是,他们都是属于同一个班级,这样的被所有对象共享的就是static静态成员 。用static来修饰

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第22张图片

 静态成员变量:通过类名来访问(它不属于对象,不用通过对象访问)JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第23张图片

 (2)静态方法

静态方法特性

1. 不属于某个具体的对象,是类方法
2. 可以通过对象调用,也可以通过类名 . 静态方法名 (...) 方式调用,更推荐使用后者
3. 不能在静态方法中访问任何非静态成员变量

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第24张图片

 这个调用时错的,因为name是属于对象的,name的调用是需要对象的引用来调用的。

JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第25张图片

不可以 在一个不依赖于对象的方法里,调用一个依赖对象的成员或者方法。本身就是有问题的,是错误的!!!JavaSE类和对象(2)(重点:封装、包、static静态变量和方法)_第26张图片

你可能感兴趣的:(java,开发语言)