《Java程序设计基础》 第7章手记

本章主要内容 - 类的私有成员与公共成员 - 方法的重载 - 构造方法 - 类的静态成员 - 对象的应用

本节课知识性内容很多,这里贴了核心内容,如果你看不懂,请在原书上查看具体的例子。最后会贴实验答案。

类的私有成员与公共成员

如果在类的成员声明加上修饰符private,则就无法从类的外部访问该类内部的成员,而只能被类自身访问和修改,而不能被任何类或者该类的子类来获取或引用。

如果在类的成员声明前加上修饰符public,则表示该成员可以被所有其他的类访问。由于public修饰符会造成封装性安全性的下降,所以建议少用。

如果类的成员声明前缺省修饰符,则介于两者之间,表示该成员只能被同一个包中的类所访问和调用。

方法的重载

方法的重载是实现“多态”的一种方法。

方法的重载是指在同一个类内具有相同名称的多个方法,这多个方法如果参数个数不同,或者参数个数相同,但类型不同,则这些同名的方法具有不同的功能。

C#是通过虚方法来实现多态的,具体可以参考之前的博客《C#多态》。

构造方法

构造方法是一种特殊的方法,它是在对象被创建时初始化对象的成员的方法。

它的特殊性体现在: 1. 构造方法的方法名必须和类名相同 2. 构造方法没有返回值,但不能加void 3. 构造方法的作用主要是完成对类对象的初始化工作 4. 构造方法一般不能由编程人员显式地调用,而是用new来调用 5. 在创建一个类的对象的同时,系统会自动调用该类的构造方法为对象初始化。

如果没有定义构造方法,Java编译器会自动生成一个构造方法: 类名() { },即什么都不做的空语句。

构造方法的重载和普通方法的重载是一样的,从一个构造方法中调用另一个构造方法可以使用this语句:this(参数表);

构造方法区分public和private,因为其是类的成员,所有跟上文讲得类成员的私有和共有是一样性质的。

类的静态成员

类的成员(变量或者方法)前如果加了static,表示该成员是静态成员,否则是实例成员。

静态变量,又称类变量,隶属于类而不是类的某个具体成员。静态变量是一个公共的存储单元,任何一个类的对象访问它时,都是同一个值,这一点类似于C语言的static变量。

静态变量既可以使用类来调用,也可以使用对象来调用。

静态方法

  1. 非static的方法是属于某个对象的方法,在这个对象创建时,对象的方法有属于自己专用的代码段,而static方法是属于整个类的,它在内存中的代码将被所有的对象所共用,而不能被任何一个对象共用。
  2. 由于静态方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员,而只能处理整个类的成员,即static方法只能访问static成员变量或调用static成员方法。或者说,在静态方法中不能访问实例变量和实例方法。
  3. 在静态方法中不能使用this和super。因为this是代表调用该方法的对象,但现在“静态方法”既然不需要对象来调用,this也自然不应存在于“静态方法”内部,关于super关键字的用法将在第八章讨论。
  4. 调用静态方法时,可以使用类名直接调用,也可以用某一个具体的对象来调用。

静态初始化器

对象的应用

对象是一种引用型的变量,是“类类型的值”。引用型变量实际上保存对象在内存中的地址,所有对象名可以进行赋值和比较操作,这一点类似于C语言的指针。

需要注意的是,new一个对象是在内存中申请新的空间并返回申请到的地址,而对象的赋值是将引用变量指向内存中的同一个地址。

对象的数组即以对象为组成元素的数组,与其他数组操作相同。

实验代码

实验6_1
//filename: Student.java
class Student
{
    int age;
    String name;
    public Student(int a, String n)
    {
        age = a;
        name = n;
    }
    public Student()
    {
        this(20, "简静文");
    }
    public Student(int a)
    {
        this(a, "贾樟柯");
    }
}
//filename: Shiyan6_1
public class Shiyan6_1
{
  public static void main(String[] args)
  {
        Student s1 = new Student();
        Student s2 = new Student(13);
        Student s3 = new Student(12, "江文涛");

        System.out.println(s1.name +" " +s1.age);
        System.out.println(s2.name +" " +s2.age);
        System.out.println(s3.name +" " +s3.age);
   }
}
实验6_2
//filename: Myplus.java
class Myplus
{
    public int plus(int a,int b)
    {
        return a + b;
    }
   public int plus(int a, int b, int c)
    {
        return a + b + c;
    }
    public int plus(int a, int b,int c,int d)
    {
        return a + b + c + d;
    }
}
//filename: Shiyan6_2
class Shiyan6_2
{
    public static void  main(String[] args)
    {
        Myplus p1 = new Myplus();

        System.out.println(p1.plus(1, 2));
        System.out.println(p1.plus(1, 2, 3));
        System.out.println(p1.plus(1, 2, 3, 4));
    }
}

知乎: Solo | weibo@从流域到海域

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-07(01).总结private,this,封装,static,成员方法变量,局部变量匿名对象

1:成员变量和局部变量的区别(理解) (1)在类中的位置不同 成员变量:类中方法外 局部变量:方法定义中或者方法声明上 (2)在内存中的位置不同 成...

38040
来自专栏纯洁的微笑

一个高频面试题,考考大家对 Java String 常量池的理解。

作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三个问题,去理解字符串...

22620
来自专栏marsggbo

python sorted函数

python列表排序  简单记一下python中List的sort方法(或者sorted内建函数)的用法。  关键字:  python列表排序 python...

25770
来自专栏杨熹的专栏

Day 1-Java-imooc-6.方法

课程地址:http://www.imooc.com/learn/85 总结图片来自 http://www.imooc.com/article/10535 ? -...

355110
来自专栏玄魂工作室

Python学习:类和实例

-----------------------------------------------------

17530
来自专栏java学习

Java每日一练(2017/6/19)

题目要求 本期题目: (单选题) 1、对于上面这段代码,以下说法正确的是: publicclassTest { publicintx; pu...

36050
来自专栏文武兼修ing——机器学习与IC设计

JavaScript入门笔记(5)函数

函数 函数就是最基本的一种代码抽象的方式 函数的声明与调用 JavaScript中声明函数的方法有两种 声明一个有名称的函数,使用类似C语言的functi...

36180
来自专栏前端儿

JS中 toString() & valueOf()

toString()可以看做是把一个数据转换成了相应字符串的形式,安照这个转换规则中

18410
来自专栏微信公众号:Java团长

Java基础11 对象引用

我们之前一直在使用“对象”这个概念,但没有探讨对象在内存中的具体存储方式。这方面的讨论将引出“对象引用”(object reference)这一重要概念。

9020
来自专栏开发与安全

从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字

一、构造函数、默认构造函数 (1)、构造函数 构造函数是特殊的成员函数 创建类类型的新对象,系统自动会调用构造函数 构造函数是为了保证对象的每个数据成员都...

28100

扫码关注云+社区

领取腾讯云代金券