Java FAQ – часто задаваемые вопросы по Java


Вопрос: Как определить какая у меня JVM, 32-bit или 64-bit?
Ответ:
java -d64 -version

Вопрос: Как распаковать .jar файл?
Ответ:
jar xf jar-file [archived-file(s)]

Вопрос: Как обновить .war или .jar файл?
Ответ:
jar xf myapp.war WEB-INF/web.xml
nano WEB-INF/web.xml
jar -uf myapp.war -C ./ WEB-INF/web.xml


--

Вопрос: Как преобразовать int в byte?
Решение:
You can use 256 values in a byte, the default range is -128 to 127, but it can represent any 256 values with some translation.
int val = 233; 
byte b = (byte)val; 
System.out.println(b & 0xFF); // prints 233 (if you need unsigned value of byte use b&0xFF).

byte signedByte = -1;
int unsignedByte = signedByte & (0xff);
System.out.println("Signed: " + signedByte + " Unsigned: " + unsignedByte);
Would print out: "Signed: -1 Unsigned: 255"

Вопрос: Как сделать обход Map?
Решение:
for (Map.Entry<String, Object> entry : map.entrySet()) {
    String key = entry.getKey();
    Object value = entry.getValue();
    // ...
}

Вопрос: Как получить первый элемент в Map?
Ответ: Невозможно получить первый или последний элемент в Map потому что в этой структуре данных не поддерживается порядок или очередность. Map предоставляет значение только по ключу.

Question: How to check a String is a numeric type in Java?
Solution:
public static boolean isNumeric(String str)
{
    try { float f = Float.parseFloat(str); } catch(NumberFormatException nfe) { return false; }
    return true;
}

Вопрос: Как узнать версию Java на Mac OS X?
Решение:
java -version

Вопрос: Как скомпилировать много .java файлов?
Решение:
javac *.java

Question: How to show exception message?
Solution:
protected void showExceptionMessage(Exception e)
{
    System.out.println("#############################################");
    System.out.println("Exception message : "+e.getMessage() );
    System.out.println("#############################################");
    System.out.println("Exception message with class name : "+e.toString() );
    System.out.println("#############################################");
    e.printStackTrace();
}

Вопрос: Как получить массив строк удовлетворяющих регулярному выражению?
Решение:
1-й способ
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;

 ...

 List<String> allMatches = new ArrayList<String>();
 Matcher m = Pattern.compile("your regular expression here")
     .matcher(yourStringHere);
 while (m.find()) {
   allMatches.add(m.group());
 } 
2-й способ
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
List<String> matches = new ArrayList<String>();
while(m.find()){
    matches.add(m.group());
}

Вопрос: Как получить текущую дату и время?
Решение:
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));

Вопрос: Как сравнивать даты в Java?
Ответ:
Правильно использовать метод compareTo, т.к. он принадлежит интерфейсу Comparable. Метод equals принадлежит классу Object и сравнивает объекты, а не даты.
Date todayDate = new Date();
Date myDate = new Date(todayDate.getYear(), todayDate.getMonth() - 1, todayDate.getDay());
System.out.println("myDate is " + myDate);
System.out.println("todayDate is " + todayDate);
if (todayDate.compareTo(myDate) < 0)
 System.out.println("todayDate is lesser than myDate");
else if (todayDate.compareTo(myDate) > 0)
 System.out.println("todayDate is greater than myDate"); 
else
 System.out.println("Both dates are equal");
Кроме того, класс Date имеет методы before и after:
if(todayDate.after(historyDate) && todayDate.before(futureDate)) {
 // in between
}
К тому же можно использовать метод getTime() для получения численного значения даты.
Ещё как вариант можно использовать Joda-Time - Java date and time API.

Вопрос: Как получить последний день месяца?
Решение:
Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);

Вопрос: Как бороться с ошибкой java.lang.OutOfMemoryError?
Решение: Opcode Java Blog

Вопрос: Как работать с потоками?
Ответ:

Вопрос: Что означает исключение IllegalStateException? Когда обычно возникают эти исключения?
Ответ:
Возникает - когда угодно. Все имеют право его кидать при желании. А кидают обычно когда объект находится в противоречивом состоянии. Ошибка IllegalStateException, например, может возникнуть, если вы пытаетесь вызвать у сессии метод invalidate(), а она уже была закрыта:
public void doGet(HttpServletRequest req, HttpServletResponse res) {
 // ***
 req.getSession().invalidate();
 // ***
}

Или, например, при попытке форворда вроде:
<jsp:forward page="drugoe.jsp" />

если response уже был committed.

To be continued...