Java学习笔记 类的特性:拓展知识与案例

2023-11-01

1.this的使用

使用场合:从一个构造方法调用到另一个构造方法
作用:缩短程序代码,减少开发程序时间
规则:通过关键字this来调用
this必须写在构造方法第一行位置

在圆柱体类Cylinder里,用一个构造方法调用另一个构造方法

class Cylinder{
    private double radius;
    private int height;
    private double pi = 3.14;
    String color;
    public Cylinder(){
        this(2.5,5,"红色");
        System.out.println("无参构造方法被调用了");

    }
    public Cylinder(double r,int h,String str){
        System.out.println("有参构造函数被调用了");
        radius = r;height = h;color = str;
    }
    double area(){
        return pi*radius*radius;
    }
    double volume(){
        return area()*height;
    }

}

public class This_text {
    public static void main(String[] args) {
        Cylinder volu = new Cylinder();
        System.out.println("底面积="+volu.area());
        System.out.println("体积="+volu.volume());
    }
}

在这里插入图片描述

2.公共构造方法与私有构造方法

一般情况:构造方法是public,创建对象时,在类的外部被系统自动调用。
特殊情况:若被声明为private,则无法在所在类外的地方被调用,但在该类内部可以调用

class Cylinder{
    private double radius;
    private int height;
    private double pi = 3.14;
    String color;
    private  Cylinder(){
        System.out.println("无参构造方法被调用了");

    }
    public Cylinder(double r,int h,String str){
        this();
        radius = r;height = h;color = str;
    }
    double area(){
        return pi*radius*radius;
    }
    double volume(){
        return area()*height;
    }
}

public class This_text {
    public static void main(String[] args) {
        Cylinder volu = new Cylinder(2.5,5,"红色");
        System.out.println("底面积="+volu.area());
        System.out.println("体积="+volu.volume());
    }
}

在这里插入图片描述

3.对象的赋值

对象是引用变量,对象名中保存的是对象在内存中首地址。
对象被赋值,意味着首地址相同
对象的比较亦然

class Cylinder {
    private double radius;
    private int height;
    private static double pi = 3.14;

    public Cylinder(double r, int h) {
        radius = r;
        height = h;
    }

    public void setCylinder(double r, int h) {
        radius = r;
        height = h;
    }//这里展示了构造方法和set方法这两种对private的两种赋值方式

    double volume() {
        return pi * radius * radius * height;
    }
}

public class This_text {
    public static void main(String[] args) {
        Cylinder volu1, volu2;
        volu1 = new Cylinder(2.5, 5);
        System.out.println("圆柱体1的体积=" + volu1.volume());
        volu2 = volu1;
        volu2.setCylinder(1.0, 2);
        System.out.println("圆柱体1的体积=" + volu1.volume());
    }
}

在这里插入图片描述
这里会发现圆柱体1的体积发生了变化

		Cylinder volu1, volu2;
        volu1 = new Cylinder(2.5, 5);
        System.out.println("圆柱体1的体积=" + volu1.volume());
        volu2 = volu1;
        volu2.setCylinder(1.0, 2);
        System.out.println("圆柱体1的体积=" + volu1.volume());

所以当volu2=volu1时,其实volu2和volu1是指向同一个地址所以在volu2.setCylinder(1.0, 2)后再输出volu1d的体积时结果发生了改变
在这里插入图片描述

4.关于main方法

main方法的访问权限为何必须为public,static?
–JVM需要在类外调用main方法,所以访问权限必须是public
–由于JVM需要在类外调用main方法,而且JVM运行在系统开始执行的一个程序前,并没有创建main方法所在的类的实例,所以只能通过类名来调用main方法作为程序的吐口,因而该方法必须是static。

public class Text {
    public static void main(String[] args) {
        System.out.println("是静态方法不需要创建实例就能输出");
    }
    public inferior(){
		System.out.println("不是静态方法得创建实例才能输出");
	}
}

例:普通调用方法得必须对方法创建实例Text ex = new Text();
ex.infetior()才能调用方法,而静态的方法直接Text.main()就可以直接调用了。而JVM并没有创建main方法所在的类的实例,所以main方法必须是静态

5.statict拓展

在这里插入图片描述

错误原因:静态方法只能访问static成员变量,或static方法(静态成员不能访问实例成员)
修改:将myString改为类变量

class Student{
    String name;
    String number;
    double sum;
    //实例变量:定义在类中但在任何方法之外。
    double total(){
        sum = 40;
        return sum;
        //这里能引用是因为total是实例方法所以可以访问实例变量
    }
}

类成员(静态成员)不能访问实例成员

public class StaticTest {
    //主类中可以添加成员变量
    public static void main(String[] args) {
        int 100;//这里可以引用是因为i是方法的局部变量,非成员变量
        System.out.println(i);
    }
}

6.编程拓展

1.哪些变量需要定义为静态的呢?
具有唯一性的变量,独立于任何具体的实例
如pi,论坛在线人数,考试及格人数,点赞人数等
依托对象,强调个体性的变量,为实例变量
如每个Student对象有各自的属性(实例变量)
姓名,年龄,考试成绩等
2.变量汇总与分析,根据变成需求,恰当地定义变量
在这里插入图片描述
3.面向对象三大特征:封装,继承,多态
什么是封装
将对象的状态信息隐藏在对象内部,不允许外部程序直接访问,而是通过该类所提供的方法来实现对内部信息的操作和访问
封装的实现:访问控制符 例:private,public
**要求:**学会编写封装良好的类
该暴露的暴露该隐藏的隐藏

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java学习笔记 类的特性:拓展知识与案例 的相关文章

