zoukankan      html  css  js  c++  java
  • 谈谈Java中的类

    1、先谈谈作用域的概念,C或者C++老手可能觉得没必要,但是请不要这样,因为在Java中,作用域和C++中有点不一样,C和C++能将一个变量“隐藏”在一个更大的作用域里;

    C++的程序

    {
      int x = 10;
      {
        int x = 20; 

        cout<<x<<endl;
      }

      cout<<x<<endl;
    }

         程序的输出结果是20和10;

    Java程序:

    {
      int x = 10;
      {
        int x = 20; /* 此行出错*/
      }
    }

    Java的设计者认为这样做使程序产生了混淆

    1.Java中类的定义:

    class [类名]

    {

    /*类的主体*/

    }

    2.类中的字段(数据成员)

    class DataOnly { int i; float f; boolean b; }
    (1).每个对象都为自己的数据成员保有存储空间;数据成员不会在对象之间共享;
    (2).主成员的默认值
    若某个主数据类型属于一个类成员,那么即使不明确(显式)进行初始化,也可以保证它们获得一个默认值,
    这点与C++的处理不同,C++会给这个成员一个随机值;
    若某个主数据类型不属于一个类成员,在函数的局部定义的,则处理是与C++一样的,有随机值,但是如果程序员自己不处理的话,
    编译的时候会出错,C++只是出现没有初始化变量的警告;
    (3).静态成员:
    static数据成员,并对其初始化:

    class StaticTest {
    Static int i = 47;
    }

    现在,尽管我们制作了两个StaticTest对象,但它们仍然只占据StaticTest.i的一个存储空间。这两个对象都共享同样的i。请考察下述代码:
    StaticTest st1 = new StaticTest();
    StaticTest st2 = new StaticTest();
    此时,无论st1.i还是st2.i都有同样的值47,因为它们引用的是同样的内存区域。
    有两个办法可引用一个static变量。正如上面展示的那样,可通过一个对象命名它,如st2.i。亦可直接用它的类名引用,而这在非静态成员里是行不通的(最好用这个办法引用static变量,因为它强调了那个变量的“静态”本质)。
    StaticTest.i++;
    其中,++运算符会使变量增值。此时,无论st1.i还是st2.i的值都是48
    3.类中的方法:
    方法的定义:
    返回类型 方法名( /* 自变量列表*/ ) {/* 方法主体 */}
    (1).Java的方法只能作为类的一部分创建
    (2).静态方法:
    class StaticFun {
    static void incr() { StaticTest.i++; }
    }
    从中可看出,StaticFun的方法incr()使静态数据i增值。通过对象,可用典型的方法调用incr():
    StaticFun sf = new StaticFun();
    sf.incr();
    或者,由于incr()是一种静态方法,所以可通过它的类直接调用:
    StaticFun.incr();
    (3).方法的调用:
    假设我们有一个方法名叫f(),它没有自变量,返回的是类型为int的一个值。那么,假设有一个名为a的对象,可为其调用方法f(),则代码如下:
    int x = a.f();
    返回值的类型必须兼容x的类型。
    象这样调用一个方法的行动通常叫作“向对象发送一条消息”。在上面的例子中,消息是f(),而对象是a。面向对象的程序设计通常简单地归纳为“向对象发送消息”
  • 相关阅读:
    贪心 CodeForces 137B Permutation
    贪心 CodeForces 124B Permutations
    数学 SCU 4436 Easy Math
    模拟+贪心 SCU 4445 Right turn
    ACM配置指南
    ACM牛人博客
    ✅问题:Rails.ajax自定义请求
    Jbuilder(3300✨)
    关于keyCode, 键盘代码。 和零散的javascript知识。http://js2.coffee/(转化工具)
    ✅javascript 语法:附加子节点
  • 原文地址:https://www.cnblogs.com/xiaoyunxiao/p/2412019.html
Copyright © 2011-2022 走看看