元の投稿者による投稿: 2008-06-17 15:26:20
lJBS
1. JAVA言語の利点を10個挙げてください
a: 無料、オープンソース、クロスプラットフォーム (プラットフォーム非依存)、使いやすい、完全な機能、オブジェクト指向、堅牢、マルチスレッド、構造中立、エンタープライズ アプリケーション、ワイヤレス アプリケーション向けの成熟したプラットフォーム
2. JAVA のオブジェクト指向プログラミング用語を 10 個挙げる
a: パッケージ、クラス、インターフェース、オブジェクト、属性、メソッド、コンストラクター、継承、カプセル化、ポリモーフィズム、抽象化、パラダイム
3. JAVA で一般的に使用される 6 つのパッケージをリストします。
Java.lang;java.util;java.io;java.sql;java.awt;java.net;java.applet;javax.swing
4. JAVA における識別子の機能と特徴は何ですか? 機能: 識別子は、変数、クラス、およびメソッドに名前を付けるために使用されます。 特徴: 文字、アンダースコア「_」および「$」文字で始まることに加えて、それらの後に続けることができます。文字、アンダースコア「_」および「$」文字または数字
Java では大文字と小文字が区別され、識別子も例外ではありません
5.JAVAのキーワードの特徴は何ですか? キーワードを20個以上挙げてください。
特定の意味が与えられ、特別な目的に使用される Java の一部の単語はキーワードと呼ばれます。
すべての Java キーワードは小文字であり、TURE、FALSE、NULL などは Java キーワードではありません。
goto と const は、決して使用されませんが、Java キーワードとして予約されています。
• には Java というキーワードが合計 51 個あります。
抽象アサート ブール値 ブレーク バイト 継続
case catch char クラス const double
デフォルトの do extend else Final float
goto Long の場合、インポートを実装する
int インターフェイスのネイティブの新しい null インスタンス
パッケージ private protected public return short
静的 strictfp スーパー スイッチがこれを同期しました
void throw が一時的な試行をスローする間
揮発性の
6.JAVA ではデータ型はどのように分類されますか?
単純なデータ型と参照データ型に分類できます。
単純なデータ型: 数値型 (byte、short、int、long、float double)、文字型 (char)、ブール型 (boolean)。
参照データ型: クラス、インターフェイス、配列。
7. JAVAにおける演算子の分類と例
• 区切り文字:,,;,[],()
• 算術演算子: +、―、*、/、%、++、―
• 関係演算子: >、<、>=、<=、==、!=
• ブール論理演算子: !、&、|、^、&&、||
• ビット演算子: &、|、^、~、>>、< <、>>>
• 代入演算子: = 拡張代入演算子: +=、―=、*=、/=
• 文字列連結演算子: +
• 形状演算子: ()
8.superとthisキーワードの機能と使い方
• Java クラスで super を使用して、親クラスのコンポーネントを参照します
– 親クラスでスーパー定義された属性にアクセスするために使用できます
– 親クラスでスーパー定義されたメンバーメソッドを呼び出すために使用できます
– サブクラス コンストラクター内でスーパー クラス コンストラクター super を呼び出すために使用できます。
– トレーサビリティは直接の親クラスのスーパーに限定されません
変数の名前の競合と不確実性の問題を解決するために、キーワード「this」が導入され、それが配置されているメソッドの現在のオブジェクトを表します。ジャワ
– コンストラクターは、コンストラクターによって作成された新しいオブジェクトを参照します。
– メソッドは、メソッドを呼び出すオブジェクトを参照します。
• キーワードの使用法
– クラス自体のメソッドまたはコンストラクターで、クラスのインスタンス変数とメソッドを参照します。
– 現在のオブジェクトをパラメータとして他のメソッドまたはコンストラクタに渡します。
– 他のオーバーロードされたコンストラクターを呼び出すために使用されます
9. JAVA の式とは何ですか?それは何をするのですか?
• 式は演算子とオペランドの組み合わせであり、あらゆるプログラミング言語の重要なコンポーネントです。
• 式を使用すると、プログラマは Java で数学的計算、値の比較、論理演算、オブジェクトの操作を実行できます。
• 式の例:
–X
– X+10
– Y=x+10
– 編[10]
– Student.geName()
10. JAVA のすべての修飾子とその適用範囲 (コンストラクター、プロパティ、空きブロックなどを変更できるか) をリストした表を作成します。
クラス属性メソッドビルダーフリーブロック内部クラス
公開 YYY Y Y
保護済み YY Y Y
(デフォルト) YYYYYY
プライベート YY Y Y
最終 YY Y Y
抽象的 Y Y Y
静的 Y YY
11. for ループを使用して九九を出力するメソッドを作成します。
/**
* for ループは九九を出力します。
*/
publicvoid nineNineMultiTable()
{
for (int i = 1,j = 1; j <= 9; i++) {
System.out.print(i+"*"+j+"="+i*j+" ");
if(i==j)
{
i=0;
j++;
System.out.println();
}
}
}
12. java.util.Date オブジェクトを指定して、「2007-3-22 20:23:22」の形式の文字列に変換する方法
/**
*日付を固定形式の文字列に変換します
*@paramdate
*@returnstr
*/
public String dateToStr(java.util.Date 日付)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
文字列 str = sdf.format(date);
文字列を返します。
}
13. 整数が素数かどうかを判断できるメソッドを作成します。
/**
* 整数が素数かどうかを判断します
*@paramn
*@returnboolean
*/
publicboolean isPrimes(int n)
{
for (int i = 2; i <= Math.sqrt(n); i++) {
if(n%i==0)
{
false を返します。
}
}
true を返します。
}
14. 任意の整数を入力し、その階乗を返すメソッドを作成します。
/**
*任意の整数の階乗を取得します
*@paramn
* @return !
*/
publicint 階乗 (int n)
{
//再帰
if(n==1)
{
1を返します。
}
n*factorial(n-1) を返します。
//非再帰的
// int multi = 1;
// for (int i = 2; i <= n; i++) {
// マルチ*=i;
// }
// マルチを返します。
}
15. 二分探索を使用して整数配列に整数が存在するかどうかを判断するメソッドを作成します。存在する場合は、配列内のインデックス位置を返します。
/**
*整数配列内の特定の整数の位置の二分探索 (再帰的)
*@paramdataset
*@paramdata
*@parambeginIndex
*@paramendIndex
*@returnindex
*/
publicint binarySearch(int[] データセット,int データ,int beginIndex,int endIndex)
{
int midIndex = (beginIndex+endIndex)/2;
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex)return -1;
if(データ <データセット[midIndex])
{
return binarySearch(dataset,data,beginIndex,midIndex-1);
}elseif(データ>データセット[midIndex])
{
return binarySearch(dataset,data,midIndex+1,endIndex);
}それ以外
{
MidIndex を返します。
}
}
/**
*整数配列内の特定の整数の位置を二分探索します (非再帰的)
*@paramdataset
*@paramdata
*@returnindex
*/
publicint binarySearch(int[] データセット,int データ)
{
int beginIndex = 0;
int endIndex = dataset.length - 1;
int midIndex = -1;
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex)return -1;
while(beginIndex <= endIndex) {
MidIndex = (beginIndex+endIndex)/2;
if(データ <データセット[midIndex]) {
endIndex = MidIndex-1;
elseif(データ>データセット[midIndex]) {
beginIndex = MidIndex+1;
}それ以外
{
MidIndex を返します。
}
}
-1 を返します。
}
16. ブリーダーが動物に餌を与える例は、JAVA のオブジェクト指向の考え方とインターフェイス (抽象クラス) の有用性を反映しています。
パッケージcom.softeem.demo;
/**
*@著者レノ
*アニマルインターフェース
*/
インターフェース 動物
{
publicvoid Eat(食べ物 food);
}
/**
*@著者レノ
・動物の種類:猫
*/
Cat クラスは Animal を実装します
{
publicvoid Eat(食べ物・食べ物)
{
System.out.println("子猫が食べる"+food.getName());
}
}
/**
*@著者レノ
・動物の種類:犬
*/
クラス犬の実装動物
{
publicvoid Eat(食べ物・食べ物)
{
System.out.println("子犬の咀嚼"+food.getName());
}
}
/**
*@著者レノ
*食品抽象クラス
*/
抽象クラス食品
{
protected 文字列名。
public String getName() {
名前を返します;
}
publicvoid setName(文字列名) {
this.name = 名前;
}
}
/**
*@著者レノ
※食品群:魚
*/
クラス魚は食べ物を拡張します
{
public Fish(文字列名) {
this.name = 名前;
}
}
/**
*@著者レノ
※食品群:骨
*/
クラス 骨は食物を拡張します
{
public Bone(文字列名) {
this.name = 名前;
}
}
/**
*@著者レノ
※ブリーダー部門
*
*/
クラスフィーダー
{
/**
※ブリーダーは、ある種類の動物に、ある種類の餌を与えます。
*@パラマニマル
*@paramfood
*/
パブリックボイドフィード(動物、食用食品)
{
動物.食べる(食べ物);
}
}
/**
*@著者レノ
*動物に餌を与えるテストブリーダー
*/
パブリッククラス TestFeeder {
publicstaticvoid main(String[] args) {
フィーダー feeder=new Feeder();
動物 Animal=new Dog();
Food food=new Bone(「肉の骨」);
feeder.feed(animal,food) //犬に肉の骨を与える
動物=新しい猫();
food=new Fish("魚");
feeder.feed(animal,food) //猫に魚を与える
}
}
18. シングルモードのクラスを作成し、プロパティ ファイルを 1 回だけロードする
パッケージcom.softeem.demo;
java.io.FileInputStreamをインポートします。
インポートjava.io.FileNotFoundException;
インポート java.io.IOException;
java.io.InputStreamをインポートします。
java.util.Propertiesをインポートします。
/**
*@著者レノ
*シングル モード。構成プロパティ ファイルはアプリケーション全体で 1 回だけロードされます。
*/
パブリッククラス シングルトン {
privatestatic シングルトン インスタンス。
privatestaticfinal String CONFIG_FILE_PATH = "E:\config.properties";
プライベートプロパティ設定。
プライベートシングルトン()
{
config = 新しいプロパティ();
入力ストリームは;
試す {
is = 新しい FileInputStream(CONFIG_FILE_PATH);
config.load(is);
is.close();
} catch (FileNotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} キャッチ (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
publicstatic シングルトン getInstance()
{
if(インスタンス==null)
{
インスタンス = 新しいシングルトン();
}
インスタンスを返す;
}
public プロパティ getConfig() {
戻り設定;
}
publicvoid setConfig(プロパティ構成) {
this.config = 構成;
}
}
l J2SE
19. 指定したパスにディレクトリ(ファイル)をコピーします
/**
*ディレクトリまたはファイルを指定したパスにコピーします
*@paramsource
*@paramtarget
*/
publicvoid copy(ファイルソース,ファイルターゲット)
{
ファイル tarpath = new File(target,source.getName());
if(source.isDirectory())
{
tarpath.mkdir();
ファイル[] dir = ソース.listFiles();
for (int i = 0; i < dir.length; i++) {
コピー(dir[i],tarpath);
}
}それ以外
{
試す {
入力ストリームは = 新しい FileInputStream(ソース);
OutputStream os = 新しい FileOutputStream(tarpath);
byte[] buf = newbyte[1024];
int len = 0;
while((len = is.read(buf))!=-1)
{
os.write(buf,0,len);
}
is.close();
os.close();
} catch (FileNotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} キャッチ (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
20. JAVAのマルチスレッドを使用した銀行引き出し問題の例
パッケージcom.softeem.demo;
/**
*@著者レノ
*アカウントの種類
*デフォルトで残高があり、お金を引き出すことができます
*/
クラスアカウント {
プライベートフロートバランス = 1000;
publicfloat getBalance() {
リターンバランス;
}
publicvoid setBalance(浮動小数点残高) {
this.balance = バランス;
}
/**
*出金方法を同期する必要があります
*@parammoney
*/
publicsynchronized無効出金(フロートマネー)
{
if(残高>=お金)
{
System.out.println("取られた"+お金+"元!");
試す {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
残高-=お金。
}
それ以外
{
System.out.println("残高不足です!");
}
}
}
/**
*@著者レノ
*銀行カード
*/
クラス TestAccount1 は Thread { を拡張します
プライベートアカウントアカウント;
public TestAccount1(アカウントアカウント) {
this.account = アカウント;
}
@オーバーライド
publicvoid run() {
account.withdrawals(800);
System.out.println("残高は次のとおりです:"+account.getBalance()+"元!");
}
}
/**
*@著者レノ
*通帳
*/
class TestAccount2 extend Thread {
プライベートアカウントアカウント;
public TestAccount2(アカウントアカウント) {
this.account = アカウント;
}
@オーバーライド
publicvoid run() {
account.withdrawals(700);
System.out.println("残高は次のとおりです:"+account.getBalance()+"元!");
}
}
publicclass テスト
{
publicstaticvoid main(String[] args) {
アカウント account = 新しいアカウント();
TestAccount1 testAccount1 = 新しい TestAccount1(アカウント);
testAccount1.start();
TestAccount2 testAccount2 = 新しい TestAccount2(アカウント);
testAccount2.start();
}
}
21. JAVA でマルチスレッドを使用して駅の切符販売の問題を例に挙げる
パッケージcom.softeem.demo;
/**
*@著者レノ
※チケット販売
*/
クラス SaleTicket は Runnable {を実装します
inttickets = 100;
publicvoid run() {
while (チケット > 0) {
販売();
//または次のように実装します
// 同期済み (これ) {
// if (チケット > 0) {
// System.out.println(Thread.currentThread().getName() + "最初のものを売る"
// + (100 - チケット + 1) + "チケット");
// チケット - ;
// }
// }
}
}
publicsynchronizedvoid sale() {
if (チケット > 0) {
System.out.println(Thread.currentThread().getName() + "最初に販売"
+ (100 - チケット + 1) + "チケット");
チケット - ;
}
}
}
パブリッククラス TestSaleTicket {
publicstaticvoid main(String[] args) {
SaleTicket st = 新しい SaleTicket();
new Thread(st, "ウィンドウ No. 1").start();
new Thread(st, "ウィンドウ番号 2").start();
new Thread(st, "ウィンドウ番号 3").start();
new Thread(st, "ウィンドウ番号 4").start();
}
}
22. JAVA でのマルチスレッドを使用したプロデューサーとコンシューマーの問題の例
パッケージcom.softeem.demo;
クラスプロデューサーはRunnableを実装します
{
プライベート SyncStack スタック。
public プロデューサー (SyncStack スタック) {
this.stack = スタック;
}
publicvoid run() {
for (int i = 0; i < stack.getProducts().length; i++) {
文字列製品 = "製品"+i;
stack.push(製品);
System.out.println("生成: "+product);
試す
{
Thread.sleep(200);
}
catch(中断例外 e)
{
e.printStackTrace();
}
}
}
}
コンシューマーが Runnable を実装するクラス
{
プライベート SyncStack スタック。
public Consumer(SyncStack スタック) {
this.stack = スタック;
}
publicvoid run() {
for(int i=0;i <stack.getProducts().length;i++)
{
文字列製品 =stack.pop();
System.out.println("消費: "+product);
試す
{
Thread.sleep(1000);
}
catch(中断例外 e)
{
e.printStackTrace();
}
}
}
}
クラス同期スタック
{
private String[] products = 新しい String[10];
プライベートインデクス;
publicsynchronizedvoid Push(文字列積)
{
if(index==product.length())
{
試す {
待って();
} catch (InterruptedException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
通知();
製品[インデックス]=製品;
インデックス++;
}
publicsynchronized String Pop()
{
if(インデックス==0)
{
試す {
待って();
} catch (InterruptedException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
通知();
索引 - ;
文字列製品 = 製品[インデックス];
返品製品。
}
public String[] getProducts() {
製品の返品。
}
}
publicclass TestProducerConsumer {
publicstaticvoid main(String[] args) {
SyncStack スタック=新しい SyncStack();
プロデューサー p= 新しいプロデューサー (スタック);
コンシューマ c=新しいコンシューマ(スタック);
新しいスレッド(p).start();
新しいスレッド(c).start();
}
}
23. ネットワーク上でシリアル化された Student (sno, sname) オブジェクトの送信を実現するプログラミング
パッケージcom.softeem.demo;
インポート java.io.IOException;
java.io.ObjectInputStreamをインポートします。
java.io.ObjectOutputStreamをインポートします。
java.io.Serializableをインポートします。
java.net.ServerSocketをインポートします。
java.net.Socketをインポートします。
クラス Student は Serializable { を実装します
プライベート int sno;
プライベート文字列の名前。
public Student(int sno, String sname) {
this.sno = sno;
this.sname = sname;
}
public int getSno() {
スノを返す。
}
public void setSno(int sno) {
this.sno = sno;
}
public String getSname() {
名前を返します。
}
public void setSname(String sname) {
this.sname = sname;
}
@オーバーライド
public String toString() {
return "学生番号:" + sno + ";名前:" + sname;
}
}
class MyClient extends Thread {
@オーバーライド
public void run() {
試す {
ソケット s = new Socket("localhost", 9999);
ObjectInputStream ois = 新しい ObjectInputStream(s.getInputStream());
Student stu = (Student) ois.readObject();
System.out.println("クライアントプログラムは、サーバープログラムから転送された生徒オブジェクトを受け取ります >> " + stu);
ois.close();
s.close();
} キャッチ (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
class MyServer extends Thread {
@オーバーライド
public void run() {
試す {
ServerSocket ss = 新しい ServerSocket(9999);
ソケット s = ss.accept();
ObjectOutputStream ops = new ObjectOutputStream(s.getOutputStream());
Student stu = new Student(1, "Zhao Benshan");
ops.writeObject(stu);
ops.close();
s.close();
ss.close();
} キャッチ (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
パブリック クラス TestTransfer {
public static void main(String[] args) {
new MyServer().start();
新しいMyClient().start();
}
}
l JDBC
24. dom4j コンポーネントを使用して、次の XML 形式ファイルを解析します。
<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<ジェネレーター>
<テーブル名="ログイン" 操作="1">
<column name="username" handle="0">ああ </column>
<column name="password" handle="0">123 </column>
</テーブル>
<テーブル名="ログイン" 操作="2">
<column name="id" handle="1">1 </column>
<column name="ユーザー名" handle="0">bbb </column>
<column name="password" handle="0">444 </column>
</テーブル>
<テーブル名="ログイン" 操作="3">
<column name="id" handle="1">4 </column>
</テーブル>
</ジェネレータ>
ルール: <table>操作 1 テーブルの挿入、テーブル 2 の更新、テーブル 3 の削除。
<column>ハンドル 1 テーブルは where 条件として使用され、0 テーブルは操作フィールドとして使用されます。
要件: ルールに従って 3 つの SQL ステートメントを生成します。 (つまり、xml ファイルを解析して 3 つの SQL ステートメントを含む文字列を生成するメソッドを作成します)
/**
*XML ファイルを解析して、実行可能な SQL ステートメントを含む文字列を生成します。
*@paramxmlファイル名
*@returnSQL
*/
public String parseXmltoSQL(String xmlFileName) {
StringBuffer sbsql = new StringBuffer();
SAXReader リーダー = new SAXReader();
試す {
ドキュメント document = Reader.read(new File(xmlFileName));
要素要素 = document.getRootElement();
イテレータ it = element.elementIterator("テーブル");
while (it.hasNext()) {
element = (要素) it.next();
//テーブルに対するオペレーションを取得します
文字列 oper = element.attributeValue("操作");
//テーブル名を取得する
文字列テーブル名 = element.attributeValue("名前");
if ("1".equals(oper)) {
sbsql.append("に挿入").append(テーブル名);
イテレータ it2 = element.elementIterator("列");
文字列列名1 = null;
文字列columnValue1 = null;
文字列列名2 = null;
文字列columnValue2 = null;
if (it2.hasNext()) {
element = (要素) it2.next();
列名1 = 要素.属性値("名前");
columnValue1 = element.getText();
}
if (it2.hasNext()) {
element = (要素) it2.next();
columnName2 = element.attributeValue("名前");
columnValue2 = element.getText();
}
sbsql.append("("+columnName1+","+columnName2+")"+"values('"+columnValue1+"','"+columnValue2+"')n");
elseif ("2".equals(oper)) {
sbsql.append("update ").append(テーブル名);
イテレータ it2 = element.elementIterator("列");
文字列列名1 = null;
文字列columnValue1 = null;
文字列列名2 = null;
文字列columnValue2 = null;
文字列列名3 = null;
文字列columnValue3 = null;
if (it2.hasNext()) {
element = (要素) it2.next();
列名1 = 要素.属性値("名前");
columnValue1 = element.getText();
}
if (it2.hasNext()) {
element = (要素) it2.next();
columnName2 = element.attributeValue("名前");
columnValue2 = element.getText();
}
if (it2.hasNext()) {
element = (要素) it2.next();
列名3 = 要素.属性値("名前");
列値3 = 要素.getText();
}
sbsql.append(" set "+columnName2+"='"+columnValue2+"',"+columnName3+"='"+columnValue3+"' where "+columnName1+"="+columnValue1+"n");
}elseif ("3".equals(oper)) {
sbsql.append("から削除").append(テーブル名);
イテレータ it2 = element.elementIterator("列");
文字列列名1 = null;
文字列columnValue1 = null;
if (it2.hasNext()) {
element = (要素) it2.next();
列名1 = 要素.属性値("名前");
columnValue1 = element.getText();
}
sbsql.append(" where "+columnName1+"="+columnValue1);
}
}
} catch (DocumentException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
戻りsbsql.toString();
}
lJSP/サーブレット
25. JSPの組み込みオブジェクトを書き出してその機能を説明する
request:request は HttpServletRequest オブジェクトを表します。これにはブラウザー要求に関する情報が含まれており、Cookie とヘッダー データを取得するためのいくつかの便利な方法が提供されます。 response:response は HttpServletResponse オブジェクトを表し、ブラウザに返される応答 (Cookie、ヘッダー情報など) を設定するためのいくつかのメソッドを提供します。 out:out オブジェクトは javax.jsp.JspWriter のインスタンスであり、ユーザーが使用できるいくつかのメソッドを提供します。出力をブラウザに送り返すために使用できます。 pageContext: pageContext は javax.servlet.jsp.PageContext オブジェクトを表します。これは、ネームスペースおよびサーブレット関連オブジェクトのさまざまなスコープへのアクセスを容易にするために使用される API であり、一般的なサーブレット関連関数のメソッドをラップします。 session:session は、要求された javax.servlet.http.HttpSession オブジェクトを表します。セッションにはユーザーステータス情報を保存できます。 application:applicaton は javax.servle.ServletContext オブジェクトを表します。これは、サーブレット エンジンとサーブレット環境に関する情報を見つけるのに役立ちます。 config:config は javax.servlet.ServletConfig オブジェクトを表します。このオブジェクトは、サーブレット インスタンスの初期化パラメータにアクセスするために使用されます。 page:page は、このページから生成されたサーブレット インスタンスを表します。
例外: 例外オブジェクトは、ページの実行中に例外が発生した場合に生成されます。 JSP ページがこのオブジェクトを使用したい場合は、isErrorPage を true に設定する必要があります。そうしないとコンパイルできません。実際には java.lang.Throwable に相当します。