在Java中,我想转换它:
https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type
Run Code Online (Sandbox Code Playgroud)
对此:
https://mywebsite/docs/english/site/mybook.do&request_type
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止:
class StringUTF
{
public static void main(String[] args)
{
try{
String url =
"https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do" +
"%3Frequest_type%3D%26type%3Dprivate";
System.out.println(url+"Hello World!------->" +
new String(url.getBytes("UTF-8"),"ASCII"));
}
catch(Exception E){
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它不能正常工作.这些%3A和%2F格式被称为什么以及如何转换它们?
在Java(或任何其他具有已检查异常的语言)中,在创建自己的异常类时,如何确定是应该选中还是取消选中它?
我的直觉是,如果调用者能够以某种富有成效的方式恢复,那么将调用一个已检查的异常,其中未经检查的异常对于不可恢复的情况更多,但我会对其他人的想法感兴趣.
假设我有一个类和一个方法
class A {
void foo() throws Exception() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想为A一个流传递的每个实例调用foo,如:
void bar() throws Exception {
Stream<A> as = ...
as.forEach(a -> a.foo());
}
Run Code Online (Sandbox Code Playgroud)
问题:如何正确处理异常?代码无法在我的机器上编译,因为我没有处理foo()可能抛出的异常.在throws Exception的bar似乎是没用在这里.这是为什么?
我一直在决定如何在我的应用程序中处理异常.
如果我的异常问题来自1)通过远程服务访问数据或2)反序列化JSON对象.不幸的是,我不能保证这些任务中的任何一个都成功(切断网络连接,不正确的JSON对象,这是我无法控制的).
因此,如果我遇到异常,我只需在函数内捕获它并返回FALSE给调用者.我的逻辑是,所有调用者真正关心的是任务是否成功,而不是为什么它不成功.
这是典型方法的一些示例代码(在JAVA中)
public boolean doSomething(Object p_somthingToDoOn)
{
boolean result = false;
try{
// if dirty object then clean
doactualStuffOnObject(p_jsonObject);
//assume success (no exception thrown)
result = true;
}
catch(Exception Ex)
{
//don't care about exceptions
Ex.printStackTrace();
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我认为这种方法很好,但我真的很想知道管理异常的最佳实践是什么(我应该在调用堆栈中一直冒出异常吗?).
总结关键问题:
跟进/编辑
感谢所有反馈,在网上找到了一些关于异常管理的优秀来源:
似乎异常管理是根据上下文而变化的事情之一.但最重要的是,人们应该如何管理系统中的异常.
另外注意通过过多的尝试/捕获代码腐烂或不给予例外它的尊重(例外是警告系统,还需要警告什么?).
此外,这是m3rLinEz的一个很好的选择评论.
我倾向于同意Anders Hejlsberg和你的看法,大多数来电者只关心操作是否成功.
从这个评论中,它提出了一些在处理异常时要考虑的问题:
可能重复:
何时选择已检查和未检查的异常
我应该何时创建一个已检查的异常,何时应该生成运行时异常?
例如,假设我创建了以下类:
public class Account {
private float balance;
/* ... constructor, getter, and other fields and methods */
public void transferTo(Account other, float amount) {
if (amount > balance)
throw new NotEnoughBalanceException();
/* ... */
}
}
Run Code Online (Sandbox Code Playgroud)
我应该如何创建我的NotEnoughBalanceException?它应该延伸Exception还是RuntimeException?或者我应该使用IllegalArgumentException?
我一直在研究一款try/catch经常使用的Android应用程序,以防止它甚至在没有必要的地方崩溃.例如,
xml layout带有的视图id = toolbar引用如下:
// see new example below, this one is just confusing
// it seems like I am asking about empty try/catch
try {
View view = findViewById(R.id.toolbar);
}
catch(Exception e) {
}
Run Code Online (Sandbox Code Playgroud)
整个应用程序都使用此方法.堆栈跟踪没有打印,很难找到出错的地方.应用程序突然关闭而不打印任何堆栈跟踪.
我让我的大四学生向我解释,他说,
这是为了防止生产中的崩溃.
我完全不同意它.对我而言,这不是阻止应用程序崩溃的方法.它表明开发人员不知道他/她在做什么,并且有疑问.
这是行业中使用的方法,以防止企业应用程序崩溃?
如果try/catch是真的,那么我们真的需要可以附加一个带有UI线程或其他线程的异常处理程序并捕获所有内容吗?如果可能的话,那将是更好的方法.
是的,空try/catch是坏的,即使我们将堆栈跟踪或日志异常打印到服务器,try/catch在所有应用程序中随机包装代码块对我来说没有意义,例如当每个函数都包含在a中时try/catch.
UPDATE
由于这个问题引起了很多关注,有些人误解了这个问题(也许是因为我没有明确表达过),我将把它改写一下.
这是开发人员在这里做的事情
一个函数被编写和测试,它可以是一个小函数,它只是初始化视图或复杂的视图,在测试后它被包裹在try/catch块中.即使是永远不会抛出任何异常的函数.
这种做法在整个申请中使用.有时会打印堆栈跟踪,有时只会出现debug log一些随机错误消息.此错误消息因开发人员而异.
使用这种方法,应用程序不会崩溃,但应用程序的行为变得不确定.甚至有时候很难跟上出错的地方.
我一直在问的真正问题是; 为了防止企业应用程序崩溃,业界是否遵循这种做法?而且我不是在询问空的try/catch.是不是,用户喜欢不会比意外行为的应用程序崩溃的应用程序?因为它真的归结为崩溃或用空白屏幕呈现用户或行为用户不知道.
我在这里发布了一些真实代码的片段
private void …Run Code Online (Sandbox Code Playgroud)这是一个面试问题.未检查的异常和错误之间的主要区别是什么,因为两者都没有被捕获?他们将终止该计划.
在下面的源代码我重新抛出一个Exception.
为什么没有必要将throws关键字放在方法的签名上?
public void throwsOrNotThrowsThatsTheQuestion() {
try {
// Any processing
} catch (Exception e) {
throw e;
}
}
Run Code Online (Sandbox Code Playgroud) 我想从一些"深度"函数中抛出一个异常,所以它会冒泡到另一个函数,我想抓住它.
f1调用f2调用f3调用... fN这可能会引发错误
我想抓住错误f1.
我已经读过,在Swift中我必须声明所有方法throws,并使用它们调用它们try.
但那很烦人:
enum MyErrorType : ErrorType {
case SomeError
}
func f1() {
do {
try f2()
} catch {
print("recovered")
}
}
func f2() throws {
try f3()
}
func f3() throws {
try f4()
}
...
func fN() throws {
if (someCondition) {
throw MyErrorType.SomeError
}
}
Run Code Online (Sandbox Code Playgroud)
是不是有一个类似于RuntimeExceptionJava的概念,哪里throws不会一直泄密到调用链?
有没有办法在java中的文件中写入错误日志或异常.我经历过Log4j.我搜索了一下,但diidnt找到了一个很好的解决方案.我写了一个简单的代码
catch (Exception e) {
PrintWriter pw = new PrintWriter(new FileOutputStream("Log"));
e.printStackTrace(pw);
}
Run Code Online (Sandbox Code Playgroud)
有没有其他方法来记录错误或异常?任何机构可以提供我与Log4j的示例?
java ×9
exception ×5
android ×1
c# ×1
coding-style ×1
error-log ×1
java-8 ×1
java-stream ×1
log4j ×1
swift ×1
try-catch ×1
url-encoding ×1