精华内容
下载资源
问答
  • 你可以使用接口来引入多个类共享常量,这样做只需要简单声明包含变量初始化想要接口就可以了。 如果你一个类中包含那个接口(就是说当你实现了接口时),所有这些变量名都将作为常量看待。这在C/C++...

    你可以使用接口来引入多个类的共享常量,这样做只需要简单的声明包含变量初始化想要的值的接口就可以了。

    如果你的一个类中包含那个接口(就是说当你实现了接口时),所有的这些变量名都将作为常量看待。这与在C/C++中用头文件来创建大量的 #defined 常量或const 声明相似。如果接口不包含方法,那么任何包含这样接口的类实际并不实现什么。

    这就像类在类名字空间引入这些常量作final变量。下面的例子运用了这种技术来实现一个自动的“作决策者”:

    import java.util.Random; 
    interface SharedConstants { 
     int NO = 0; 
     int YES = 1; 
     int MAYBE = 2; 
     int LATER = 3; 
     int SOON = 4; 
     int NEVER = 5; 
    } 
    class Question implements SharedConstants { 
     Random rand = new Random(); 
     int ask() { 
     int prob = (int) (100 * rand.nextDouble()); 
     if (prob < 30) 
     return NO; // 30% 
     else if (prob < 60) 
     return YES; // 30% 
     else if (prob < 75) 
     return LATER; // 15% 
     else if (prob < 98) 
     return SOON; // 13% 
     else 
     return NEVER; // 2% 
     } 
    } 
    class AskMe implements SharedConstants { 
     static void answer(int result) { 
     switch(result) { 
     case NO: 
     System.out.println("No"); 
     break; 
     case YES: 
     System.out.println("Yes"); 
     break; 
     case MAYBE: 
     System.out.println("Maybe"); 
     break; 
     case LATER: 
     System.out.println("Later"); 
     break; 
     case SOON: 
     System.out.println("Soon"); 
     break; 
     case NEVER: 
     System.out.println("Never"); 
     break; 
     } 
     } 
     public static void main(String args[]) { 
     Question q = new Question(); 
     answer(q.ask()); 
     answer(q.ask()); 
     answer(q.ask()); 
     answer(q.ask()); 
     } 
    }
    

    注意该程序利用了Java的一个标准类:Random,该类提供伪随机数。它包含若干个方法。通过这些方法你可以获得你程序所需形式的随机数。该例中,用到了nextDouble( )方法。它返回0.0到1.0之间的随机数。

    该例子程序中,定义了两个类Question和AskMe。这两个类都实现了SharedConstants接口。

    该接口中定义了NO、YES、MAYBE、SOON、LATER和NEVER。每个类中,代码就像自己定义或继承了它们一样直接引用了这些变量。下面是该程序的输出示例。注意每次运行结果不同。

    Later 
    Soon 
    No 
    Yes 
    

    接口可以通过运用关键字extends被其他接口继承。语法与继承类是一样的。当一个类实现一个继承了另一个接口的接口时,它必须实现接口继承链表中定义的所有方法。下面是一个例子:

    // One interface can extend another. 
    interface A { 
     void meth1(); 
     void meth2(); 
    } 
    // B now includes meth1() and meth2() -- it adds meth3(). 
    interface B extends A { 
     void meth3(); 
    } 
    // This class must implement all of A and B 
    class MyClass implements B { 
     public void meth1() { 
     System.out.println("Implement meth1()."); 
     } 
     public void meth2() { 
     System.out.println("Implement meth2()."); 
     } 
     public void meth3() { 
     System.out.println("Implement meth3()."); 
     } 
    } 
    class IFExtend { 
     public static void main(String arg[]) { 
     MyClass ob = new MyClass(); 
     ob.meth1(); 
     ob.meth2(); 
     ob.meth3(); 
     } 
    }
    

    作为一个实验你也许希望移走MyClass中meth1( )的实现。这将导致编译时错误。前面讲过,任何实现接口的类必须实现该接口定义的所有方法,包括从其他接口继承的任何方法。

    尽管我们在本书中包括的例子没有很频繁的用到包和接口,这两个工具是Java编程环境中的重要部分。

    实质上所有用Java编写的实际的程序和小应用程序都被包含在包中。一个数字也可能实现接口。因此,游刃有余的运用这些工具是非常有用的。

    展开全文
  • 实际参数形式参数

    2019-01-02 03:45:41
    实际参数形式参数实际参数形式参数详细例子值传递地址传递(也称引用传递)const引用传递实参形参区别 实际参数 实际参数(实参)是在调用时传递给函数参数。实参可以是常量变量、表达式、函数等,无论...

    实际参数

    实参是在调用时传递给函数的参数。实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。

    形式参数

    由于它不是实际存在变量,所以又称虚拟变量。形参是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。在调用函数时,实参将赋值给形参。因而,必须注意实参的个数,类型应与形参一一对应,并且实参必须要有确定的值。

    Example

    我觉得只要明白了值传递和地址传递,就应该能明白形参和实参的具体工作细节了。

    值传递

    实参是变量,表达式等值。
    find(int x) { }
    y= find(z);
    上面的例子中,z是实参,x是形参。x变z不变。
    在值传递过程中,实参和形参位于内存中两个不同地址中,实参先自己复制一次拷贝,再把拷贝复制给形参。所以,在值传递过程中,形参的变化不会对实参有任何的影响。

    地址传递(也称引用传递)

    实参是指针。
    在函数调用的时候,实参传递给你的是指针地址,地址一样也就意味着实参和形参是一样的,当你的形参发生改变时,实参也会发生改变。
    find(int &x) { }
    y= find(z);
    上面的例子中,z是实参,x是形参。z随x而改变。

    const引用传递

    find(const int &x) { }
    y= find(z);
    上面的例子中,z是实参,x是形参。z不随x而改变。
    有人就会问了,你这样做不是和值传递一样的么?NO!
    仔细观察就会发现,在值传递中要进行两次拷贝,浪费内存资源是相当可耻的,const的出现有效避免了这种情况的出现,只需拷贝一次就够了。

    Difference

    形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
    1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
    2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
    3.实参和形参在数量上,类型上,顺序上应严格一致,否则会发生“类型不匹配”的错误。
    4.函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
    5.当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,它们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变。而如果函数的参数是指针类型变量,在调用该函数的过程中,传给函数的是实参的地址,在函数体内部使用的也是实参的地址,即使用的就是实参本身,所以在函数体内部可以改变实参的值。

    展开全文
  • Integer实际是对象引用,生成一个新对象实际上是生成一个指针指向此对象;而int则是直接存储数据值。Integer默认值是null,int默认值是0;Integer缓存范围是-128到127。关于Int和Integer比较一些延伸:例子:...

    int和Integer的区别

    int是基本数据类型,Integer是int的包装类。

    Integer必须实例化后才能使用,int变量不需要。

    Integer实际是对象的引用,生成一个新对象实际上是生成一个指针指向此对象;而int则是直接存储数据值。

    Integer默认值是null,int默认值是0;

    Integer的缓存范围是-128到127。

    关于Int和Integer比较的一些延伸:

    例子:

    Integer a= new Integer(100);

    Integer b = new Integer(100);

    int c = 100;

    Integer d = 100;

    Integer e = 100;

    Integer f = 128;

    Integer g =128;

    ①、System,out.print(a==b);//false

    ②、System,out.print(a==c);//true

    ③、System,out.print(a==d);//false

    ④、System,out.print(d==e);//true

    ⑤、System,out.print(f==g);//false

    解析:

    ①:Integer变量是对一个Integer对象的引用。通过new生成的Integer变量地址永远不相等。因此false;

    ②:Integer和int作比较,Integer会自动做拆箱操作转化为int类型,因此是两个数值的值比较,所以相等,因此true;

    ③:new生成的对象在堆中,非new生成的对象在java的常量池中,因此非new生成的Inte变量和new Integer()生成的变量比较时总为false;

    ④&&⑤:对呀两个非new生成的Integer对象比较时,如果两个变量值在区间-128到127之间,比较结果为true,不在这个范围的则为false;

    java在编译Integer d = 100;时,会编译成Integer d = Integer.valueOf(100);,看java Api源码可以知道:

    public static Integer valueOf(inti) {assert IntegerCache.high >= 127;if (i >= IntegerCache.low && i <=IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return newInteger(i);

    }

    java对于-128到127之间的数进行缓存,如果再这个范围内不在new生成;

    展开全文
  • 由于常量表达式在实际编程中比较难判断,所以c++引入constexpr来判断一个表达式是否为constexpr。被声明为constexpr表达式一定是一个常量表达式,如果不是,编译器则会在编译阶段报错。 一般说来,如果你认定变量...

    constexpr变量:

    由于常量表达式在实际编程中比较难判断,所以c++引入constexpr来判断一个表达式是否为constexpr。
    被声明为constexpr的表达式一定是一个常量表达式,如果不是,编译器则会在编译阶段报错。
    一般说来,如果你认定变量是常量表达式,那就把它声明为constexpr类型。

    例子:
    constexpr int size = 100; // 正确。
    constexpr auto charN = cin.get(); // 错误,cin.get()不是一个常量表达式。


    可以被定义为constexpr的类型包括【算术类型】【引用】【指针】;这些类型被称为字面值类型。
    如果constexpr定义的是一个指针,则限定符constexpr仅对指针有效,对指针所指的对象无关。

    注意:自定义类、Sales_item、IO库、string类型则不属于字面值类型。(涉及编译原理,了解并不多)

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


    非指针类型的const在作为auto的判断符时,会被auto忽略。

    const int cr = 12;
    auto p = 12; // p的类型为int;

    指针类型的底层const不会被忽略;

    const int *ci = &cr;
    auto p1 = ci; // p1的类型为const int *;

     

    在利用类型别名定义const对象和原本的类型名定义const对象是有差别的。

    #include <iostream>

    using namespace std;
    using pstring = char *;

    int main() {

    const char *str = nullptr; // 指向的是一个 常量对象 的 常量指针
    const pstring cstr = nullptr; // 指向的是一个 普通对象 的 指针常量
    }

    所以在定义过程中有“*”和没有“*” 定义变量的过程是不一样的,编译器会按照不同的方式处理。

    那么类似于如下写法:

    #include <iostream>

    using namespace std;
    using pstring = char *;

    int main() {

    const char i = '4';
    const pstring p = &i; // 错误,p只是一个常量指针,而非指向常量对象的指针;
    }
    是不是非常的迷惑人?
    由以上两点就很容易看出,这种写法当然是错的。

     

    转载于:https://www.cnblogs.com/xiaodukuko/p/5266319.html

    展开全文
  • 引用实际上就是取别名,提起这个名字就会让人知道是谁,谈起“鸡哥”就知道是坤坤,那么我们所说引用变量,不是新定义了一个变量,而是给一个已经定义的变量取别名,编译器不会为引用变量开辟空间,它和被引用...
  • 上面两个 message 的变量看起来好像是一样的,但实际他们的意义是不一样的,前者代表的是字符数组的初始化,后者则是一个字符指针指向一个字符串常量为了验证上面的说法,下面我们执行一些对这两个变量的操作message...
  • 上面两个 message 的变量看起来好像是一样的,但实际他们的意义是不一样的,前者代表的是字符数组的初始化,后者则是一个字符指针指向一个字符串常量为了验证上面的说法,下面我们执行一些对这两个变量的操作message...
  • 1、C中CONST使用。 const是一个C语言关键字,它限定一个...虽然这听起来很简单,但实际上,const使用也是c语言中一个比较微妙地方,微妙在何处呢? 问题1:const变量常量? 为什么我象下面的例子
  • const是一个C语言关键字... 虽然这听起来很简单,但实际上,const使用也是c语言中一个比较微妙地方,微妙在何处呢?请看下面几个问题。  问题:const变量 & 常量  为什么我象下面的例子一样用一个con...
  • 本书的作译者均具有丰富的实际应用经验,赋予了本书极有价值的参考信息。 --------------------------------------------- 目 录 译者序 作者介绍 前言 第1章 什么是PHP0 1.1 PHP简介 1.1.1 PHP的发展历程 ...
  • 对象,数组初始化表达式实际就是新创建对象和数组,这些初始化表达式有时也叫”对象(数组)直接量“,数组初始化表达式中元素初始化表达式也可以是数组初始化表达式(也就是嵌套)例子: var matrix = [[1...
  • 上面两个 message 的变量看起来好像是一样的,但实际他们的意义是不一样的,前者代表的是字符数组的初始化,后者则是一个字符指针指向一个字符串常量 为了验证上面的说法,下面我们执行一些对这两个变量的操作 ...
  • c中const

    2010-12-24 01:23:00
    C中CONST使用:  虽然这听起来很简单,但实际上,const使用也是c语言中... 1)、这个问题讨论是"常量""只读变量"区别。常量肯定是只读,例如5, "abc",等,肯定是只读,因为常量是被编译器放在内存中
  • C#.net_经典编程例子400个

    热门讨论 2013-05-17 09:25:30
    第1章 窗体界面设计 1 1.1 菜单应用实例 2 实例001 带历史信息菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮菜单 4 实例004 任务栏托盘菜单 5 实例005 可以拉伸...
  • 3.2 常量与变量 33 23.2.1 常量和符号常量 33 3.2.2 变量 33 3.3 整型数据 34 3.3.1 整型常量表示方法 34 3.3.2 整型变量 35 3.4 实型数据 37 3.4.1 实型常量表示方法 37 3.4.2 实型变量 38 3.4.3 实型常数...
  • 3.2 常量与变量 33 23.2.1 常量和符号常量 33 3.2.2 变量 33 3.3 整型数据 34 3.3.1 整型常量表示方法 34 3.3.2 整型变量 35 3.4 实型数据 37 3.4.1 实型常量表示方法 37 3.4.2 实型变量 38 3.4.3 实型常数...
  • 条件语句可以将一个变量其它变量的值相比较,或将一个变量一字符串常量相比较。条件语句用于控制make实际看见的makefile文件部分,不能用于在执行时控制shell命令。 条件语句的例子 下述的条件语句的例子...
  • const在C中使用

    2011-06-17 09:08:00
    问题:const变量 & 常量 为什么下面的例子在使用一个const变量来初始化数组,ANSI C编译器会报告一个错误呢? const int n = 5; int a[n]; 答案分析: 1)、这个问题讨论是“常量“只读变
  • c和c++一点区别

    2010-08-14 16:32:00
     问题:const变量 & 常量  为什么下面的例子在使用一个const变量来初始化数组,ANSI C编译器会报告一个错误呢?   const int n = 5;  int a[n];  答案分析:  1)、...
  • 实际上Python传都是引用,比如x=1是把1这个常量的引用传递给x,而1又可以被其他变量引用。至于中间计算结果中产生1,猜想应该不会存在同一个1地址上,有待考证。这就是Python动态语言特性,和面向对象特性。...
  • 实际上Python传都是引用,比如x=1是把1这个常量的引用传递给x,而1又可以被其他变量引用。至于中间计算结果中产生1,猜想应该不会存在同一个1地址上,有待考证。这就是Python动态语言特性,和面向对象特性。...
  • C 和 C++中CONST

    2010-09-02 11:35:00
     问题:const变量 & 常量  为什么下面的例子在使用一个const变量来初始化数组,ANSI C编译器会报告一个错误呢?   const int n = 5;  int a[n];  答案分析:  1)、...
  • 对于一个没有任何编程知识的初学者而言,也许还应介绍一下常量与变量。不过从它们的名字就可以非常清晰地辨明二者的区别,常量其值是不可改变的,而变量的值则可以修改,除非该变量是只读的(如设置为readonly)。...
  • PHPMySQL.WEB开发

    2013-04-01 17:18:52
    1.8 声明和使用常量 1.9 理解变量的作用域 1.10 使用操作符 1.11 计算表单总金额 1.12 理解操作符的优先级和结合性 1.13 使用可变函数 1.14 根据条件进行决策 1.15 通过迭代实现重复动作 1.16 从控制结构或脚本中...
  • 我们 是希望读者能尽快地编写出有用程序,为此,本章将重点介绍一些基本概念,比如变量与 常量、算术运算、控制流、函数、基本输入/输出等。而对于编写较大型程序所涉及到一 些重要特性,比如指针、结构、C ...
  • C语言深度挖掘1.ppt

    2020-03-22 11:26:16
    C 语言的深度挖掘 (一) 是否入门 改进 有错吗 为什么在每个头文件都能见到 哪个执行效率高 浮点数的内存表示问题 无符号整数有符号整数 可以少传一个参数吗 为什么有时相同有时不同 结构体变量的内存表示 联合类型...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 155
精华内容 62
关键字:

常量与变量的实际例子