【3-3】《Java中面向对象进阶重点》——封装、this关键字、static、包、权限修饰符、代码块、main方法、单例设计模式

重点

一、封装

面向对象三大特性:封装、继承、多态

封装的含义是什么?

  • 有这样一段代码:

    class Person {
    	String name ; // 表示姓名
        int age ;     // 表示年龄
        void say(){
            System.out.println("姓名:" + name + ";年龄:" + age) ;
        } 
    }
    

    此时age可以赋值为负数,出现逻辑错误。

  • 为避免逻辑错误,我们需要在调用时为其做一个逻辑判断保证其逻辑正确。修改:

    class Person {
        private String name; // 表示姓名
        private int age;           // 表示年龄 
        void tell() {
            System.out.println("姓名:" + getName() + ";年龄:" + getAge()) ;
        }
        public void setName(String str) {
            name = str;
        }
        public void setAge(int a) {
            if (a < 0 || a > 150) {
               System.out.println("年龄不合理!自动设置为1");
                age = 1;
            } else {
                age = a;
            }  
        }
        public String getName() {
            return name;
        }
        public int getAge() {
            return age;
        }
    }
    
  • 使用private关键字进行封装,表示将其私有在类的范围之中。

建议对所有属性都进行封装,并为其提供get和set方法,保护和防止我们无意之中破坏我们的成员数据,不让类以外的程序直接访问和修改。

二、this关键字

  • this指当前对象,正在执行的这个方法

  • 在构造方法中调用另一个构造方法时,this必须写在第一行

三、静态static

  1. 概述
  • 静态修饰的属性存储在方法区中,所有对象都持有这个静态属性的内存地址
  • 理解:非静态修饰的属性为对象的属性;静态修饰的属性是类的属性。
  1. 重点
  • 静态修饰的方法,在类加载的时候就加载到内存了,无需再new对象,直接调用即可。静态修饰的方法被调用时,有可能对象还没被创建。
  • 访问时静态资源不能操作非静态资源。
    原因:执行实际早于非静态资源,非静态资源对象还没被加载。

四、包

使用类的时候需要导包,不导包时要写类的全称。

  • 导包格式:

    import 包名.类名;
    
  • 有些类不需要导包:

    1. String,来自java.lang包
    2. 使用当前代码所在的包的类也不需要导包

五、权限修饰符

用于修饰Java中所有需要访问的资源,相当于给资源添加了一个访问权限,在某些权限不允许的情况,资源不被访问。

修饰符子类其他包说明
public跨包访问,访问其他包的资源(常用)
protected×受保护的,不能访问其他包
default××默认只能访问同一个类和包,不能访问子类和其他包
private×××只有在同一个类中才能访问(常用)

private封装成了只有同一个类才能用,封装地更合理,权限小。public用在资源要跨包访问时。

六、代码块

普通代码块:编写在顺序执行的代码流程中的代码块

重点是:构造代码块、静态代码块、同步代码块(到后面多线程中再详细学习)。

  • 构造代码块:区别于构造方法的一点:无论用户调用哪个构造方法创建对象,构造代码块都必然执行。

  • 静态代码块:在构造代码块的前面加上static。随着类的加载(第一次使用),静态代码块执行。由于类只加载一次,所以静态代码块只执行一次。

面试题:构造方法与构造代码块以及静态代码块的执行顺序。
静态代码块->构造代码块->构造方法

七、main方法详解

main方法就是程序执行入口,主要学习一下main方法中的关键字。

  • public:权限修饰符,可以在所有位置访问

  • static:静态的,可以通过类名调用

  • void:该方法无返回值

  • main:系统专门会找由public、static修饰的main方法

  • String[] args:该数组默认长度为0

八、单例设计模式

单例设计模式是比较重要的一个设计模式,会伴随整个开发生涯,单例设计模式有两种实现方式。
单例设计模式:保证程序在内存中只有一个对象存在(被程序所共享)

实现方式

  1. 懒汉式
    随着类的加载在内存中对象为null,当调用 getInstance 方法时才创建对象(延迟加载)
  2. 饿汉式
    随着类的加载直接创建对象(推荐开发中使用)

实现步骤

  1. 保证一个类只有一个实例,实现方式:构造方法私有化
  2. 必须要自己创建这个实例,实现方式:在本类中维护一个本类对象(私有,静态)
  3. 必须向整个程序提供这个实例,实现方式:对外提供公共的访问方式(getInstance方法,静态)
  • 懒汉式实现如下:
    class Single{
        private Single() {}
        private static Single s1 = null;
        public static Single getInstance() {
            if (s1 == null) {
                s1 = new Single();
            }
            return s1;
        }
    }
    
  • 饿汉式实现如下:
    class Single2{
        private Single2() {}
        private static Single2 s = new Single2();
        public static Single getInstance() {
            return s;
        }
        void print() {
            System.out.println("Hello World!");
        }
    }
    

总结

学习了Java三大特性中的封装,对代码的掌控力更高了,通过private修饰后的变量,使用get、set方法进行调用,后续还会学习到继承和多态,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值