20200218のJavaに関する記事は5件です。

Selenuim 3.141.59 をeclipseで動かしてみる(java)

Seleniumのver上がっていたので初心者の方向けに詳しく書いていきます

環境

windows10 64bit
google chrome(80.0.3987.106)
eclipse (Version: 2019-12 (4.14.0))

Seleniumのダウンロード

まずこちらのサイトからzipファイルをダウンロードします。
https://selenium.dev/downloads/
下の方へ行くとここにたどり着きます
selenium.png
対象の言語のものをダウンロードします。
ダウンロードボタンを押すとzipファイルがダウンロードされます。
どこかに保存してzipを解凍する。
解凍すると中身がこんな感じになってます。
zip解凍.png
解凍したら昔のverとかなり中身が違ってました

chromedriverのダウンロード

次にテストするブラウザのWebDriverをダウンロード
私はGoogleChorme使うのでここにアクセス。
https://sites.google.com/a/chromium.org/chromedriver/downloads
サイトの中を見るとchromeのversionが書いてあります。
今のchromeと同じversionを選択してクリック
クリックするとここに飛びます。
chromium.png
windowsの64bit版が無いので32bitのものをダウンロードします。
これもzipになってたので解凍します。
解凍すると1つだけファイルが入っているのを確認してください。
chromiumExe.png
ここで必要なものを揃いました。

eclipseで動かす

ではeclipseでプロジェクト作って動かしてみます。
ワークススペースと選んで新規プロジェクト作成。
プロジェクトの下に"lib", "exe"のフォルダを作成

"lib"には
・解凍した"lib"フォルダの中身全部
・"client-combined-3.141.59-sources.jar"
・"client-combined-3.141.59.jar"

"exe"には
・chomredriver.exe
をimportで配置。

配置するとこんな感じになってます
配置.png

ビルドパスを通す

では追加したjarをビルドパスに追加していきます。
ビルド・パスの構成を開きましょう
(プロジェクトを右クリック -> ビルド・パス -> ビルド・パスの構成)
image.png

開いたあとは"ライブラリ"タブに移動します。
"クラスパス"をクリックして"jarの追加"を選択
image.png
追加するものは先ほど"lib"フォルダに追加したものです。(shift + 左クリックで一気に選択できるぜ)
追加するとこんな感じ
image.png
適用して閉じる。
これでjarファイルやらの設定は完了!

実行するファイルを作る

次に実行するファイル作ります。
"src"フォルダに新しいクラスを作成します。
クラス名は何でもいいです。
とりあえずsampleはこんな感じ

Sample.java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class Sample {

    public static void main(String[] args) throws InterruptedException {
        // TODO 自動生成されたメソッド・スタブ
          // Optional, if not specified, WebDriver will search your path for chromedriver.
          System.setProperty("webdriver.chrome.driver", "./exe/chromedriver.exe");

          WebDriver driver = new ChromeDriver();
          driver.get("http://www.google.com/xhtml");
          Thread.sleep(5000);  // Let the user actually see something!
          WebElement searchBox = driver.findElement(By.name("q"));
          searchBox.sendKeys("ChromeDriver");
          searchBox.submit();
          Thread.sleep(5000);  // Let the user actually see something!
          driver.quit();
    }

}

javaアプリケーションで実行すると動作が確認できます
以上です。

ほとんど参考のものを引っ張っただけですけどね
Seleniumのzipファイルの中身が違いすぎてビックリした私のような初心者向けだと思って頂ければ...

参考

https://qiita.com/tsukakei/items/41bc7f3827407f8f37e8

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

コーディング中の警告解消時の注意点

はじめに

みなさん!コーディング時の警告はちゃんと解消してますよね?

ただ、「はいはいいつものやついつものやつ」とか「またこれねハイハイ」とか容易にソースを修正してませんか?

特にテストやらなんやら終わった後のクラスとかで「あれ?警告でてるじゃん、消しとこ」とかで軽い気持ちで修正しちゃったりとかありませんか?

その修正が思わぬ不具合につながるかもしれませんよ?

まえおき

理解してる人はあたりまえの話なのでそこはあたたかい目で読んでいただければと思います

例を作るにあたり、いろいろ突っ込みどころがあると思いますがご容赦を・・・!

ほんだい

極端な例ですが、例えばこんなclassがあったとします。

public class TestClass {

    TestClass() {

        hogeInt hogeInt = new hogeInt();

        ...

        if (特定の条件) {

            Log.d("TAG", "前");

            Boolean flg = hogeInt.getIntParam().equals(1);

            Log.d("TAG", "後");

            Toast.makeText(context,"サーバーに truncate table * のクエリを投げました",Toast.LENGTH_LONG).show();
        }

        ...

    }

}

class hogeInt {

    private Integer intParam = null;

    @Nullable
    public Integer getIntParam() {
        return this.intParam;
    }

    public void setIntParam(Integer intParam) {
        this.intParam = intParam;
    }
}

そして特定の条件内に入るのが極稀なケースだったとします。

ここでひとつPointなのですが、これを何もせずに実行した場合、

Toast.makeText(context,"サーバーに truncate table * のクエリを投げました",Toast.LENGTH_LONG).show();

実行される前にクラッシュします。
( hogeInt.getIntParam() はNull なのに equals を実行しようとしているので)

そして本題。

Boolean flg = hogeInt.getIntParam().equals(1);

こいつは警告として表示されます。
今回だと「’NullPointerException’を生成する可能性があります」ってやつですね。わりかしよく見かける部類の警告だと思います。

これをアプリ改良中に「あれ?ここ警告でてるからついでに修正しておこう」とか「そういえばたまにクラッシュ報告あるけどこいつかも」
といった軽い感じで何も考えずにソースを修正した場合

ソースがこう変化します

