저는 Java가 처음입니다. 파일을 읽고, SHA1 체크섬을 계산하고, 결과를 다른 파일에 쓰는 프로그램을 작성 중입니다. 어떤 오류든지 stderr에 메시지를 출력하고 지정된 종료 상태로 System.exit()
을 호출하여 실행을 종료하는 함수 err_exit()
을 호출하고 있습니다.Java : 예외 및 '초기화되지 않았을 수 있습니다.'
public static void main(String[] args) {
String in_fname = "C:/tmp/test.txt"; // not reading args yet
String out_fname = "C:/tmp/test.sign";
byte[] file_data;
String hexdigest;
try {
file_data = readFileAsByteArray(in_fname);
}
catch (java.io.IOException ex) {
file_data = new byte[] {0}; // note this line well, please
err_exit(2, "error opening input file '" + in_fname + "'");
}
try {
hexdigest = hexdigestSha1(file_data);
}
catch (NoSuchAlgorithmException ex) {
hexdigest = ""; // note this line well, please
err_exit(3, "could not compute SHA1 message digest!");
}
try {
writeFileFromString(out_fname, hexdigest);
}
catch (java.io.IOException ex) {
err_exit(2, "error writing output file '" + out_fname + "'");
}
System.exit(0); // success
}
내가 충분히주의하도록 요청 두 줄이 있습니다 : 이것은 내 main()
기능이 어떻게 생겼는지 약이다. 이 두 줄은 컴파일러가 변수가 초기화되지 않았다고 불평하지 않기 위해 존재합니다.
컴파일러가 알 수있는 한 catch 블록이 계속 될 수 있습니다. 사실 err_exit()
은 절대로 돌아 오지 않으므로 잘못된 값이 전달 될 가능성이 없습니다.
그래서, 내 질문 :이 일을 처리하기위한 일반적인 Java 관용어는 무엇입니까? try
/catch
블록의 행은보기 흉한 것입니다. 다양한 함수를 err_exit()
이라고하고이 코드를 명시 적으로 사용하지 않도록 권하고 싶습니다. 나는 명시적인 체크를 선호한다고 생각하고, main()
함수가 체크를하기에 적합한 곳이지만, 나는 피드백에 관심이있다.
try
/catch
블록을 사용하려는 경우 컴파일러 경고를 무시하는 좋은 방법입니까?
파이썬에서이 작업을 수행했다면 예외를 잡아 내지 못하고 프로그램이 스택 추적으로 멈추도록 할 수 있습니다. 오류가 발생하면 스택 추적은이 사용자가 나인 이래로이 프로그램의 사용자에게 큰 충격을주지는 않습니다. 내 main()
함수를 throws Exception
으로 선언하면 예외를 잡을 수없고 파이썬처럼 동작합니다. 바로 생각하는 자바 사람들이 나를 피하려고하는 끔찍한 생각입니까?
P. 당신이 좋아하는 책/웹 페이지/내가 읽어야 할 Java 관용구가 있다면, 그것을 언급하십시오.
편집 : 변수 이름에 밑줄을 사용하여 사과드립니다. 나는 이미 실제 프로그램에있는 것들의 이름을 바꿨지만, 나는 그대로두고있다. 실제로 Python과 C로 프로그래밍하는 데 많은 시간을 소비했기 때문입니다. 나는 Python "PEP 8"스타일이나 일반적인 C 스타일을 사용하여 선택을했습니다.
두 변수를 선언 한 행을 게시하십시오. –
누락 된 자료를 추가하여 완전한 기능을 보였습니다. StackOverflow가 구문 색칠을 지금하고 있기 때문에 더 좋아 보입니다 ... 이전에는 없었습니다! – steveha