JVMのソースコードを読むための準備

JDK/JRE/JVM

JVMとは

Javaバイトコードとして定義された命令セットを実行するスタック型の仮想マシン(Java Virtual Machine) 。JRE(Java Runtime Environment)に入っている。

JREとは

Java実行環境。JVMやAPIが入っている。

JDKとは

Java開発キット(Java Development Kit)。JREが入っている。

具体的に何が入っているのか確かめる

ソースコードを取得する

OpenJDKはMercurialというソースコード管理システムで管理されている。Mercurialをインストールする(ubuntu)

パッケージのダウンロード

sudo apt-get install mercurial

ソースコードを取得するにはターミナルから下記を実行(jdk8)

hg clone http://hg.openjdk.java.net/jdk8/jdk8

するとjdk8というフォルダがhome以下にできる

この時点でフォルダの中を見てみると、makefileや.cファイルの存在を確認できる。まだ.javaファイルはない。
ターミナルからjdk8の中に入り、get_source.shを実行するとソースコードを全て取得できる。

JavaScript スタイルシートを操作する②

<link rel="stylesheet" type="text/css" href="style.css"/>
<script type="text/javascript">
 //className.html
 //外部スタイルシートで定義されたスタイル(スタイルクラス)にアクセスするには
 //classNameプロバティを使用する。
 function changeStyle(elem, clazz){
     //指定要素に対して、スタイルクラスclazzを適用する
     elem.className = clazz;
 }
</script>

<div onmouseover="changeStyle(this, 'highlight')"
     onmouseout="changeStyle(this, 'normal')">
    マウスを乗せると色が変わります。</div>
/*style.css*/
.Highlight{
    Background-color: Pink;
}
.normal{
    Background-color: White;
}

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript スタイルシートの操作①

<script type="text/javascript">
 //JavaScriptからスタイルシートを操作①
 
 //インラインスタイルにアクセスする。<div>タグにマウスポインタを載せたタイミングで背景色をピンクに、外したタイミングで下の白色に切り替える。
 function changeStyle(elem, color){
     elem.style.backgroundColor = color;
 }
</script>

<div onmouseover="changeStyle(this, 'Pink')"
     onmouseout="changeStyle(this, 'White')">
    マウスを乗せると色が変わります。</div>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript 新規にノードを追加する

<script type="text/javascript">
 //新規にノードを追加する
 
 //フォームに入力した内容を下にページ下部に対応するリンクを追加する
 //追加ボタンをクリックしたタイミングで実行されるadd関数
 function add(f){
     //<a>タグを生成
     var anchor = document.createElement('a');
     //<a>タグのhref属性を設定
     anchor.href = f.url.value;
     //テキストノードを生成し、<a>タグの直下に追加
     var name = document.createTextNode(f.name.value);
     anchor.appendChild(name);
     //<br>タグを生成
     var br = document.createElement('br');
     //<div id="list">を取得
     var list = document.getElementById('list');
     //<div>タグ直下に<a>,<br>タグの順番で追加
     list.appendChild(anchor);
     list.appendChild(br);
 }
</script>

<form>
    <label>サイト名:<br />
        <input type="text" name="name" size="30"/></label><br />
        <label>URL:<br />
            <input type="text" name="url" size="50"/></label><br />
            <input type="button" value="追加" onclick="add(this.form)"/>
</form>
<div id="list"></div>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript ウィンドウサイズやスクロール位置を操作する

<html>
    <head>
        <body>
<!-- moveByメソッド、resizeByメソッドはChromeでは未対応 -->
 <input type="button" value="scrollTo" onclick="window.scrollTo(0,200)"/>
 <input type="button" value="moveBy" onclick="moveBy(100,100)"/>
 <input type="button" value="resizeBy" onclick="window.resizeBy(50,50)"/>
 1<br>
 1<br>
 1<br>
 1<br>
 1<br>
 1<br>
 1<br>
 1 <br>
 1<br>
 1<br>
 
        </body>
    </head>
</html>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript タイマー機能の実装

<script>
 //タイマー機能の実装
 //タイマーIDを格納するためのグローバル変数
 var timer;
 //ページロード時にタイマー処理を登録
 window.onload = function(){
     timer = window.setInterval(
         //現在の時刻を<div id='result'>タグに表示(1000ミリ秒ごとに更新)
         function(){
             var dat = new Date();
             document.getElementById('result').innerHTML = dat.toLocaleTimeString();
         },1000
     );
 };
</script>

