类与对象的基本概念(下)

文章目录

  • 类与对象的基本概念(下)
    • 一、类的访问权限控制
      • 1.访问控制修饰符
        • (1)默认访问修饰符-不使用任何关键字
        • (2)私有访问修饰符-private
        • (3)受保护的访问修饰符-protected
        • (4)公有访问修饰符-public
      • 2.set、get方法
        • (1)set方法
        • (2)get方法
      • 3.this关键字
    • 二、对象初始化和回收
      • 1.对象初始化
        • (1)默认构造方法
        • (2)自定义构造方法与方法重载
      • 2.内存回收
        • (1)垃圾收集器:
        • (2)finalize()方法:

一、类的访问权限控制

类型 private 无修饰 protected public
同一类
同一包中的子类
同一包中的非子类
不同包中的子类
不同包中的非子类

1.访问控制修饰符

(1)默认访问修饰符-不使用任何关键字

仅允许同一个包内的访问;又被称为“包(package)访问权限”

使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。
接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public

(2)私有访问修饰符-private

只可被同一类的方法访问

私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private
声明为私有访问类型的变量只能通过类中公共的 get 方法被外部类访问。
Private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。

(3)受保护的访问修饰符-protected

只可被同一类及其子类的方法访问

protected 需要从以下两个点来分析说明:

  • 子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;

  • 子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。

protected 可以修饰数据成员,构造方法,方法成员,不能修饰类(内部类除外)。
接口及接口的成员变量和成员方法不能声明为 protected

(4)公有访问修饰符-public

可以被其他任何方法访问(前提是对类成员所属的类有访问权限)

被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。
如果几个相互访问的 public 类分布在不同的包中,则需要导入相应 public 类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。

2.set、get方法

(1)set方法

  • 功能是修改属性变量的值

  • set方法名以“set”开头,后面是实例变量的名字(首字母大写)

  • 例如:

    public void setRadius(int r){radius = r;
    }
    

(2)get方法

  • 功能是取得属性变量的值

  • get方法名以“get”开头,后面是实例变量的名字(首字母大写)

  • 例如:

    public int getRadius(){return radius;
    }
    

3.this关键字

  • 1.普通的直接引用
    this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。

  • 2.形参与成员名字重名,用 this 来区分
    如果方法内的局部变量(包括形参)名与实例变量名相同,则方法体内访问实例变量时需要this关键字

    public void setRadius(int radius){this.radius = radius;
    }
    

二、对象初始化和回收

• 对象初始化
系统在生成对象时,会为对象分配内存空间,并自动调用构造方法对实例变量进行初始化
• 对象回收
对象不再使用时,系统会调用垃圾回收程序将其占 用的内存回收

1.对象初始化

构造方法用来初始化对象,每个类都需要有构造方法

  • 方法名与类名相同;
  • 不定义返回类型;
  • 通常被声明为公有的(public); • 可以有任意多个参数;
  • 主要作用是完成对象的初始化工作;
  • 不能在程序中显式的调用;
  • 在生成一个对象时,会自动调用该类的构造方法为新对象初始化;
  • 若未显式声明构造方法,编译器隐含生成默认的构造方法。
  • final实例变量可以在类中定义时给出初始值,或者在每个构造方法结束之前完成初始化; final类变量必须在声明的同时初始化。

(1)默认构造方法

  • 没有参数(内部类除外),方法体为空;
  • 使用默认的构造方法初始化对象时,如果在类声明中没有给实例变量赋初值,则对象的属性值为零或空;
  • 一旦定义了自己的构造方法,默认构造方法就会失效。

(2)自定义构造方法与方法重载

一个类中有两个及以上同名的方法,但参数表不同,这种情况就被称为方法重载。在方法调用时,可以通过参数列表的不同来辨别应调用哪一个方法。

  • 只要显式声明了构造方法,编译器就不再生成默
    认的构造方法。
  • 也可以显式声明无参数的造方法,方法体中可以
    定义默认初始化方式。
//为BankAccount声明一个有三个参数的构造方法
public BankAccount(String initName, int initAccountNumber, float initBalance) { ownerName = initName; accountNumber = initAccountNumber; balance = initBalance;
}
//假设一个新帐号的初始余额可以为0,则可增加一个带有两个参数的构造方法
public BankAccount(String initName, int initAccountNumber) { ownerName = initName; accountNumber = initAccountNumber; balance = 0.0f;
}
//无参数的构造方法——自定义默认的初始化方式
public BankAccount() { ownerName = ""; accountNumber = 999999; balance = 0.0f;
}

声明构造方法时使用this关键字:

  • 可以使用this关键字在一个构造方法中调用另外的构造方法;
  • 代码更简洁,维护起来也更容易;
  • 通常用参数个数比较少的构造方法调用参数个数最多的构造方法
public BankAccount() { this("", 999999, 0.0f);
}
public BankAccount(String initName, int initAccountNumber) { this(initName, initAccountNumber, 0.0f);
}
public BankAccount(String initName, int initAccountNumber,float initBalance) { ownerName = initName; accountNumber = initAccountNumber; balance = initBalance;
}

2.内存回收

  • 当一个对象在程序中不再被使用时,就成为一个无用对象,将在必要时被自动回收
  • Java运行时系统通过垃圾收集器周期性地释放无用对象所使用的内存。
  • Java运行时系统会在对对象进行自动垃圾回收前,自动调用对象的finalize()方法。

(1)垃圾收集器:

  • 自动扫描对象的动态内存区,对不再使用的对象做上标记以进行垃圾回收
  • 作为一个后台线程运行,通常在系统空闲时异步地执行。