随机推荐

  • Spring IOC容器初始化过程 源码分析

    本文主要记录Spring容器创建 源码分析过程 首先贴上一张时序图 好久没画 忘的差不多了 画的不好 可以凑合看一下 接下来 贴上一份测试代码 这里使用AnnotationConfigApplicationContext来初始化Spring
  • upload-labs(11~12)通关笔记

    环境准备 1 php版本 lt 5 3 4 2 magic quotes gpc Off php我用的是upload labs官方推荐的5 2 17 搭建平台用的是phpStudy2018 修改magic quotes gpc magic
  • Java实现邮件发送功能

    确定发件人邮箱和密码 某些邮箱服务器为了增加邮箱本身密码的安全性 给 SMTP 客户端设置了独立密码 有的邮箱称为 授权码 对于开启了独立密码的邮箱 这里的邮箱密码必需使用这个独立密码 授权码 确认发件人邮箱的 SMTP 服务器地址 发件人
  • python人工智能:模型关系(泉舟时代)

    1 授课 林德尧 泉舟时代 未来城市技术总监 2 主要文章内容 通常下 Flask SQLAlchemy 的行为就像一个来自 declarative 扩展配置正确的 declarative 基类 因此 我们强烈建议您阅读 SQLAlchem
  • 《机器学习》Chapter 5 神经网络笔记

    机器学习 Chapter 5 神经网络 1 神经元模型 神经元接收到来自n个其它神经元传递过来的输入信号 这些输入信号通过带权重的连接进行传递 神经元接收到的总输入值将与神经元的阈值进行比较 然后通过激活函数处理以产生神经元的输出 2 感知
  • 使用css去除input边框

  • 不同CUDA版本对应的最小GPU运算能力和最低兼容驱动

    The minimum compute capability for various CUDA versions CUDA Version Minimum Compute Capability Default Compute Capabil
  • 使用 Python 进行游戏脚本编程 [翻译]

    翻译自 GDC 2002 上 Bruce Dawson 的 Game Scripting in Python 简单介绍 Python 作为游戏脚本语言的优势 原文 Game Scripting in Python 作者 Bruce Daws
  • 机器学习的环境搭建流程

    一 需要 python解释器 pycharm anaconda 机器学习需要的第三方包 二 流程 1 先确定进行机器学习需要的主要包之间的依赖关系及对应的python版本 建议python版本不要太高 3 6或者3 7比较好 因为许多第三方
  • 后端进阶之路——综述Spring Security认证,授权(一)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 后端进阶之路 文章
  • 【华为OD机试真题 Python】最左侧冗余覆盖子串

    前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun09
  • 简单的编写一个通讯录并可进行增删改查功能

    改通讯录分为三个模块 test c contact c contact h 下面依次给我相应的代码 有想问的或者觉得有帮助的帮忙点个赞和关注一下哈 蟹蟹 主要用到了结构体指针来进行对结构体的修改查找之类的算法 test c define C
  • iOS 底层解析weak的实现原理

    参考地址 http www cocoachina com ios 20170328 18962 html weak 实现原理的概括 Runtime维护了一个weak表 用于存储指向某个对象的所有weak指针 weak表其实是一个hash 哈
  • 深度学习之---yolov1,v2,v3详解

    写在前面 如果你想 run 起来 立马想看看效果 那就直接跳转到最后一张 动手实践 看了结果再来往前看吧 开始吧 一 YOLOv1 简介 这里不再赘述 之前的我的一个 GitChat 详尽的讲述了整个代码段的含义 以及如何一步步的去实现它
  • 【数字转换为汉字】

    项目场景 通常这种情况下 后端返回是数组 如果想要把数组这样显示出来 就需要把数组的索引值转换为汉字显示 如 11显示为十一 21显示为二十一 实现代码讲解 NoToChinese num 如果传递过来的值不是数据类型 则直接报错 if d
  • 蓝桥杯C/C++省赛:振兴中华

    目录 题目描述 思路分析 AC代码 题目描述 小明参加了学校的趣味运动会 其中的一个项目是 跳格子 地上画着一些格子 每个格子里写一个字 如下所示 从我做起振 我做起振兴 做起振兴中 起振兴中华 比赛时 先站在左上角的写着 从 字的格子里
  • Vue_shop(Element-UI)优化打包上线

    自己从头到尾打的源码链接 https gitee com bai xianger vue shop 一 项目的打包优化 1 网页顶部添加进度条效果 安装运行依赖nprogresst 链接 https github com rstacruz
  • 1053. 交换一次的先前排列

    转载请声明地址四元君 1053 交换一次的先前排列 题目难度 Medium 给你一个正整数的数组 A 其中的元素不一定完全不同 请你返回可在 一次交换 交换两数字 A i 和 A j 的位置 后得到的 按字典序排列小于 A 的最大可能排列
  • 无向图的广度优先遍历和深度优先遍历

    public class MGraph private char vexs 顶点 private int edge 存储边的二维数组 private int arcNum 边的数目 private boolean visited 访问标志数
  • Java学习笔记 类的特性:拓展知识与案例

    1 this的使用 使用场合 从一个构造方法调用到另一个构造方法 作用 缩短程序代码 减少开发程序时间 规则 通过关键字this来调用 this必须写在构造方法的第一行位置 在圆柱体类Cylinder里 用一个构造方法调用另一个构造方法 c