【Java学习笔记(三-2)】处理对象&类成员

处理对象

打印对象和toString()方法

  • Java对象都是Object类的实例,都可以直接调用该类中定义的方法,这些方法提供了处理Java对象的通用方法

  • toString()方法是Object类里的一个实例方法,所有的Java类都是Object类的子类,因此所有的Java对象都具有该方法

    • 例如: System.out.println(o);//o是一个Object类实例化的空对象

      输出结果为:java.lang.Object@6996db8,多次运行后,@后面的8位十六进制数字会发生变化,事实上使用这种方法输出Object对象时,实际上输出的是Object对象的toString()方法的返回值,即上面的代码和下面的代码效果是一样的:System.out.println(o.toString());

  • 此方法通常用于实现这样的功能:当程序员直接打印该对象时,系统将会输出该对象的“自我描述”信息,用以告诉外界该对象具有的状态信息。Object类提供的toString()方法总是返回该对象实现类的“类名+@+hashCode”值,这个返回值并不能实现真正的“自我描述功能”,因此如果需要自定义类能实现“自我描述”的功能。则可以重写Object类的toString()方法

    • 例如:

      public class Test {
          public static void main(String[] args) {
              Person p = new Person("小明");
              System.out.println(p);
              //输出结果:我叫小明
          }
      }
      
      class Person {
          private String name;
          public Person(String name) {
              this.name = name;
          }
          @Override
          public String toString() {
              return "我叫" + name;
          }
      }
  • 对象之间的比较:见Java学习笔记3-1

类成员

static修饰的成员就是类成员,已经介绍过的类成员有类变量、类方法、静态初始块三个成分,static修饰的类成员属于整个类,并不属于单个实例

理解类成员

  • 类变量属于整个类,当系统第一次准备使用该类时,系统会为该类变量分配内存空间,类变量开始生效,直到该类被卸载,该类的类变量所占有的内存才能被系统的垃圾回收机制回收,也就是说类变量的生存范围几乎等于类的生存范围
  • Java在语法上通过对象名调用类成员,当通过对象来访问类变量时,系统会在底层转换为通过该类来访问对应的类成员,因此即使某个实例为null,也可以通过它访问所属类的类成员,但是为了程序可读性并不推荐这么使用,在此不再赘述
  • 对于static关键字而言,类成员不能访问实例成员

单例(Singleton)类

  • 如果一个类始终只能创建一个实例,则这个类被称为单例类

  • 在一些特殊场景下,要求不允许自由创建该类的对象,而只允许为该类创建一个对象。为了避免其他类自由创建该类的实例,应该把类的构造器使用private修饰,从而把该类的所有构造方法隐藏起来

  • 根据良好的封装性原则:一旦把该类的构造隐藏起来,就需要提供一个public方法作为该类的访问点,用于创建该类的对象,且该方法必须使用static修饰(因为调用该方法之前不存在对象,因此调用该方法的不可能是对象,只能是类)

  • 除此之外,该类还必须缓存已经创建的对象, 否则该类无法知道是否曾经创建过对象,也就无法保证只创建一个对象。为此该类还需要使用一个成员变量来保存曾经创建的对象,因此该成员变量需要被上面的静态方法访问,故该成员变量也必须使用static修饰

  • 单例模式三要素

    • 构造方法私有化
    • 静态属性指向实例
    • public static的getInstance方法,返回第二部的静态属性
  • 饿汉式与懒汉式单例模式

    • 区别

      • 饿汉式

        • private static 类名 instance = new 类构造方法();
        • 提供一个getInstance方法返回instance
      • 懒汉式

        • private static 类名 instance;此时instance指向null
        • 提供一个getInstances方法返回instance,此时应该加入判断语句,判断null==Instance,则instance==new 类构造方法();

人已赞赏
DemoJava编程语言

【Java Demo】②.控制台五子棋

2020-4-1 21:59:10

Java编程语言

【Java学习笔记(三-3)】final修饰符

2020-4-15 18:22:40

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索