精华内容
下载资源
问答
  • 我想知您到目前为止我做的是否正确有一个PLayerControllerTest)。 我们老师说模拟对象只能在测试代码不能在开发代码中。 PlayerController: ``` package gradeTesting; import java.util.ArrayList;...
  • 我想知道到目前为止做的是否正确有一个PLayerControllerTest)。 我们老师要求模拟对象只能在测试代码而不能在开发代码里。 PlayerController如下: ``` package gradeTesting; import java.util....
  • C学习:一个例子搞清左值右值概念...个char *类型的指针p,指向了一个int类型的首地址。我们希望跳过当前这个int数据,指向下一个char,思考应该如何操作? 进一步地,给出三种实现,判断是否正确: // example1 p

    C学习:一个例子搞清左值右值

    概念理清


    对所有的变量和表达式可归为两类,左值和右值。一句话直白讲:

    • 左值:非临时对象,多条语句中均可使用; 可出现在等号左右侧
    • 右值:临时对象,仅当前语句有效;只能出现在等号右侧

    以上概念十分重要,务必理解并记忆。

    一个例子


    假设这样一个问题:

    有个char *类型的指针p,指向了一个int类型的首地址。我们希望跳过当前这个int数据,指向下一个char,思考应该如何操作?

    进一步地,给出三种实现,判断是否正确:

    // example1
    p += sizeof(int);
    
    // example2
    ((int *)p)++;
    
    // example3
    p = (char *)((int *)p + 1)
    

    首先给出结论,第二个例子实现错误,其余两个正确。然后根据之前的左值右值概念知识,分析原因

    • 第一个例子,将char *类型的p往后移动int所占空间大小的byte,可以达到效果。
    • 第二个例子,自增和自减运算符++--只能针对左值操作,而(int *)p 做类型转换后,结果是右值,是临时对象,故无法进行自增。
    • 第三个例子,将为右值的临时变量(int *)p加1后,再转换类型,结果也是右值,赋值给左值p,从而记录移位一个int内存空间的操作。

    右值是表达式结束时就不再存在的临时对象,就像局部变量等函数调用结束就失效一样。所以可以小结出两个右值的重要判据(满足其一即可):

    • 1)临时对象是右值
    • 2)不能出现在等号左侧的是右值

    更多右值举例(常量和算术表达式):

    • a << 2 移位运算后,结果是临时变量,是右值

    • a + 2 / 3,结果是临时变量,是右值

    • a + b,算术运算结果为临时变量,是右值

    • (char *)p, 转换类型后,结果是临时变量,是右值

    • &arr[5],对数组第二个对象取地址,是算术运算得到的,是临时对象,是右值

    测试代码


    int main()
    {
        char *p;
        char ch[5] = {'1', '2','3','4','5'};
        int *pInt = (int *)&ch[0];
    
    	// 正确,输出结果为5
        p = (char *)pInt;
        p += sizeof(int);
        printf("%c", *p);
    
    	// 正确,输出结果为5
        p = (char *)pInt;
        p = (char *)((int *)p + 1);
        printf("%c", *p);
    
        // p = (char *)pInt;
        // ((int *)p)++; // 该语句编译不通过
        // (int *)p++; 	// 输出为2,不符合预期,先p++,再(int *)转换类型成临时变量,之后调用变量p时,类型还是char *
        // printf("%c", *p);
        while (1) {;}
        return 0;
    }
    
    展开全文
  • 实现一个“划词高亮”的在线笔记功能需要解决的核心问题两个: <ul><li>加高亮背景。即如何根据用户在网页上的选取,为相应的文本添加高亮背景;</li><li>高亮区域的持久化与还原。即如何保存...
  • 工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例, 通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了...
  • 你必须知道的495C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    *2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 2.6 为什么声明externf(structx*p);给我报了一个晦涩难懂的警告信息? 2.7 我遇到这样声明结构的代码:structname{intnamelen;charnamestr[1];}...
  • 这样做是意义的,因为构造器具有项特殊任务:检查对象是否正确地构造。导出类只能访问它自己的成员,不能访问基类中的成员(基类成员通常是private类型)。只有基类的构造器才具有恰当的知识和权限对自己的...

    引论 :
    基类的构造器总是在导出类的构造过程中被调用,而且按照继承层次逐渐向上链接,以使每个基类的构造器都能得到调用。这样做是有意义的,因为构造器具有一项特殊任务:检查对象是否被正确地构造。导出类只能访问它自己的成员,不能访问基类中的成员(基类成员通常是private类型)。只有基类的构造器才具有恰当的知识和权限对自己的元素进行初始化。因此,必须令所有构造器都得到调用,否则所有对象就不可能被正确构造。这正是编译器为什么要强制每个导出类部分都必须调用构造器的原因。在导出类的构造器主体中,如果我们没有明确指定调用某个基类构造器,它就会“默默”地调用缺省构造器。如果不存在缺省构造器,编译器就会报错(若某个类没有构造器,编译器会自动合成出一个缺省构造器)。

    提问:
    除了单例模式,你在生产环境中还用过什么设计模式?
    你能解释一下里氏替换原则吗?
    什么情况下会违反迪米特法则?为什么会有这个问题?
    适配器模式是什么?什么时候使用?
    什么是“依赖注入”和“控制反转”?为什么有人使用?
    抽象类是什么?它与接口有什么区别?你为什么要使用过抽象类?
    构造器注入和 setter 依赖注入,那种方式更好?
    依赖注入和工程模式之间有什么不同?
    适配器模式和装饰器模式有什么区别?
    适配器模式和代理模式之前有什么不同?
    什么是模板方法模式?
    什么时候使用访问者模式?
    什么时候使用组合模式?
    在这里插入图片描述

    展开全文
  • 《你必须知道的495C语言问题》

    热门讨论 2010-03-20 16:41:18
    *2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 22 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂的警告信息? 23 2.7 我遇到这样声明结构的代码:struct name {int namelen; ...
  • *2.5 在C语言中是否有模拟继承等面向对象程序设计特性的好方法? 22 2.6 为什么声明extern f(struct x *p); 给我报了一个晦涩难懂的警告信息? 23 2.7 我遇到这样声明结构的代码:struct name {int namelen; ...
  • java常用工具的使用

    热门讨论 2012-03-19 20:11:37
    而在Java类库中有一个Arrays的sort方法已经实现各种数据类型的排序算法。程序员只需要调用该的方法即可。 代码演示:Arrays实现排序 public static void main(String[] args) { int[] ages={23, 45,12,76,34,...
  • Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应...
  • 入门学习Linux常用必会60命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    hda1中的“1”代表hda的第一个硬盘分区 (partition),hda2代表hda的第二主分区,第一个逻辑分区从hda5开始,依此类推。此外,可以直接检查 /var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的...
  • 你必须知道的495C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    2.5 在C 中是否有模拟继承等面向对象程序设计特性的好方法? . . . 7 i 目录ii 2.6 我遇到这样声明结构的代码: struct name f int namelen; char namestr[1];g; 然后又使用一些内存分配技巧使namestr 数组用起 来...
  •  实例114 封装实现一个简单的计算器 139  实例115 使用面向对象思想查找字符串中的所有数字 140 5.3 面向对象技术高级应用 141  实例116 自定义抽象计算圆形的面积 141  实例117 利用接口实现选择不同的...
  • 一、选择题(共11题) ...一个类只能有一个对象 B.对象是类的具体实例 C.类是对某一类对象的抽象 D.类和对象的关系是一种数据类型与变量的关系 4、下列说法正确的是() A.在类方法中可用this来调用本...

    一、选择题(共11题)

    1、具体题目忘记了,和变量命名是否合法有关。

    2、若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为()

    A. (n-1)/2   B. (n+1)/2    C. n/2    D. n

    3、下列关于类和对象的描述中,错误的是() A.一个类只能有一个对象 B.对象是类的具体实例 C.类是对某一类对象的抽象 D.类和对象的关系是一种数据类型与变量的关系

    4、下列说法正确的是() A.在类方法中可用this来调用本类的类方法 B.在类方法中调用本类的类方法是可直接调用 C.在类方法中只能调用本类中的类方法 D.在类方法中绝对不能调用实例方法

    5、编译下面代码可能输出()

    class Test {

        static int i,

        public static void main(String args[])

        {

            System.out.print(i);

        }

    }

    A.Error Variable i may not been initialized

    B.null

    C.1

    D.0

    6、设一组初始化记录关键字序列(5,2,6,3,8),以第一个记录关键字5为基准进行一趟快速排序的结果是()

    A.3,2,5,8,6

    B.2,3,5,8,6

    C.3,2,5,6,8

    D.2,3,6,5,8

    7.以下程序是用辗转相除法来计算两个非负数之间的最大公约数。 我们假设x,y中最大的那个数的长度为n。基本运算时间复杂度O(1),那么该程序的时间复杂度为()

    A.O(logn)

    B.O(1)

    C.O(n*2)

    D.O(n)

    8、许多大中型企业出于多种原因建立了数据仓库,以下(A)不是建立数据仓库的合理理由。

    A. 将企业的各种应用系统集中在一起

    B. 充分利用企业信息系统生成的各种数据

    C. 解决企业业务应用和数据分析应用的性能冲突

    D、 以面向主题、集成的方式合理的组织数据

    9、设有一个二维数组A[m][n],假设A[0][0]存放位置在644,A[2][2]存放位置在676( 10),每个元素占一个空间,问A[3][3](10)存放在什么位置()脚注(10)表示用10进制表示。

    A.688

    B.678

    C.692

    D.696

    10、 如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是() A.e3,e4,e1,e2 B.e3,e1,e4,e2 C.e2,e4,e3,e1 D.任意顺序 11、若有18个元素的有序序列存放在一堆数组A[19]中,第一个元素存放A[1]中,先进行二分查找,则查找A[3]的比较序列的下标依次为() A.1,2,3

    B.9,5,2,3

    C.9,5,3

    D.9,4,2,3

    11、若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为()

    A. 1,2,3

    B. 9,5,2,3

    C. 9,5,3 

    D. 9,4,2,3

     

    二、填空题(共6题)

    1. 下列java代码中的变量a,b,c分别在内存的_____、_____、_____

    class A{

        private String a = "aa";

        public boolean methodB() {

            String b = "bb";

            final String c = "cc";

        }

    }

    2. 设n是描述问题规模的非负整数,下面程序片段的时间复杂度是()

    X = 2;

    while (x < n/2)

        X = 2*X;

    3 下面程序的输出是_____。

    int i = 5;

    int j = 10;

    System.out.printIn(i + ~j);

    4. 以下这段代码实现一个长度为6的以为数组的冒泡排序,在空格处填写代码。

    for (i = 0; i<5; i++)

    {

        for (j=0;j<___;i++

        {

            if (scores[j] < scores[j + 1])

            {

                temp = scores[j];

                scores[j] = scores[j + 1];

                scores[j + 1] = temp;

            }

        }

    }

    5. 请问经过执行如下代码后,i的值为多少?

    int i = 0;

    int j = i++;

    if ((++1 > ++j) && (i++ == j)) {

        i += j;

    6. 现有两张分别记录了科学和艺术两名课成绩的数据表,以及一条SQL语句的查询结果,请根据结果不全SQL语句。

     

    三、问答题。(共6题)

    1. 用户从手机的浏览器访问www.duoyi.com。看到的可能跟桌面PC电脑,是不太一样的页面效果,会更合适移动设备使用。请简要分析一下,实现爱按这种网页区分显示的原因及技术原理。

    2.请将以下短文翻译成中文:

    Becaude static data members are not part of individual objects of the class type.they are not defined when we create objects of the class.As a result,they are not initalized by the class' constructors.Moreover, in general, we may not initialize a staic member inside the class. Instead, we must defind and initialize each static data member outside the class body. Like any other object,a static data member may be defind only once.

    4.有一随机数组(25,84,21,46,13,27,68,35,20).采用快速排序方法对它们进行排序。其每趟排序结果是多少?其时间复杂度在平均情况下是什么?在最坏情况下(有序时)时间复杂度是什么?

    5. 简述POST请求由哪些部分组成,并说明提交数据的常用编码方式。

    6. 1_2_3_4_5_6_7_8_9_10=1允许在表达式空格处放加号或减号,最终使得表达式计结果为1。

    四、编程题(共1题)

    1.一次可以跳上1级台阶,也可以跳上2级......它也可以跳上n级。求跳上一个n级的台阶总共有多少种跳法?

    先写解题思路,再写代码,不屑编程思路扣分。

    import java.io.*;

    public class Test 

    {

        public static void main (String[] args) throws java.lang.Exception

        {

            //   这里继续添加代码,或者清除模板后自己添加代码

            //  不支持动态输入(Scanner),如有需要,请添加常量代替所需数据.

            System.out.printIn("Hello World!");

        }

    }

    /*这里写解题思路

    */

    展开全文
  • B) Python 中的每一条语句都有一个缩进级别,并且缩进级别会使用栈的数据结构进行存 储  4/7  C) Python 中的缩进是有语法含义的,它用来表示一个代码块 D) 一条比较长的语句也可以用...
  • 比如当前有一段js代码,放在<code>index.js里 <pre><code> js 'use strict'; module.exports = () => 'Hello Tmall'; </code></pre> 那么对于这么一个函数,首先需要定一个...
  • -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    用关键字final修饰一个类或者方法时,何意义? 48.掌握类和对象的概念,掌握面向对象编程的本质 49.静态变量和静态方法的意义,如何引用一个类的静态变量或者静态方法? 50.JAVA语言如何进行异常处理,关键字:...
  • 1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在的内部才可以访问。...47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可...
  • java 面试题 总结

    2009-09-16 08:45:34
    Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应...
  • java构造方法的相关内容

    千次阅读 2007-12-11 20:00:00
    一 java 类当中都构造方法,如果你没有指定构造方法,则系统会调用缺省的构造方法。...这样做是很意义的,因为构造器的一个任务就是,检查对象是否正确的构造。导出类只能访问它自己的成员,

    一 java 类当中都有构造方法,如果你没有指定构造方法,则系统会调用缺省的构造方法。

    二 构造方法的作用:检查对象是否被正确的构造。

    三 在继承关系中,构造函数的相关内容

          基类的构造器总是在导出类的构造过程中被调用,而且按照继承层次逐渐向上链接,以使每个基类的构造器都能得到调用。这样做是很有意义的,因为构造器的一个任务就是,检查对象是否被正确的构造。导出类只能访问它自己的成员,不能访问基类中的成员(基类成员通常是private类型的)。只有基类的构造器才具有恰当的只是和权限来对自己的元素进行初始化。因此必须所有的构造函数都得到调用,否则不能构建完整的对象。

         这正是编译器为什么要强制每个导出类都必须调用构造器的原因。在导出类的构造器主体中,如果没有明确指定调用某个类构造器,它就会默默的调用缺省构造器。不过不存在缺省构造器,编译器就会报错。

         以上我们可以看一个例子:

    class base
    {
        
    private int i;
        
    public base(int i)
        
    {
            
    this.i = i;
            System.out.println(
    "In base : " + i);
        }
            
    }


    public class test extends base
    {
        
    private int j;
        
    public static void main(String args[])
        
    {
            test t 
    = new test();
        }

    }

     该程序编译情况:

    D:/temp>javac test.java
    test.java:11: 找不到符号
    符号: 构造函数 base()
    位置: 类 base
    public class test extends base
           ^
    1 错误

    我们可以推理程序的构造过程,当主方法执行时,test t = new test(), 应该调用 test类的构造函数,而test类继承于base类,所以应该调用base类的缺省构造方法。我们可以看到base类缺省构造方法被重载了,所以test类调用不到base类的缺省构造方法。

    修改如下:

    class base
    {
        
    private int i;
        
        
    private base()
        
    {
            System.out.println(
    "In private base");
        }

        
    public base(int i)
        
    {
            
    this.i = i;
            System.out.println(
    "In base : " + i);
        }
            
    }


    public class test extends base
    {
        
    private int j;
        
    public static void main(String args[])
        
    {
            test t 
    = new test();
        }

    }
    ;

    修改的程序当中,我们增加了缺省的构造方法,但是我们把它的访问权限设置为private ,那么它的继承类在构造过程当中,调用不到它,所以编译错误。

    编译情况如下 :

    D:/temp>javac test.java
    test.java:16: 找不到符号
    符号: 构造函数 base()
    位置: 类 base
    public class test extends base
           ^
    1 错误

    四  我们可以总结一下构造器的调用顺序:

         1,调用基类构造器,这个步骤会不断的反复递归下去。

        2 ,按声明顺序调用成员的初始化方法。

        3 调用导出类的构造器主体。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 234
精华内容 93
关键字:

一个类只能有一个对象是否正确