Java基础十一(private、this关键字和构造函数)

2023-11-13

私有private关键字
成员变量是否一定需要全部向外界访问? 如果需要向外界访问 则public,如不需要向外界访问 则private,但是一般而言 都会将成员变量私有化,给成员变量+private是彻底不想给外界类中不需要对外提供的内容都私有化,包括属性和行为。
注意:私有仅仅是封装的体现形式而已

访问器
给成员变量加了private关键字外界就不能访问和更改,但是对于一些特殊情况我们又需要让外界访问更改,按照之前所学习的封装的原理,隐藏后,还需要提供访问方式。只要对外提供可以访问的方法,让其他程序访问这些方法。同时在方法中可以对数据进行验证。
一般对成员属性的访问动作:赋值(设置 set),取值(获取 get),因此对私有的变量访问的方式可以提供对应的 setXxx或者getXxx的方法。

成员变量初始化
对象在堆中创建 其成员变量有默认初始化
默认初始化–显式初始化–针对性初始化

构造函数
当我们需要在创建对象的同时赋给对象的属性值时,就需要面向对象中比较重要的一个方法——构造函数,构造函数就是为对象创造时用的函数,即就是对象创建时要执行的函数。所以在new对象时,知道其执行的构造函数是什么,就可以在执行这个函数的时候给对象进行属性赋值。

构造函数的三个特殊性 :

  • 构造函数必须具备和所在类相同的名字 。
  • 构造函数没有返回值类型 , 甚至连 void 也没有 。
  • 构造函数是在创建一个对象使用new 操作符时调用的 。 构造函数的作用是初始化对象 。
  • 和所有其他方法一样 , 构造方法也可以重载 ( 也就是说 , 可以有多个同名的构造方法 , 但它们要有不同的签名 ) , 这样更易于用不同的初始数据值来构造对象 。

注意:构造方法在使用new 操作符创建对象的时候被调用 。
构造函数的格式

修饰符 构造函数名(参数列表){
}

如果一个类里面没有定义任何构造函数则会有一个隐藏的无参构造函数

权限修饰符 类名(参数列表){
    
    return;
}

如果一旦定义出其他的构造函数 则默认的无参构造函数不存在了!所以建议一般把无参构造函数都写出来
写一个构造函数例子:

class  Dog
{
    //Dog的成员属性age和name
    private String name;
    private int age;
    //Dog的构造函数,拥有参数列表
    public Dog(int a , String nm)
    {
        //接受到创建对象时传递进来的值,将值赋给成员属性
        age = a;
        name = nm;
    }
    Dog的成员函数speak
    public void speak()
    {
        System.out.println("name="+name+",age="+age);
    }
}

写一次测试类

class DogTest
{
    public static void main(String[] args)
    {
        //创建Dog对象,并明确对象的年龄和姓名
        Dog wangcai= new Dog(3,"旺财");
        wangcai.speak();
    }
}

构造函调用内存图解
上述代码的内存图解:
在这里插入图片描述
1、主函数进栈
2、先执行第一句的右半部分 new Dog(3,“旺财”);
3、在堆内存中随机给Dog分配一片区域,区域地址位0X666,并给成员变量默认初始化。
4、构造函数进栈执行构造函数,就会把 3,“旺财” 赋给成员变量age和name,执行结束,构造函数弹栈。
5、Dog对象创建完成,把0X666赋给wangcai。

this关键字
关键字 this 引用对象自身 。 它也可以在构造方法内部用于调用同一个类的其他构造方法 。

  • 构造函数之间的调用可以通过this关键字来完成
  • this 关键字可以用于引用类的隐藏數据域 。
  • 关键字 this 可以用于调用同一个类的另一个构造方法 。

例如上面Dog的构造函数我们就可以写为:

public Dog(int age , String name)
    {
        this.age = age;
        this.name = name;
    }
public Dog()
    {
      this(3,"旺财");
    }

第一个构造函数中的两个this用于引用所构建的对象的隐藏数据域 age和name,在第二个构造方法中,this(3,“旺财”) 这一行调用第一个构造方法 。

当在函数中出现了局部变量和成员变量同名的时候,我们也可以在成员变量名前面加上this来区别方法中成员变量和局部变量

构造函数和成员函数的区别
1、外界调用角度

  • 构造函数只能在创建对象时调用,对象创建完毕之后不能已创建的对象调用
  • 成员函数只能在对象创建之后调用,可以重复的

2、返回值角度

  • 构造函数不需要返回值
  • 成员函数可需可不需

3、权限修饰符

  • 构造函数可以用任意权限修饰符
  • 成员函数也可以用任意权限修饰符