<!-- ボタンクリック時にタイマー処理を中止 -->
<input type="button" value="タイマー停止" onclick="clearInterval(timer)"/>
<div id="result"></div>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript サブウィンドウを生成する

<script type="text/javascript">
 //サブウインドウを表すWindowオブジェクトを格納する変数
 var subwin;
 //サブウィンドウを開くボタンクリック時に実行
 function win_open(){
     subwin = window.open('http://www.wings.msn.to/', 'Sample',
     'width=600,height=300,scrollbars=yes,location=yes');
 }
 //サブウィンドウを閉じるボタンクリック時に実行
 function win_close(){
     //変数subwinが空でなく、サブウィンドウが閉じられていない時にのみクローズ
     if(subwin && !subwin.closed){
         subwin.close();
     }
 }
</script>

<input type="button" value="サブウィンドウを開く" onclick="win_open()"/>
<input type="button" value="サブウィンドウを閉じる" onclick="win_close()"/>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript ハンドラー3

<script type="text/javascript">
    //ページロード時に実行されるイベントハンドラを登録
    window.onload = function(){
    //ボタンクリック時に実行されるイベントハンドラを登録
    document.getElementById('btn').onclick = function(){
    window.alert('ボタンがクリックされました');
    };
    };
</script>
<input id="btn" type="button" value="ダイアログ表示"/>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript ハンドラー1

<script type="text/JavaScript">

 function btn_onclick(){
     window.alert('ボタンがクリックされました');
 };
 //-->
</script>

<input type="button" value="ダイアログ表示" onclick="btn_onclick()" />

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript 継承

<script>
//クラスベースなオブジェクト指向によく似た継承を実現する方法
 //予め用意したMemberクラスを継承してSpecialMemberクラスを定義する
 function initializeBase(derive, base, baseArgs){
     base.apply(derive, baseArgs);
     for(prop in base.prototype){
         var proto = derive.constructor.prototype;
         if(!proto[prop]){
             proto[prop] = base.prototype[prop];
         }
     }
 }

 //Memberクラスを定義
 var Member = function(firstName, lastName){
     this.firstName = firstName;
     this.lastName = lastName;
 };

 Member.prototype.getName = function(){
     return this.lastName + ' ' + this.firstName;
 };

 //Memberクラスを継承したSpecialMemberクラスを定義
 var SpecialMember = function(firstName, lastName, role){
     initializeBase(this, Member, [firstName, lastName]);
     this.role = role;
 }

 SpecialMember.prototype.isAdministrator = function(){
     return (this.role == 'Administrator');
 };

 var mem = new SpecialMember('Jhon', 'Paul', 'Administrator');
 document.writeln('名前:' + mem.getName());
 document.writeln('管理者:' + mem.isAdministrator());
</script>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript コンストラクタ

<script>
 var Member = function(firstName, lastName){
//thisはコンストラクタによって生成されるインスタンスを表す。
     this.firstName = firstName;
     this.lastName = lastName;
     this.getName = function(){
         return this.lastName + ' ' + this.firstName;
     }
 };

 var mem = new Member(' Jhon', 'Paul');
 document.writeln(mem.getName());
</script>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript クラス

<script>
 //JavaScriptのオブジェクト指向はプロトタイプベースのオブジェクト指向であり
 //クラスベースのオブジェクト指向ではない

 // 「クラス」を定義
 var Member = function(){};

 //インスタンス化
 var mem = new Member();//JavaScriptでは関数にクラスとしての役割を与えている
 //new演算子によってオブジェクトを生成することを想定した関数オブジェクトのことを
 //コンストラクタと言っている。
 //Member関数がコンストラクタにあたる。
</script>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

JavaScript this

<script>
 var Member = function(firstName, lastName){
//thisはコンストラクタによって生成されるインスタンスを表す。
     this.firstName = firstName;
     this.lastName = lastName;
     this.getName = function(){
         return this.lastName + ' ' + this.firstName;
     }
 };

 var mem = new Member(' Jhon', 'Paul');
 document.writeln(mem.getName());
</script>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

オブジェクト指向 JavaScript1

<script>
 //JavaScriptのオブジェクト指向はプロトタイプベースのオブジェクト指向であり
 //クラスベースのオブジェクト指向ではない

 // 「クラス」を定義
 var Member = function(){};

 //インスタンス化
 var mem = new Member();//JavaScriptでは関数にクラスとしての役割を与えている
 //new演算子によってオブジェクトを制し得することを想定した関数オブジェクトのことを
 //コンストラクタと言っている。
 //Member関数がコンストラクタにあたる。
</script>

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで