精华内容
下载资源
问答
  • 面试题:下面程序运行结果

    千次阅读 2017-01-13 15:57:09
    摘自:https://zhidao.baidu.com/question/489562987146637292.html下面程序运行结果是什么?public class Dervied extends Base {private String name = "dervied"; public Dervied() { tellName(); printName

    摘自:https://zhidao.baidu.com/question/489562987146637292.html

    下面程序的运行结果是什么?

    public class Dervied extends Base {
    
    private String name = "dervied";
    
        public Dervied() {
            tellName();
            printName();
        }
    
        public void tellName() {
            System.out.println("Dervied tell name: " + name);
        }
    
        public void printName() {
            System.out.println("Dervied print name: " + name);
        }
    
        public static void main(String[] args){
            new Dervied(); 
        }
    }
    
    class Base {
    
        private String name = "base";
    
        public Base() {
            tellName();
            printName();
        }
    
        public void tellName() {
            System.out.println("Base tell name: " + name);
        }
    
        public void printName() {
            System.out.println("Base print name: " + name);
        }
    }

    输出:

    Dervied tell name: null
    Dervied print name: null
    Dervied tell name: dervied
    Dervied print name: dervied

    关键点:问题出在构造函数的地方,对于java中的extends,每个子类构造方法的第一条语句都是隐含的调用super,而且如果父类没有这种形式的构造函数就会报错。

    详细解释
    1,首先先说一下父类与子类方法覆写(overrider)相关的概念,覆写在java中主要是通过方法表来完成,java中每个类型(Class)中都存在一个方法表,其中存放java类型的实例方法(public/protected),static方法属于静态方法,和类型相关,不属于javad实例方法。private和default属于私有方法,private/default修饰的方法不进入类型的方法表。

    2,接下来说一下和方法,其中称为类初始化方法,称为对象实例化方法,该问题就与方法息息相关。
    方法:
    Java在进行对象创建时首先进行类型加载,如果Class类型存在父类型,则需要先加载父类完成以后再加载子类型。并且对static变量进行初始化操作,对static变量或者static代码块初始化的逻辑就封装在方法中。
    Java类型初始化过程中对static变量的初始化操作依赖与对static变量的赋值语句的前后关系,static语句块与static变量声明存在位置关系,java编译器与static变量的赋值位置有关。
    方法:
    Java对象在进行实例化时,首先会进行父类的实例化操作,然后再进行子类的实例化操作。该部分操作封装在方法中,并且子类的方法中会首先对父类方法的调用。
    Java对象实例化过程中对实例域的初始化赋值操作全部在方法中进行,方法显式的调用父类的方法,实例域的声明语句以及实例初始化语句块存在位置关系,方法以构造方法作为结束。

    接下来回到这道题上来,启动java虚拟机:
    第一步:加载应用用到的类,加载顺序为Base–>Dervied,这里涉及到方法的调用,但是当前类型中没有static域或者是static{},所以方法不再讨论。

    第二步:对象实例化操作,首先我们new Dervied();,这样就触发对Dervied.的调用,但是根据以上知识(“并且子类的方法中会首先对父类方法的调用”)我们可以知道,Dervied.首先会调用到Base.方法,所以现在我们调用的方法是Base.,Base.方法中,首先是对name域(父类Base)进行初始化,然后调用tellName()方法,因为子类以及覆写了tellName()方法,所以tellName方法实际调用为Dervied.tellName()方法,tellName方法要打印name域(子类Dervied)的值,但是当前Dervied对象中的name域还没有被初始化,所以打印出来的值为null。printName()方法执行与tellName()方法一致。

    第三步:Base.方法返回到Dervied.方法中,紧接着对name域(子类Dervied)进行初始化操作,然后调用子类Dervied的tellName方法和printName方法,name域(子类Dervied)已经初始化完成,所以能正确打印出来。

    展开全文
  • 编写一个控制台应用程序,完成下列功能,并写出运行程序后输出结果。1) 创建一个类A,在A中编写一个可以被重写的带int类型参数的方法MyMethod,并在该方法中输出传递的整型值加10结果。2) 再创建一个类B,使其...

     

    编写一个控制台应用程序,完成下列功能,并写出运行程序后输出的结果。

    1) 创建一个类A,在A中编写一个可以被重写的带int类型参数的方法MyMethod,并在该方法中输出传递的整型值加10后的结果。

    2) 再创建一个类B,使其继承自类A,然后重写A中的MyMethod方法,将A中接收的整型值加50,并输出结果。

    3) 在Main方法中分别创建类A和类B的对象,并分别调用MyMethod方法。

     

    【解答】

     

     

     

     

    输出结果:

    12

    52

    展开全文
  • 指出下面程序运行结果

    千次阅读 2016-12-05 21:09:07
    运行结果 结果说明 创建对象时调用顺序如下: ①先初始化父类和子类的静态成员。 ②父类非静态成员。 ③父类构造方法。 ④子类非静态成员。 ⑤子类构造方法。 另外需要注意的是,加...

    class A {
    	static {
    		System.out.print("父类静态成员  ");
    	}
    	//初始化块,也即是非static语句块
    	{
    		System.out.print("父类非静态成员  ");
    	}
    
    	public A() {
    		System.out.print("父类构造方法  ");
    	}
    }
    
    class B extends A {
    	static {
    		System.out.print("子类静态成员  ");
    	}
    	{
    		System.out.print("子类非静态成员  ");
    	}
    
    	public B() {
    		System.out.print("子类构造方法  ");
    	}
    }
    
    public class Test {
    
    	public static void main(String[] args) {
    		A ab = new B();
    		System.out.println("\n---------------------------------");
    		ab = new B();
    	}
    }

    运行结果

    结果说明

    创建对象时调用顺序如下:

    ①先初始化父类和子类的静态成员。

    ②父类非静态成员。

    ③父类构造方法。

    ④子类非静态成员。

    ⑤子类构造方法。

    另外需要注意的是,加static的语句块在加载类时就加载初始化了;不加static的语句块即初始化块,是在创建类的对象的时候才加载,在调用构造方法之前要先调用初始化块。


    展开全文
  • 以下程序段的输出结果为()。 for(i=4;i>1;i--) for(j=1;j;j++) putchar('#'); A:无 B:###### C:# D:###
  • 如果程序运行时间长,需要实时的获取输出,或者输出比较多的情况下,就使用stdout这样的属性,不断调用readline获取输出就好。 然后关于第二个问题。其实使用Popen类就可以完美解决,Popen类的cwd参数用来设定子...

    先说说背景。

    这几天项目中遇到一个签名的算法,没有相应的python库,自己去实现又比较费时间。

    中间的过程是这样的。

    经过查找发现这个开源项目本身支持一个JavaScript的SDK,里面已经实现了必须的功能。大概试了一下写了几个简单的js脚本,就实现了所需要的基本功能。既然js脚本很容易就实现了需要的功能,为了方便(其实是因为我懒,懒得去自己用python再实现内容转换和签名的算法了)就决定使用python调用已经写好的js脚本,获取脚本的输出来做为结果,在解析整理下就可以了。

    思路有了,下面就是如何用python的实现程序的调用和获取结果了。

    看了下有些人使用os模块提供的函数,类似os.system, os.spawn族的函数(其实就是Linux下相应的C的API)。但是觉得太底层了,而且有些还只能在特定的平台上使用。就没有使用这种方法。转而找到了subprocess库(终于进入正题了)。

    去官方的文档看了下描述,发现就是用来代替os.system,os.spawn族之类的

    This module intends to replace several older modules and functions:

    os.system

    os.spawn*

    我的需求很容易就满足了,使用subproces的run方法获取输出和返回值。

    然后,又好奇了两个问题:

    第一,如何实时的获取程序的输出。当程序会运行相当长一段时间,或者有很大量的输出的时候

    第二,如何改变程序的运行环境

    首先说第一个问题。我现在官方文档上找了下。发现似乎可以使用Popen类来实现。文档里面说到的跟输出相关的有两个,一个是Popen.communicate方法,一个是Popen的stdout属性。两者的描述很容易再官文上找到就不贴了。大概说一下就是官方推荐使用communicate方法来跟运行的子进程进行交互。

    我就试了一下communicate方法,包括timeout参数。

    发现下面的几点:

    1.communicate在不设置timeout的时候,会一直block,直到子进程运行完。

    2.communicate再设置了timeout参数,并且捕获了TimeoutExpired事件之后,获取的out是空的,并且子程序还在继续运行没有收到影响

    总结一下就是,使用communicate你必须等到程序运行完之后才能够一次性获取全部的输出。运行过程中,程序的输出是暂存在内存里面的。所以在communicate的描述后面特别说明了,如果输出较大的时候,不要使用这个函数。

    之后,就看了stdout,stdin之类的属性,也发现一个警告说可能引起死锁之类的。然后Google了一下。发现还是很多人在用stdout这个属性的。当然用法就是把它当作一个打开的文件对象。使用readline方法不断获取程序的输出,但是在每个readline的调用中,依然是block的。

    总结一下,关于第一个问题。如果子进程的运行时间有限,输出的内容也比较少的情况下,使用communicate方法比较合适。还有一种情况就是要限制子进程的运行时间,这个时候可以用communicate的timeout参数,并在timeout时间的处理中kill掉子进程。如果程序运行时间长,需要实时的获取输出,或者输出比较多的情况下,就使用stdout这样的属性,不断调用readline获取输出就好。

    然后关于第二个问题。其实使用Popen类就可以完美解决,Popen类的cwd参数用来设定子进程的工作目录,还有env参数用来设定子进程运行的环境变量。基本上就可以满足我们的使用中的大部分场景了。

    今天就先好奇这些吧,后面有时间遇到再继续挖。

    展开全文
  • 习题3.6 阅读下面程序,分析其执行过程,写出输出结果 #include <iostream> using namespace std; class Student {public: Student(int n,float s):num(n),score(s){} void change(int n,float s) {num=n.....
  • 阅读下面程序,并写出运行结果

    千次阅读 2016-05-26 09:05:32
    * 文件名称:第12周项目:阅读下面程序,并写出运行结果 * 作者:马康泰 * 完成日期:2016.5.19 * 版本号:v1.0 * * 问题描述:阅读下面程序,并写出运行结果 * 输入描述: * 程序输出: */ //虚...
  • 7.1 分析并写出下面程序运行结果

    千次阅读 2017-12-01 20:19:13
    #include //#include int square(int i) { return i*i; } int main() { int i=0; i=square (i); for (;i;i++) { static int i=1; i+=square (i);
  • Python单行输出程序运行进度信息

    千次阅读 2013-12-15 21:28:20
    在纯控制台输出的程序中,有时候想要显示程序运行的进度,如果进度更新一次就输出一次,会打印很多行信息,把前面有用的信息覆盖掉了。Linux下面安装文件时出现的文本形式的进度条和百分比只在一行里面刷新,很不错...
  • 改成Python3.8解释器(红色椭圆),结果就正常输出了 本人是技术小白,之前学了一段时间python,后面没怎么深入,最近想好好学一下Python,看了一段时间的书,在Python自带的idle写过一些代码,然后下...
  • #include &lt;iostream&gt; using namespace std; class A { private: int a,b; public: A(int aa, int bb) {a=aa; b=bb;} void printA() { cout&lt;&lt;"a: "...lt
  • 最近刚入手一款新电脑,之前的...亲测可行,之后再使用sublime text2运行小脚本的时候却出现了只有底部出现空白框但是没有结果输出的问题,查了网上的资料有的说是热键冲突被占用有的说是python的环境变量没有添加进去
  • 下面程序执行输出几个hello

    千次阅读 2017-03-20 22:39:21
    美团2016校园招聘 研发工程师(一) 下面程序执行输出几个hello? #include #include int main( ) { fork( ); fork( ); fork( ); printf(“hello\\n”); return 0; } A 3 B 4 C 6 D 8 正
  • 修改程序: #include using namespace std; class Date { public: Date(int=1,int=1,int=2005); void display(); private: int month; int day; int year; }; Date::Date(int m...
  • 请检查下面程序,找出其中的错误并改正,然后上机调试,使之能正常运行,从键盘输入,检查输出
  • 运行以下程序时,从键盘输入3.6,2.4,(表示回车),则下面程序运行结果是: include <stdio.h> #include <math.h> main() { float x,y,z; scanf("%f,%f",&x,&y); z=x/y; while(1) { if(fabs(z)&...
  • linux 后台运行程序输出重定向

    万次阅读 2014-05-28 09:32:40
    很多时间,我们希望程序后台运行,这样不会干扰我们做别的事,也可以关闭shell登录,
  • 程序运行结果如图所示 代码` public class Practice2 { public static void main(String[] args) { Scanner input =new Scanner(System.in); int num=0; int max=-1 ; int min =999999;...
  • (编译正常通过会出现类似下面输出) **** Build of configuration Debug for project Test **** make all make: Nothing to be done for `all'. **** Build Finished ****   请参看 ...
  • 可以看到我们图形界面和程序运行的返回的信息是一样的,并且成功把数据展示到图形界面。 1.怎么获取输出信息。eg:我们平时用编译器,例如pycharm,运行的时候,会有很多信息...
  • 其实这也是一个很土鳖的问题,很...而真正的执行(就是对应于vc++6.0的那个感叹号)是绿色的空心三角,在调试菜单下面,如果输入它,那么就会得到点击运行后程序运行完不关闭窗口的特点。 如果你不喜欢这样,还有一种简
  • 这里分享一下我用Sublime Text3写Python程序,不能运行含有输入输出程序的解决办法,即不能交互问题的解决。办法很简单,手动安装sublimerepl插件,即可配置交互环境,正常输入输出。 一、问题具体描述:安装...
  • 在windows命令行下面运行Python程序

    千次阅读 2018-03-27 10:00:19
    Python程序是以.py结尾的,编译的时候在notepad++里面运行编译,千万不能用电脑自带的记事本进行编写,那个里面会自带一些特殊字符,使得结果出现未知错误。保存好的.py文件,在C盘,建立一个work文件C:\work&gt...
  • 以前,提到将运行结果保存到文件中,我自然而然的就会想到是用C语言读取文件的方法。但是这对于初学者来说有一定的难度。 昨天下午上课,老师教了我们一招。编写完C语言程序后,我们会将其编译成.obj文件,再进行...
  • 最近在使用eclipse遇到了问题,程序无论怎么运行都是之前修改前的程序结果,如下面所示: package test; public class test { public static void main(String[] args) { // TODO Auto-generated method stub...
  • 本文旨在解决Visual Studio 2017在运行C++程序时,控制台窗口闪退(使得观察输出结果变得困难)的问题。
  • 输入3个整数,从小到大排序后输出。将下面程序填写完整。 #include &amp;lt;stdio.h&amp;gt; int main() { int a,b,c,t; while(scanf(&quot;%d%d%d&quot;,&amp;amp;a,&amp;amp;b,&...
  • 后台运行python程序输出缓冲区问题

    千次阅读 2016-06-13 16:00:59
    运行程序后输出结果如下: # python test1.py stderr1 stderr2 stdout1 stdout2 可以看到stderr的输出都在stdout前面,证明了stderr输出是没有输出到缓冲区的,而stdout有。 通过上面两个实验可得出...
  • 对于c++的初学者来说,在vs上练习编写控制台程序的时候一定会遇到一个问题,那就是程序执行完毕就立即退出,甚至我们还没有来的及看清楚程序运行结果,常常会让我们误以为是不是程序的编写出现问题,也不方便查看...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 897,582
精华内容 359,032
关键字:

下面程序运行后的输出结果是