面向对象进阶02_03

本文详细讲解了面向对象编程中的封装概念,包括private关键字的作用和使用方式,以及getter和setter的实现。此外,介绍了this关键字的意义,static在内存和使用上的特性,以及代码块的不同类型和执行顺序。进一步探讨了包的管理和import关键字的使用规则。最后,阐述了main方法的规范和单例设计模式的特点、两种实现方式及其步骤。
摘要由CSDN通过智能技术生成

面向对象进阶

在这里插入图片描述

1. 封装private

1.1. 目的

  • 保护数据

1.2. 方式

  • 权限修饰符private仅类内可见
  • getter/setter对外可见
  • setter设置接受修改条件

2. this

2.1. 作用

    1. 相当于指向本类的指针(C/C++)
    1. 调用类中的属性
    • this.name
    1. 调用类中的方法(包括构造方法)
    • this.getName();

    • this(myName);

        1. 只能放在构造函数的第一个语句
        1. 不能与super同用
        1. 不能与另一个构造函数同用this(myName, myAge)

3. static

3.1. 内存方面

    1. 方法区的静态区
    1. 有且只有一份,所有对象公用,实现数据共享
    1. 不依赖对象,但依赖类
    1. 初始化时间点在对象之前
    • 静态不能访问非静态,非静态可以访问静态

3.2. 使用方面

    1. static修饰的成员变量
    • 在类加载时初始化
    • 只能被静态方法访问,不能被普通方法或者对象访问
    1. static修饰的构造代码块
    • 在构造器之前调用
    1. static修饰的方法
    • 能被类或者对象调用,对象调用时报warning
    1. static修饰的内部类
    • 不能访问非静态的成员函数
    • 能访问final修饰的成员变量
    • 不能访问普通成员变量

4. 代码块

4.1. 普通代码块

  • 执行流程中出现的代码块

4.2. 构造代码块

  • 在类中的成员代码块,在每个对象创建时构造方法之前执行

4.3. 静态代码块

  • 在类中使用static修饰的成员代码块
  • 相对于普通的构造代码块,在类加载时执行
  • 每次程序启动到关闭,只会执行一次

4.4. 同步代码块

  • 多线程

4.5. 执行顺序

  • 静态代码块==》构造代码块==》构造方法

5. 包

5.1. 作用

    1. 方便类的查找和使用
    • 功能相似或者相关的类或者接口组织在同一个包中
    1. 避免名字冲突
    • 不同包中的类名字可以相同

      • 同时调用不同包中相同名字的类时,需要加上包名加以区别
    1. 限定访问权限
    • 拥有包访问权限的类才能访问某个包中的类

5.2. 使用规则

    1. java文件的首部必须编写类所属包
    • package 包名;
    1. 命名规则
    • 多个小写字母的单词组成
    • 使用<.>隔开
    • 一般命名为"com.公司名.项目名.模块名"

5.3. import关键字

  • import 包名.类名;

6. 权限修饰符

public

  • 全部可见

protected

  • 包内/类内/子类可见

default

  • 包内/类内可见

private

  • 类内可见
修饰符子类其他包
public
protected×
default××
private×××

7. main

1. public

  • 表示公共部分,可以被所有操作调用

2. static

  • 表示方法是静态的,可以由类名直接调用

    • java StaticDemo09

3. void

  • 表示没有任何的返回值操作

4. main

  • 系统规定好的方法名称

  • 写错了(相当于没有main方法)

    • 报错:NoSuchMethodError: main

5. String[] args

  • 接受参数的字符串数组
  • 空格分隔
  • 带空格的字符串使用双引号包含

8. 单例设计模式

8.1. 特点

  • 保证程序在内存种只有一个对象存在(被程序所共享)

8.2. 共2种实现方式

    1. 懒汉式
    • 随着类的加载在内存中对象为null
    • 当调用getInstance方法时才创建对象(延迟加载)
class Single{
	private Single(){}
	private static Single s1 = null;
	public static Single getInstance(){
		if(s1 == null){
		s1 = new Single();
		}
		return s1;
	}
}
    1. 饿汉式
    • 随着类的加载直接创建对象
    • 推荐开发中使用
class Single2{
	private Single2(){}
	private static Single2 s = new Single2();
	public static Single getInstance(){
		return s;
	}
	void print(){
		System.out.println("Hello World!");
	}
}

8.3. 实现步骤

    1. 保证一个类只有一个实例
    • 构造方法私有化
    1. 必须要自己创建这个实例
    • 在本类种维护一个本类对象(私有,静态)
    1. 必须像整个程序提供这个实例
    • 对外提供公共的访问方式(getInstance方法,静态)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值