public class TestClass {

    TestClass() {

        hogeInt hogeInt = new hogeInt();

        ...

        if (特定の条件) {

            Log.d("TAG", "前");

            if (hogeInt != null) {
                Boolean flg = hogeInt.getIntParam().equals(1);
            }

            Log.d("TAG", "後");

            Toast.makeText(context,"サーバーに truncate table * のクエリを投げました",Toast.LENGTH_LONG).show();
        }

        ...

    }

}

今までクラッシュしていた部分をnullチェックでスルーする事によって後続が流れるようになり、めでたくサーバにTruncate文が投げられる事になりました。

ちなみに今回のお話は警告は残しておいてもいいよ!という事ではなく、小さな警告を消す場合でも慎重になれという事です。

何かしら修正を入れる場合、その一文だけを見ずに、全体の流れをちゃんと把握した上で修正しましょう!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[java] staticを使う理由

javaを使っていてstaticとかどうやって使い分けるのかあいまいだったので、それを調査した。

static

メソッドやメンバ変数にstatic修飾子を付けると、staticメソッド、static変数になります。
static修飾子を付けると何が変わるかというと、newしなくてもそのメソッドやメンバ変数にアクセスできるようになります。

http://www.366service.com/jp/qa/75864cfae2ee945a362e5a9818cabb58

つまり共通のメソッドや変数をクラス間で共有したい場合に使うということ。以前Applicationクラスを通してデータをやり取りするという記事を書いたが、それと同じである。
https://qiita.com/QiitaD/items/549fb2143b2774c30d72

(それにしてもstaticおじさんはさすがに笑った…)

ほかにも「インスタンス化しなくても利用できるから」というものがある。Utilityクラスなどは、メソッド単体で処理が完結している、つまりクラスを定義した時点で用途が確定しているので、インスタンス化が必要ないということらしい。その場合はstaticもする。
https://teratail.com/questions/13203

感想

staticについてはわかったが、publicやfinal等まだわかっていない。
publicとprivateは言わずもがなオブジェクト指向設計の観点から使い分けるのだろう。
しかしprotectedやデフォルトがなぜ存在しているのかわからない(アクセスに違いがあるのはわかるが)ので、それも調べてみたい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

インスタンスの扱い方

Javaの学習における自分用のmemoです。

インスタンスとは

・クラス(設計図)を具現化したもの
・ヒープ領域に保存される※1
・newと言うキーワードを使って生成する※2

※1 ヒープとは、JVM上で「ユーザが作ったプログラムが利用するメモリ領域」のこと
※2 newはヒープ領域に「新しくインスタンス用の領域を確保する」という意味の命令

参照型変数とは

・インスタンスそのものでなく、インスタンスへの参照(住所のようなもの:リンク情報)が入っている
・オブジェクト型変数とも呼ぶ
・参照がない状態を示す特別な値にnullというのがある

プリミティブ型変数とは

・変数そのものがデータ
・int型やdouble型、char型など
・仕様として提供されている基本的な型

コンストラクタメソッド

・インスタンス生成と同時に自動的に実行される
・メソッド名はクラス名と同じにしなければならない
・戻り値型を記述できない
・インスタンス生成時のみ呼び出し可能
・プログラマーが定義しなくてもコンパイラによって自動的に定義される(デフォルトコンストラクタ)
・プログラム実行時、コンストラクタの処理が終わってから他のメソッドが呼び出せるようになる

ガベージコレクション

・不要になったインスタンスをメモリから自動で破棄してくれる自動メモリ管理機能があり、これを「ガベージコレクタ」という
・ガベージコレクションが実行されるタイミングはガベージコレクタが自動的に判断する
・ガベージコレクタがメモリ内のインスタンスを破棄する行為のこと

オーバーロード

・メソッド名と引数をまとめてシグニチャと呼ぶ
・シグニチャが異なれば異なるメソッドとしてコンパイラやJVMに識別される
・コンストラクタもオーバーロードできる

クラス変数とクラスメソッド

・ヒープ領域の一部にクラスファイルを保管しておき、そこからインスタンスを生成する仕組みがある
・このクラスファイルを保管する領域を「パーマネント領域」と呼ぶ
・static修飾子のついたメソッドやフィールドはstatic領域に作られる
・staticなメソッドやフィールドはインスタンスが生成されていなくても使うことができる
・staticメンバーからインスタンスメンバーにアクセスしようとするとコンパイルエラーになる

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

コマンドプロンプトでjava -versionしてもJAVA_HOMEに設定したJDKが出てこない問題

前提条件

PC環境
  • Winsows10
  • Java6(x64)

コマンドプロンプトでjava -versionしてもJAVA_HOMEのJDKが出てこない

タイトルの通りなので以下解決方法。

下記コマンドを実行して

C:\Users\test>set JAVA_HOME
C:\Users\test>where java

以下のように表示されたらJava 6 Update 45などの名前のファイルがインストールされているのでアンインストールする。

C:\Users\test>set JAVA_HOME
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_21

C:\Users\test>where java
C:\Windows\System32\java.exe
C:\Program Files\Java\jdk1.7.0_21\bin\java.exe

PCを再起動して以下のコマンドを実行するとC:\Windows\System32\java.exeが削除されているはず。

C:\Users\test>where java
C:\Program Files\Java\jdk1.7.0_21\bin\java.exe

これでjava -versionを実行するとJAVA_HOMEに設定したJDKが正しく読み込まれるようになる。

C:\Users\test>java -version
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

補足

一度、環境構築してから言語のバージョンアップのようなメジャーアップデートでもしない限り
基本的にJDKをアップデートすることはないと思われるので、アップデータはインストールしておく必要はない。

※セキュリティ的に問題はあるのでできれば最新のJDKで開発した方がいい

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む