(2)finalize()方法:

  • 在类java.lang.Object中声明,因此 Java中的每一个类都有该方法:

    protected void finalize() throws throwable
    
  • 用于释放资源。

  • 类可以覆盖(重写)finalize()方法。

  • finalize()方法有可能在任何时机以任何次序执行。

【Java程序设计】类与对象的基本概念(下)相关推荐

  1. 【Java程序设计】类与对象的基本概念(上)

    类与对象的基本概念(上) 文章目录 类与对象的基本概念(上) 一.面向对象的基本概念 (1)面向对象程序设计&结构化程序设计 1.结构化程序设计 2.面向对象程序设计 (2)面向对象方法的特性 ...

  2. JAVA设计一个fan类_北京信息科技大学java语言程序设计-类和对象

    北京信息科技大学java语言程序设计-类和对象 [实验名称]实验2 类和对象 [实验目的] 1.学习和掌握Java创建对象的方法. 2.学习和掌握通过创建对象.使用类的方法. 3.学习和掌握Java类 ...

  3. java/03/类与对象,深入分析类与对象(权限修饰,构造方法和简单java类),数组的定义及使用

    java/03/类与对象,深入分析类与对象(权限修饰,构造方法和简单java类),数组的定义及使用 七十年代,IBM的Smalltalk语言最先推广面向对象,后来C语言变为C++,后来C++又产生了J ...

  4. 【清华大学-郑莉教授】C++语言程序设计 类与对象

    [清华大学-郑莉教授]C++语言程序设计 类与对象 面向对象程序设计的基本特点 类与对象的基础概念和语法 类和对象 构造函数和析构函数 默认构造函数 委托构造函数 复制构造函数 右值引用 移动构造函数 ...

  5. java面向对象-类和对象

    Java面向对象笔记 文章目录 Java面向对象笔记 java面向对象 类和对象 什么是类 定义 创建和使用 公式 构造方法 什么是构造方 怎么定义和使用构造方法 实列 This关键字 什么是成员变量 ...

  6. java演练 类与对象 给我一个数字还你一个字符串

    java演练 类与对象 给我一个数字还你一个字符串 视频 https://www.ixigua.com/i6870502014800003598/ 代码 类 public class Game {pu ...

  7. java学习--类与对象

    文章目录 java学习--类与对象 类的定义与对象的使用 类的私有成员的使用 java学习–类与对象 类的定义与对象的使用 类的定义与对象的使用 类的定义步骤: public 类名: //定义成员变量 ...

  8. java程序设计_Java程序设计-类和对象(笔记)

    1)类(Class)和对象(Object)是面向对象的核心概念. 类是对一类事物的描述,是抽象的.概念上的定义 对象是实际存在的该类事物的每个个体,因而也称为实例(instance). 2)" ...

  9. Java复习(二)类与对象的基本概念

    2.1面向对象的程序设计方法概述 对象 程序中: 一切皆是对象 都具有标识,属性和行为 通过一个或多个变量来保存其状态 通过方法实现他的行为 类 将属性及行为相同或相似的对象归为一类 类可以看成是对象 ...

最新文章

  1. 计算机在医疗方面的应用与前景,计算机在医疗卫生领域应用现状及前景.docx
  2. linux剧集nfo生成器,精彩LINUX软件推荐
  3. php content-type: multipart/mixed,{error:invalid multipart format} 这是什么原因,我已经在HEADER中设置了Content-...
  4. 如何识别是三层交换机还是二层交换机
  5. 干货:调度算法的价值与阿里的应用实践(内有赛事福利)
  6. 计算机c盘丢失,电脑C盘丢失的视频文件怎么恢复?方法讲解,轻松搞定
  7. eclipse maven打包_maven的通俗易懂的用法
  8. 新手学vue还是react?
  9. rango php,韩天峰(Rango)的博客
  10. 编程范式:命令式编程(Imperative)、声明式编程(Declarative)和函数式编程(Functional)...
  11. 同步手绘板——关于/dev/graphics/fb0权限的获取
  12. 计算机更新过后cad,CAD2022更新了什么?具有哪些新功能?
  13. JSP还有必要学吗 这篇文章告诉你
  14. 新白娘子传奇中掩藏的秘密!!白素贞的身世之谜!
  15. L2-016 愿天下有情人都是失散多年的兄妹
  16. 山重水复疑无路,柳暗花明又一村。---找工作感想
  17. 【原创】技术员 Ghost Win10 1703 x64 纯净版 2017
  18. usaco Typo
  19. CAD学习之CASS快捷键
  20. ROS自主驾驶割草机

热门文章

  1. html5文本与段落简介,美化html段落文本 Ⅰ
  2. python灰度处理_python 简单图像处理(14) 灰度图腐蚀和膨胀,开运算、闭运算...
  3. mysql 执行计划 视频_实战讲解MySQL执行计划,面试官当场要了我
  4. Java中找出s字符串的回文_给定一个字符串 s,找到 s 中最长的回文子串。
  5. java hasnext_java hasNext()使用实例解析
  6. mysql startswith_Java startsWith()方法
  7. matlab gui输入数据库,从数据库值填充Matlab GUI列表框
  8. mysql join 组合索引,图文详解MySQL中两表关联的连接表如何创建索引
  9. 压力测试和负载测试区别_性能测试vs压力测试vs负载测试
  10. python字符串格式化 说明符顺序_python实践分享:格式化字符串时使用.format方式还是“%”...