4、内部调用

  • 构造函数可以调用成员函数 ,但是这个成员函数一般不会当做对象行为去看待
  • 构造函数可以调用构造函数,this(参数列表) 调用当前类中的其他构造函
  • 构造函数之间不能相互调用,会无限递归而且this(…)必须在第一句!防止值的覆盖
  • 成员函数可以调用成员函数
  • 成员函数不能调用构造函数,但是可以new
    (构造函数可以和成员函数重名!)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java基础十一(private、this关键字和构造函数) 的相关文章

  • Java接口以及static和final关键字

    Java接口以及static和final关键字 一 static 二 final 三 让final元素可以初始化 不用固定赋值 四 接口 五 抽象方法 六 接口能够创建对象吗 匿名内部类 七 另一实例 开锁 一 static static代
  • Java操作Excel文件

    创建一个Excel文件 public static void creatExcelFile String filepath Workbook wb new XSSFWorkbook try FileOutputStream fileOut
  • Java IO流 缓冲流-BufferedInputStream、BufferedOutputStream

    首先抛出一个问题 有了InputStream为什么还要有BufferedInputStream BufferedInputStream和BufferedOutputStream这两个类分别是FilterInputStream和FilterO
  • 必须掌握的hashcode()方法

    一 hashcode是什么 1 hash和hash表是什么 想要知道这个hashcode 首先得知道hash 通过百度百科看一下 hash是一个函数 该函数中的实现就是一种算法 就是通过一系列的算法来得到一个hash值 这个时候 我们就需要
  • 接口的加密解密

    接口加密 1 接口参数加密 基础加密 2 接口参数加密 接口时效性验证 一般达到这个级别已经非常安全了 3 接口参数加密 时效性验证 私钥 达到这个级别安全性固若金汤 4 接口参数加密 时效性验证 私钥 Https 我把这个级别称之为金钟罩
  • mysql如何一秒插入10万条数据

    当我们需要批量插入或者更新记录时 可以采用Java的批量更新机制 该机制允许多条语句甚至一次性提交给数据库处理 通常情况下比一句一提交处理更有效率 jdbc处理批量提交有三个方法 需要注意的是 这三种方法都要和PreparedStateme
  • Java基础——strictfp关键字

    关键字strictfp是strict float point的缩写 指的是精确浮点 它是用来确保浮点数运算的准确性 JVM在执行浮点数运算时 如果没有指定strictfp关键字 此时计算结果可能会不精确 而且计算结果在不同平台或厂商的虚拟机
  • 集合addAll方法使用存在的问题。

    集合addAll 方法的时候 这里里有两个集合 集合2要拿到集合1中的元素 然后对集合2进行removeAll方法 结果集合1中的值也没有了 只是因为listTwo listOne 只是把集合1的引用给了集合2 集合1和集合2的引用是指向同
  • 5、面向对象的设计思想

    一 面向对象设计思想 1 1 面向过程的设计思想与面向对象的设计思想 例如 我要去新疆 面向过程 我开车 我挂挡 我踩油门 我过河北 我过陕西 面向对象 我命令车去新疆 车怎么去不关我事 信息封装在这这个类的内部 我不用去了解车整个开动的过
  • Java中变量的作用域【Java基础】

    最近在看 Thinking in Java 想把Java基础再巩固一下 在博客上遇到的以前没注意到的知识点或者较难的知识点记录下来 与大家分享 Java中的基本类型变量的作用域为 int x 1 变量x的作用域只在大括号内 System o
  • javaSE进阶1之static用法

    JavaSE进阶 静态关键字 static static关键字的作用 成员变量分类 静态成员变量 实例成员变量 static修饰成员变量内存原理 static 修饰成员方法的基本用法 成员方法的分类 static修饰成员方法内存原理 sta
  • 【Java】Java中的String类

    文章目录 一 认识 String 类 二 String 类的常用方法 2 1 构造方法 2 2 String 类对象之间的比较 2 3 字符串查找 2 4 字符串的转换 2 5 字符串替换 2 6 字符串拆分 2 7 字符串截取 2 8 字
  • ThreadLocal学习

    1 threadLocal图解 java lang ThreadLocal类实现了线程的本地存储 ThreadLocal的内部实现 ThreadLocal的内部实现包括一个类似HashMap的对象 这里称之ThreadLocalMap Th
  • 各种注释总结

    jsp注释 html注释
  • 对接百度api的工具类:Base64Util,FileUtil,HttpUtil

    对接百度api的工具类 Base64Util FileUtil HttpUtil package com baidu ai aip utils Base64 工具类 public class Base64Util private stati
  • Java学习13:面向对象-多态(Polymorphism)内存分析图解

    1 概述 多态是Java面向对象三大特征之一 多态 Polymorphism 顾名思义 即对象具有多种形态 具体而言 是编译时类型 运行时类型 编译时类型 由声明时的类型决定 一般是父类 运行时类型 由实际对应的对象类型决定 具体是哪个子类
  • SM2加解密、签名验签

    导论 SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法 在我们国家商用密码体系中被用来替换RSA算法 国产SM2算法 是基于ECC的 但二者在签名验签 加密解密过程中或许有些许区别 目前鄙人还不太清楚 后期有机会的话
  • IDEA 编写JDBC 第一个示例

    知心惟有雕梁燕 自来相伴 东风不管琵琶怨 落花吹遍 一 新建一个Module 二 在此Module下新建一个包 在包再建一个包 命名为lib 三 导入mysql驱动 四 将mysql驱动添加到项目的库里 五 代码实现 package Con
  • 将list集合的元素按照添加顺序的倒序进行排列取出

    将list集合的元素按照添加顺序的倒序进行排列取出 方法1 list add 0 object List
  • 详解toLowerCase(判断字符串相等)

    一 toLowerCase 函数简介 toLowerCase 是一个在多个编程语言中都存在的字符串方法 它的作用是将字符串中的所有大写字母转换为对应的小写字母 常用于文本处理 搜索和比较等情况 以确保字符串的一致性和非大小写敏感的操作 二

随机推荐