Java 如何编写try-catch?
我有一个加密字符串的java方法:Java 如何编写try-catch?,java,try-catch,Java,Try Catch,我有一个加密字符串的java方法: public String getCurrency(String hash){ try { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(hash.getBytes()); byte byteData[] = md.d
public String getCurrency(String hash){
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(hash.getBytes());
byte byteData[] = md.digest();
/** convert the byte to hex format */
StringBuilder sb = new StringBuilder();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
return sb.toString();
}
现在,当我再次尝试编译代码时,会出现以下错误消息:
“可变sb未声明”
如何正确返回加密字符串?您在
try
块中声明了StringBuilder
。这意味着其范围仅限于该块
在尝试之前声明它
public String getCurrency(String hash) {
StringBuilder sb = new StringBuilder();
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(hash.getBytes());
byte byteData[] = md.digest();
/** convert the byte to hex format */
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
return sb.toString();
}
公共字符串getCurrency(字符串哈希){
StringBuilder sb=新的StringBuilder();
试一试{
MessageDigest md=MessageDigest.getInstance(“SHA-256”);
md.update(hash.getBytes());
byte byteData[]=md.digest();
/**将字节转换为十六进制格式*/
for(int i=0;i
您正在try
块中声明您的StringBuilder
。这意味着其范围仅限于该块
在尝试之前声明它
public String getCurrency(String hash) {
StringBuilder sb = new StringBuilder();
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(hash.getBytes());
byte byteData[] = md.digest();
/** convert the byte to hex format */
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
return sb.toString();
}
公共字符串getCurrency(字符串哈希){
StringBuilder sb=新的StringBuilder();
试一试{
MessageDigest md=MessageDigest.getInstance(“SHA-256”);
md.update(hash.getBytes());
byte byteData[]=md.digest();
/**将字节转换为十六进制格式*/
for(int i=0;i
您必须在try/catch块之外声明变量sb
。您必须在try/catch块之外声明变量sb
。正如其他人已经说过的,问题是sb
变量是在try
块中定义的,因此只能在那里访问。将声明移到try
块之外将使您的代码能够编译,但我怀疑这是您想要的行为
如果调用MessageDigest.getInstance(“SHA-256”)
时发生异常,会发生什么情况:捕获捕获NoSuchAlgorithmException
,堆栈跟踪打印到系统.err
,并且您的方法愉快地返回空StringBuilder的toString()
,哪个是空的字符串
。调用该方法的代码不知道引发的异常,因此无法处理该异常
备选方案(尽管最佳方案完全取决于您的应用程序):
- 让我们在该方法之外进行适当的错误处理
- 像现在一样捕获该方法中的异常,但返回
null
而不是空的字符串
,这允许此方法的调用方识别出出错的地方
异常
的一个很好的起点是,正如其他人已经说过的,问题是您的sb
变量是在try
块中定义的,因此只能在那里访问。将声明移到try
块之外将使您的代码能够编译,但我怀疑这是您想要的行为
如果调用MessageDigest.getInstance(“SHA-256”)
时发生异常,会发生什么情况:捕获捕获NoSuchAlgorithmException
,堆栈跟踪打印到系统.err
,并且您的方法愉快地返回空StringBuilder的toString()
,哪个是空的字符串
。调用该方法的代码不知道引发的异常,因此无法处理该异常
备选方案(尽管最佳方案完全取决于您的应用程序):
- 让我们在该方法之外进行适当的错误处理
- 像现在一样捕获该方法中的异常,但返回
null
而不是空的字符串
,这允许此方法的调用方识别出出错的地方
关于异常
的一个很好的起点是