看别人代码记录

看了 m_changgong上传的代码。学习了一下 记录了一下自己遗漏点;

下载地址 url:http://download.csdn.net/detail/m_changgong/4891374

public class Bark {
	public static void main(String args[]) {
		Dog1 woofer = new Dog1();
		Dog1 nipper = new Basenji();
		woofer.bark();
		nipper.bark();
	}
}
class Dog1 {
	public static void bark() {
		System.out.print("woof ");
	}
}
class Basenji extends Dog1 {
	public static void bark() {
		System.out.println("dd");
	}
}



这个代码我乍一看 还想这么简单不就是向上转型 和方法重写嘛。 肯定输出  woof dd 啊  可是一运行 发现不是。。。立马傻眼了。仔细一看 原来是static的方法。

实际上  Dog1 nipper = new Basenji();  这个nipper 就是dog1类。 调用 静态方法 就是调用的 Dog1 里面的。  

也许在来一个语句 会看的更清楚一点。  


	Dog1 woofer = new Dog1();
		Dog1 nipper = new Basenji();
		Basenji nipper2 = new Basenji();
		woofer.bark();
		nipper.bark();
		nipper2.bark();

输出结果是 woof woof dd  这样就可以理解 了!!!!

2

public class Confusing {
	 Confusing(Object o) {
		System.out.println("Object");
	}

	 Confusing(String str) {
		System.out.println("String");
	}

	public static void main(String[] args) {
		new Confusing(null);
	}
}

对于这个现象 刚看到 立马觉的 应该是 输出Object  可是一运行 输出String!!!! 完全不能理解。 直接猜测 这种情况 可能会转化成最详细的类。即子类  于是 自己写了个小方法测试了一下 如下:

public class Test {
	Test(SuperClass superClass){
		System.out.println("superClass");
	}
	Test(ChileClassLev1 ChileClassLev1){
		System.out.println("ChileClassLev1");
	}
	Test(ChileClassLev2 ChileClassLev2){
		System.out.println("ChileClassLev2");
	}
	public static void main(String[] args) {
		new Test(null);
	}
}
class SuperClass{
	
}
class ChileClassLev1 extends SuperClass{
	
}
class ChileClassLev2 extends ChileClassLev1{
	
}
果然 输出的是 ChileClassLev2  证实了我的想法。。可这时候 又有一个疑问出现了。。如果有最底层有2个子类 会是神马情况的呢。于是实验了一下 发现会报 构造方法不明确的错误。 这个 暂时 就可以确定 null 会尽量转化成最底层的实现类。。如果有多个子类 会报错。


3
public class EscapeRout {

	public static void main(String[] args) {
		// \u0022 是双引号的Unicode 转义字符
		System.out.println("a\u0022.length()+\u0022b".length());
		System.out.println("a\".length()+\"b".length());
	}
}

输出结果是2 14.。这个是个小例子 知道结果一般就能想通。 可是不知道的情况下。 很多人会不注意这个问题。。 简单的来说 把\u0022全部换成“来看就好了。


4

public class Arcane3 implements Type3 {
	public void f() {
		System.out.println("Hello world");
	}

	public static void main(String[] args) {
		Type3 t3 = new Arcane3();
		t3.f();
	}
}

interface Type1 {
	void f() throws CloneNotSupportedException;
}

interface Type2 {
	void f() throws InterruptedException;
}

interface Type3 extends Type1, Type2 {
}





看到这个 有点小傻眼。 我以前都不知道 借口可以多继承 其他接口。 跟神奇的是  你把其中一个接口的 f方法 注释掉 就会报错。 因为要捕获异常。 而 有2种不同的异常却不用捕获了。。这个不懂。。待高手指导。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在PyCharm中,你可以利用版本控制系统(例如Git)来记录和管理你的代码修改历史。通过使用版本控制系统,你可以轻松地查看、比较和恢复之前的代码版本。对于改坏了别人的代码,也可以利用版本控制系统来进行代码恢复。 要利用PyCharm恢复历史代码,你可以按照以下步骤操作: 1. 确保你已经将项目连接到版本控制系统(如Git),并且已经提交至少一个代码版本。 2. 在PyCharm的顶部菜单栏中,选择"VCS"->"Git"(如果你使用的是Git)或者选择你所使用的版本控制系统。 3. 在弹出的菜单中,选择"Show History"或者类似的选项,以查看代码的历史记录列表。 4. 在历史记录列表中,你可以看到每个提交的信息、作者和日期等详细信息。你可以双击某个提交以查看该版本的代码。 5. 如果你想恢复到某个历史版本,你可以右键点击该版本并选择"Revert"或者类似的选项。这将撤消当前的更改,并将代码恢复到选定的历史版本。 如果你想查看代码修改了哪里,可以按照以下步骤操作: 1. 在PyCharm中打开你要查看的代码文件。 2. 在编辑器的左侧垂直边栏上,你会看到一个用不同颜色表示的小竖线。这些竖线表示了代码的不同修改点。 3. 将鼠标悬停在竖线上,PyCharm会显示一个弹出窗口,其中包含了该修改点的详细信息,例如修改的行数、作者和日期等。 4. 如果你想查看具体的代码更改,你可以单击修改点,PyCharm会将光标定位到该修改处。 总结:在PyCharm中,你可以利用版本控制系统来恢复历史代码,并且可以通过查看颜色标记的竖线来查看代码的修改点。这些功能可以帮助你更好地管理和维护你的代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python如何利用pycharm恢复历史代码,如何查看代码修改了哪里](https://blog.csdn.net/persist_ence/article/details/127866246)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [pycharm 代码截长图插件 code screenshots 使用记录](https://blog.csdn.net/wangsenling/article/details/127875935)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值