顯示具有 Java 標籤的文章。 顯示所有文章
顯示具有 Java 標籤的文章。 顯示所有文章

2016年9月2日 星期五

開發時,Java的版本設定......

在使用Eclipse、Tomcat等時,很怕Java的JDK、JRE等版本不相對,或是出現"Unsupported major.minor version 52.0"之類的訊息,這時就得去挖所有相關的環境設定,我也被這情況弄過幾次,所以在此記錄一下。

確認執行Tomcat的電腦使用的Java版本,通常可以從控制台的解除安裝程式來看,但是也許你會安裝好幾個版本的Java版本在裡面,所以用CMD來看比較妥當,這樣才能確認電腦到底是使用哪個版本的Java,分別輸入"java -version"和"javac -version",就可以看到結果:


再來是Eclipse內,一般大家都知道的是Project內的Library引用設定,在Project上用滑鼠右鍵開起選單,選擇"Properties":


然後在左邊選擇"Java Build Path",來觀看Libraries內的JRE版本:


但其實還有其它地方也和Java版本有關係,一個是"Java Complier"的"Compiler compliance level":


另一個是"Project Facets"的設定,這些都和Java版本有關:


以後應該不會再被Java版本這種設定給弄到了。


2016年8月29日 星期一

使用Java取得當前JSP的名稱

我需要取得JSP、當前網頁的名稱,因此搜尋了一下做法;原先以為有this之類的方式可取得,結果是使用request取得網址,再過濾出名稱。
String uri = request.getRequestURI();
String pageName = uri.substring( uri.lastIndexOf( "/" ) + 1 );
這樣就可取得網址和過濾後的網頁名稱,蠻好用的。

2016年8月2日 星期二

在Java和JavaScript內的HashMap用法

HashMap在寫程式時很常使用,還有一種兼具順序的LinkedHashMap存在;這邊要講的是在Java和JavaScript內要使用時,兩者不一樣的地方。

在Java內:
HashMap<String, String> testHashMap = new HashMap<>();

testHashMap.put( "1", "Kim" );
testHashMap.put( "2", "Dick" );

for( String key : testHashMap.keySet() )
{
    System.out.println( key + " = " + testHashMap.get( key ) );
}
--------------------------------------------------------------------------------------------------------
在JavaScript內:
var testHashMap= {};

testHashMap['1'] = 'Kim';
testHashMap['2'] = 'Dick';

for( var key in testHashMap )
{
    alert( key + ' = ' + testHashMap[key] );
}

2016年7月28日 星期四

Java內判斷String是否為有效數字的方式

通常要把String轉換為Integer時,都得先知道String的內容是不是純數字,這樣轉換才會正確;所以找了一下判斷的方式,有NumberUtils.isNumber()、StringUtils.usNumeric()和StringUtils.isNumericSpace()三種,要使用這些方法的話,必需要下載Apache Commons Lang的封包檔,並匯入到Project內。

Apache Commons Lang可去其官網處下載:
http://commons.apache.org/proper/commons-lang/download_lang.cgi

像我便是下載commons-lang3-X.X-bin.zip,解壓縮後把其中的jar檔匯入到Eclipse的Project內。

接著撰寫程式:
import java.util.*;
import org.apache.commons.lang3.math.NumerUtils;

public class XXX {

    public static void main(String[] args)
    {
        String testString = "A1";

        System.out.rintln( NumberUtils.isNumber( testString ) );
    }
}
是文字便為false,是數字便為true。

2016年7月13日 星期三

Java內控制資料庫的AutoCommit、Commit和Rollback

在控制資料庫的執行時,一般在Eclipse內是設定為自動Commit的;可是如果遇到需要transaction的情況,就不能把環境設定為自動Commit,而得用手動的方式Commit出去;如果遇到錯誤的話,還得Rollback回來之前所有已執行的動作。

所以來列出這三個API:
import java.sql.*;

public class XXX {

    public static void main(String[] args)
    {
        Connection connection;

        try
        {
            connection.setAutoCommit( false );
            connection.commit();
            connection.rollback();
        }
        catch( Exception e )
        {
            e.printStackTrace();
        }
    }
}
這三個API必需要在Try-Catch內才能執行

Java的Try-Catch錯誤表現方式

在使用Java的Try-Catch,有個很好用的錯誤表現方式:
Integer x = 1;

try
{
    if( x > 0 )
    {
        throw new Exception( "錯誤" );
    }
}
catch (Exception e)
{
    e.printStackTrace();
}
這樣透過throw new Exception(),就會跳到catch()的部分,並且會在console上出現訊息。

2016年6月27日 星期一

Java的現在時間取法,和延遲用法

首先是我需要使用Java來取得現在時間,Java裡和時間相關的Class有好幾個,看了看網上的資訊後我決定使用java.time來實作。
import java.time.*;

public class MainProcess{

    public static void main(String[] args)
    {
        LocalDateTime currentDateTime = LocalDateTime.now();

        System.out.println( currentDateTime );
    }
}

要注意的是,currentDateTime只是儲存了LocalDateTime.now()所取得的時間值,故一會兒後再使用currentDateTime的話,裡面的時間值可不會自動改變喔。每次要取得最新的"現在時間值"的話,就必須反覆使用LocalDateTime.now()。

LocalDateTime的結果並不包含時區,如果要直接取得時間 + 時區的結果,可以使用ZonedDateTime的Class。
import java.time.*;

public class MainProcess{

    public static void main(String[] args)
    {
        ZonedDateTime currentDateTime = currentZoneTime.now();

        System.out.println( currentZoneTime );
    }
}

如果是想要單純取得時區,可以使用ZonedDateTime下的一些方法,通常可以取得的結果有兩種:時區的區域名稱,和時區的時差數值。
import java.time.*;

public class MainProcess{

    public static void main(String[] args)
    {
        ZonedDateTime currentDateTime = currentZoneTime.now();

        System.out.println( currentZoneTime.getZone() );
        System.out.println( currentZoneTime.getOffset() );
    }
}

然後是如果執行程式時需要延遲一會兒,有Thread.sleep()和TimeUnit.sleep這兩個用法,這邊我選擇TimeUnit.sleep,因為有比較完整的用法,還可分為從TimeUnit.DAYS到TimeUnit.NANOSECONDS各種不同時間單位的使用方式,這邊使用TimeUnit.SECONDS來實作。
import java.time.*;
import java.util.*;
import java.util.concurrent.*;

public class MainProcess{

    public static void main(String[] args) throws InterruptedException
    {
        for( int i = 0; i < 10; i++ )
        {
            TimeUnit.SECONDS.sleep( 1 );

            System.out.println( LocalDateTime.now() );
        }
    }
}