- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我和我的同学(计算机科学第一年)正在努力解决问题类(class)和子类(class)。我们有一个测试,其中一个问题检查类、子类、它们之间的合法和非法转换等的理解。问题通常是相同的:给定 2-3 个名为 A、B、C 的类,其中一些扩展了其他类,然后是不同的构造函数和 10-15 行非常令人困惑的代码,我们需要在它们中的每一个上判断它是否会导致其中一个下列的:1. 运行时错误。2.编译错误。3. 将运行(将打印出什么)。
测试只是纸质的。问题是,您有跟踪不同类和变量的方法吗?有教授这些科目的网站吗?
这是之前测试的问题:下面哪行代码会导致编译错误,运行时错误,会打印出什么:(我加了解决方法)
A a = new A(1,2);
B b = new B(1,2,3);
C c = new C(1,2);
A bb = (A) b;
A a1;
A a2 = null;
System.out.println("Hello world"); //"Hello World
System.out.println(Hello world); //Compilation error
System.out.println(1/0); //Runtime Error
a = b; //Will run with no errors
a.equals(a1); //compilation error
System.out.println(a.equals(a2));//will print false.
System.out.println(b.equals(c)); //will print true.
B aa = (B) a; //runtime error.
C bbb = (C) bb; //runtime error
C ccc = (C) b; //compilation error
a.m1(); //will print m2
b.m1(); //will print 3
c.m3(); //will print 2.
a.m5(); //will print false
A 类:
public class A {
private int x;
public int y;
private C c = null;
public A(int x,int y){
this.x = x;
this.y = y;
}
public void m1() { m2();}
public void m2() {
System.out.println("m2");
}
public void m3(){ m4(); }
public void m4() {
A tmp = new B(1,2,3);
System.out.println(tmp.y);
}
public void m5() {
System.out.println((new C().equals(c)));
}
public boolean equals(Object other) {
if(!(other instanceof A)) return false;
return (((A)other).x==x &
((A)other).y==y);
}
}
B 类:
public class B extends A {
public int y;
public B(int x, int y1, int y2){
super(x,y1);
this.y = y2;
}
public void m2(){
m3();
}
public void m4() {
B temp = new B(1,2,3);
System.out.println(temp.y);
}
}
C 类:
public class C extends A {
public int y;
public C(int x, int y){
super(x,y);
this.y = y;
}
public C(){
this(0,0);
}
}
我知道它很长,但我希望您了解问题的类型...我不是在寻找答案,而是试图帮助我理解概念和思考问题的方法。我们正在努力解决的主要问题是当您扩展一个类,然后在其中调用一个方法时,该方法在子类中调用另一个方法等等……跟踪所有这些都很困难。多谢,巴拉克
最佳答案
编译错误通常发生在您的语法不正确,或者您没有正确实例化对象时。
println(Hello World) 是一个编译错误,因为 Hello 和 World 试图引用尚未实例化的变量 Hello 和 World。要解决这部分,你可以在上面说 String Hello = "Hello"; String World = "世界";那将解决实例化错误。但这在语法上也是不正确的。如果一个函数有多个参数,它们必须用逗号分隔。要更正这部分,println(Hello + World)。这会将 2 个字符串放在一起以构成一个参数“HelloWorld”,该参数在 println() 函数中使用。
a = b 是可以的,因为两者都已经实例化并且因为继承。将继承视为“是一个”,因此当 B 扩展 A 时,您可以说“B 是一个 A”。使用另一个例子,一个形状(A)和一个圆(B)你可以说“圆是一个形状”
a.equals(a1);是一个编译错误,因为 a1 还没有被实例化。实例化一个对象,需要用到“new”这个词
System.out.println(a.equals(a2));为假,因为 equals 函数首先检查 a2 是否"is"A。它是,所以它检查 x 和 y 是否为相同的值。它们不是因为 a 的 x 和 y 已设置,但 a2 只是一个空对象。
System.out.println(b.equals(c));是真的,因为“c 是 A”所以它检查 b 和 c 的 x 和 y。它们是 1 和 2,所以这是真的。
B aa = (B) a; a 已经被实例化,并且它在语法上是正确的,所以它通过了编译。但是,您可以说“B 是 A”,但不能说“A 是 B”,就像您在尝试运行时不能说“Shape is a Circle”一样,它会注意到并给出运行时错误。 C bbb = (C) bb;是一样的,因为 bb 是一个 A 对象。
a.m1();//将打印 m2。函数 m1() 执行的第一个(也是唯一一个)命令是调用 m2()。这打印“m2”。所以当你调用 a.m1() 时,它与直接调用 a.m2() 是一样的。
b.m1();//将打印 3。因为 B 覆盖了 m2() 和 m4() 函数,它调用 m1() -> m2() -> m3() -> m4() 和 m4() 创建一个变量并打印它的 y值(value)。 B(x,y1,y2) 的构造函数设置 x = x; y = y1; (来自 super(x,y1) 函数)然后用 y2 覆盖 y。
c.m3();//将打印 2。这令人困惑。和上一个一样,这个调用 m3() -> m4()。因为 C 不会覆盖它们中的任何一个,所以它使用 A 定义的那些。A 的 m4() 从新的 B(1,2,3) 创建 A。 B 对象的 y 值被 y2(3) 覆盖,但由于 A 的 x 值是私有(private)的,B 构造函数无法触及 A 的 x 值,因此无法覆盖它。
a.m5();//将打印 false 与 "System.out.println(a.equals(a2));"相同多于。 A 的 c 值为 null,并且 C 有一个不带参数的构造函数 C() 调用 C(0,0)。空 C 与已实例化的 C 对象不同。
我希望这至少是您正在寻找的东西的一个良好开端,我希望我的解释是有意义的。有时很难在过度解释(太多的话会造成混淆)和解释不够之间找到平衡点。如果您需要更多说明,请发表评论。
已编辑 - 我在 c.m3() 部分添加了一些关于私有(private)变量 x 的内容
关于java - 类和子类 - 您如何跟踪它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21890497/
有没有办法在 xdebug 跟踪输出中查看 echo 或 print 函数调用。我正在为我在我的服务器中运行的所有脚本寻找一个全局配置(或一种方法)。 例子: 我希望跟踪输出显示 echo 调用。默
我将应用程序从2.0.0M2升级到了2.1.0,但是当我尝试运行该应用程序时,出现此错误: Note: /Volumes/Info/proyectos-grails/vincoorbis/Member
我如何在共享点中执行日志记录。我想使用跟踪。 以便它记录 12 个配置单元日志。 最佳答案 微软提供了一个例子: http://msdn.microsoft.com/en-us/library/aa9
如何跟踪 eclipse 和 android 模拟器的输出。我习惯于在 Flash 和 actionscript 中这样做。 在 AS3 中它将是: trace('我的跟踪语句'); 最佳答案 您有几
是否可以在 Postgresql 上进行查询跟踪?我在带有 OLEDB 界面的 Windows 上使用 9.0。 此外,我需要它是实时的,而不是像默认情况下那样缓冲... 最佳答案 我假设您的意思是在
第一天 HaxeFlixel 编码器。愚蠢的错误,但谷歌没有帮助我。 如何使用 Haxe、NME 和 Flixel 追踪到 FlashDevelop 输出。它在使用 C++ 执行时有效,但对 Flas
我有一个关于 iPhone 上跟踪触摸的快速问题,我似乎无法就此得出结论,因此非常感谢任何建议/想法: 我希望能够跟踪和识别 iPhone 上的触摸,即。基本上每次触摸都有一个起始位置和当前/移动位置
我正在做我的大学项目,我只想跟踪错误及其信息。错误信息应该与用户源设备信息一起存储在数据库中(为了检测源设备,我正在使用MobileDetect扩展名)。我只想知道应该在哪里编写代码,以便获得所有错误
我正在 Azure 中使用多个资源,流程如下所示: 从 sftp 获取文件 使用 http 调用的数据丰富文件 将消息放入队列 处理消息 调用一些外部电话 传递数据 我们如何跟踪上述过程中特定“运行”
在我的 WCF 服务中,当尝试传输大数据时,我不断收到错误:底层连接已关闭:连接意外关闭 我想知道引发此错误的具体原因,因此我设置了 WCF 跟踪并可以读取 traces.svclog 文件。 问题是
我的目标是在 Firebase Analytics 中获取应用数据,在 Google Universal Analytics 中获取其他自定义数据和应用数据。 我的问题是我是否在我的应用上安装 Fir
我正在 Azure 中使用多个资源,流程如下所示: 从 sftp 获取文件 使用 http 调用的数据丰富文件 将消息放入队列 处理消息 调用一些外部电话 传递数据 我们如何跟踪上述过程中特定“运行”
我们正在考虑跟踪用户通过 Tridion 管理的网站的旅程的要求,然后能够根据此行为将此用户识别为“潜在客户”,然后如果他们在之后没有返回,则触发向此用户发送电子邮件X 天。 SmartTarget
在 Common Lisp 中,函数(跟踪名称)可用于查看有关函数调用的输出。 如果我的函数是用局部作用域声明的,我如何描述它以进行跟踪? 例如,如何跟踪栏,如下: (defun foo (x)
有什么方法可以检测文本框的值是否已更改,是用户明确更改还是某些 java 脚本代码修改了文本框?我需要检测这种变化。 最佳答案 要跟踪用户更改,您可以添加按键处理程序: $(selector).key
int Enable ( int pid) { int status; #if 1 { printf ( "child pid = %d \n", pid ); long ret =
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我有以下测试代码: #include int main(void) { fprintf(stderr, "This is a test.\n"); int ret = open("s
我有一个闭源 Java 应用程序,供应商已为其提供了用于自定义的 API。由于我没有其他文档,我完全依赖 API 的 javadoc。 我想跟踪特定用例在不同类中实际调用的方法。有什么办法可以用 ec
我正在学习 PHP。我在我的一个 php 函数中使用了如下所示的 for 循环。 $numbers = $data["data"]; for ($i = 0;$i send($numbers[
我是一名优秀的程序员,十分优秀!