在Java中,是否可以创建一个throws不检查语句的方法.
例如:
public class TestClass {
public static void throwAnException() throws Exception {
throw new Exception();
}
public static void makeNullPointer() {
Object o = null;
o.equals(0);//NullPointerException
}
public static void exceptionTest() {
makeNullPointer(); //The compiler allows me not to check this
throwAnException(); //I'm forced to handle the exception, but I don't want to
}
}
Run Code Online (Sandbox Code Playgroud) 现在存在的所有操作系统都在文件和文件夹中工作.我当时认为可能还有其他存储文件的方法.它是通过标签存储文件的更好方法,例如:
如果音乐是在2013年制作的,那么名为"music1"的文件可以有一个标签"2013".同一个文件可以有另一个名为"Music"的标签,说该文件是音乐,另一个名为"video1"的文件可能有"2013"标签,但也有"视频"标签而不是"音乐"标签.这将非常有用,因为您可以搜索标签并生成所有文件的漂亮地图.
这是一个例子:

在此示例中,文件为绿色.每个文件都有一些标签(蓝色)和一些特殊标签(红色).特殊标签包含用户之类的东西(只有标签中的用户可以看到标记为USER:Username的文件)和文件类型(而不是文件扩展名).黄色标签是系统文件类型,不需要程序来运行它们(如Windows中的.exe)
我有以下NASM组装程序,运行时间约为9.5秒:
section .text
global _start
_start:
mov eax, 0
mov ebx, 8
loop:
inc dword [esp + ebx]
inc eax
cmp eax, 0xFFFFFFFF
jne loop
mov eax, 1
mov ebx, 0
int 0x80
Run Code Online (Sandbox Code Playgroud)
但是,如果我替换[esp + ebx]为[esp + 8](自ebx = 8以来相同的内存位置)或甚至只是[esp],它在10.1秒内运行...
这怎么可能?是不是[esp]为CPU比计算更容易[esp + ebx]?
当我查看Java源代码时,我发现了一些不寻常的文件,这些文件大多与包中的ByteBuffers 有关,这些文件java.nio包含非常混乱的源代码并被标记This file was mechanically generated: Do not edit!.
这些文件还包含大部分空白行(有些甚至在javadocs中间(!!?)),可能是为了防止行号发生变化.我也看过一些java反编译器,例如procyon-decompiler,它们可以选择保留行号,但我怀疑是这种情况,因为在最终的奖励之前放空行不会改变.
以下是一些这些文件(我在网上找不到任何链接,并没有粘贴它们,因为我不想破坏任何版权,但你可以在src.zipJDK安装根目录下的文件夹中找到它们夹):
我很想知道:
为什么assertjava中有关键字,而不是方法?
方法断言可能如下所示:
public static void assert(boolean condition) {
if(!condition) {
throw new AssertionError();
}
}
Run Code Online (Sandbox Code Playgroud) 假设我在IntelliJ中调试以下代码:
for (SomeObject obj1 : iterable1) {
doSomething(obj1); // <--- I am currently paused on this line
for (SomeObject obj2 : iterable2) {
doSomething(obj1, obj2);
}
}
Run Code Online (Sandbox Code Playgroud)
我想跨过整个内循环来看看内循环如何影响obj1字段,但是"运行到游标"到第一个右大括号只运行内循环的第一次迭代,而"运行到游标"则在第二个右括号结束外循环的迭代,我不再有权访问obj1.
手动单步执行每个迭代都不是一个选项,因为可能有数千个项目,并且也没有在大括号之间添加一行,因为这是库的一部分.
有没有什么方法可以简单地在块的末尾跳过一个循环而不退出包含块?
我想在每次有一个字符串时拆分一个字符串|,但该split方法只接受一个正则表达式.正则表达式|在每个字母后分割字符串,这不是我想要的.使用\u007C也做同样的事情.
我试过用\|,但这只是给了我:Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ ).
我注意到,如果我有两个具有相同名称的方法,第一个接受SomeObject,第二个接受SomeObject在我调用方法时扩展的对象SomeOtherObject,它会自动使用只接受的方法SomeObject.如果我转换SomeOtherObject为SomeObject,SomeObject则使用接受的方法,即使该对象是instanceof SomeOtherObject.这意味着在编译时选择该方法.为什么?
java ×6
methods ×2
assembly ×1
assert ×1
bytebuffer ×1
debugging ×1
exception ×1
extends ×1
filesystems ×1
hard-drive ×1
openjdk ×1
optimization ×1
string ×1
x86 ×1