3. Javaアプリケーションとアプレットの違いは何ですか?
8.サブクラス構築メソッドを呼び出す前に、パラメーターのない親クラス構築メソッドが最初に呼び出されます。目的は何ですか。
13.final、finally、finalize()の違い
1. JDK、JRE、JVMの理解
- JDK: JDK( Java Development Kit)はJAVA全体の中核です。JavaDevelopmentKitにはJREが含まれており、コマンドツールをコンパイルして実行します。Javaプログラムを開発するための最小の環境です。基本的に、Javaを学ぶ人は誰でもJDKをインストールします。彼にはどのような部品が含まれていますか?ディレクトリの下には6つのフォルダ、srcクラスライブラリのソースコード圧縮パッケージ、およびその他のいくつかの宣言ファイルがあります。その中で、次の4つのフォルダーは、javaを実行するときに非常に効果的です:bin、include、lib、jre。このような関係があり、JDKにはJREが含まれ、JREにはJVMが含まれます。
bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件
lib:类库
jre:java运行环境
(注:ここのbinフォルダーとlibフォルダーは、jreのbinフォルダーとlibフォルダーとは異なります)
一般的に、JDKはJavaプログラムの開発に使用されますが、JREは関数をコンパイルせずにクラスを実行することしかできません。
- JRE:JRE( Javaランタイム環境)、 Javaランタイム環境にはJVMとJavaシステムクラスライブラリの小さな部分(Javaコアクラスライブラリ)が含まれ、 Javaプログラムを実行するための最小の環境です。JREはJavaランタイム環境であり、開発環境ではないため、含まれていません開発ツール(コンパイラやデバッガなど)の場合、JREはJavaランタイム環境を指します。作成されたJavaプログラムも、実行するためにJREが必要です。
- JVM:Java仮想マシンであるJVM( Java仮想マシン)は、(。class)ファイルをロードし、(。class)ファイルを実行します。Java仮想マシンは、バイトコードを実行するときに、実行される特定のプラットフォーム上のマシン命令にバイトコードを解釈します。これが、Javaが「一度コンパイルすればどこでも実行できる」理由です。
2.JavaとC ++の違いは何ですか?
- C ++: プロセス指向の高級言語:プログラミングの基本単位は関数です。
- Java: オブジェクト指向高水準言語:プログラミングの基本単位はクラス、純粋オブジェクト指向言語であり、すべてのコード(関数と変数を含む)をクラスで定義する必要があります。
- C ++は多重継承をサポートし、Javaのクラスは単一継承です。ただし、継承は推移的です。同時に、Javaのインターフェースは多重継承であり、クラスによるインターフェースの実現も複数の実装です。
- C ++では、開発はそれ自体でメモリを管理する必要がありますが、JavaのJVMには独自のGCメカニズムがあります。独自のGCメカニズムがありますが、OOMやメモリリークの問題も発生する可能性があります。C ++にはデストラクタがあり、JavaにはObjectのfinalizeメソッドがあります。
- C ++演算子はオーバーロードできますが、Javaではオーバーロードできません。同時に、強制自動変換はC ++でサポートされていますが、Javaではサポートされておらず、ClassCastException(型の不一致)が発生します。
- C ++はJavaよりも高速ですが、JavaはJVMを利用してクロスプラットフォームにすることができます。
3. Javaアプリケーションとアプレットの違いは何ですか?
プログラムには複数のクラスが存在する可能性がありますが、メインクラスになることができるのは1つのクラスのみです。
- Javaアプリケーションでは、このメインクラスはmain()メソッドを含むクラスを参照します。
- Javaアプレットでは、このメインクラスはシステムクラスJAppletまたはAppletから継承されたサブクラスです。
アプリケーションのメインクラスは必ずしもパブリッククラスである必要はありませんが、アプレットのメインクラスはパブリッククラスである必要があります。
メインクラスは、Javaプログラムを実行するためのエントリポイントです。
簡単に言うと、アプリケーションはメインスレッド(つまり、main() メソッド)から起動され ます。アプレットアプレットにはmain()メソッドがありません。これは主にブラウザページに埋め込まれて実行されます(開始するには** init()またはrun()**を呼び出します)。ブラウザへの埋め込みはフラッシュゲームに似ています。
4.文字定数と文字列定数の違いは何ですか?
- 正式には:文字定数は一重引用符で囲まれた文字です。文字列定数は二重引用符で囲まれた文字数です。
- 意味:文字定数は、式の操作に参加できる整数値(ASCII値)と同等です。文字列定数はアドレス値を表します(文字列はメモリに格納されます)
- 文字定数はメモリサイズの2バイトのみを占有します;文字列定数は数バイトを占有します(少なくとも1つの文字終了フラグ)(注: Javaではcharは2バイトを占有します)
5. Javaの一般的なキーワードは何ですか?
|
Java关键字 ( https://baike.baidu.com/item/java%E5%85%B3%E9%94%AE%E5%AD%97/5808816?fr=aladdin)
6.方法的四种类型
1、无参无返回值
public void methodName(){
}
2、无参有返回值
public int methodName(){
return 1;
}
3、有参无返回值
public void methodName(String name){
}
4.有参有返回值
public int methodName(String name){
return 1;
}
7.构造器 Constructor 是否可被 override?
构造器Constructor不能被继承,因此不能被重写(Override),但是可以被重载(Overload)
如果父类自定义了有参构造函数,则子类无论定义构造函数与否,定义有参构造函数与否,都会报错,正确的做法是在子类的构造方法中添上super(参数),以表明子类构造之前先构造父类,而这句话必须放在第一句,否则报"Constructor call must be the first statement in a constructor"的错误。
类的加载顺序:
首先执行 父类的静态代码块/初始化静态变量(两者优先级相同),然后执行子类的静态代码/初始化静态变量(两者优先级相同,谁写在前面谁先执行),然后初始化父类成员变量/执行代码块{}(两者优先级相同),接着父类的构造器,然后子类的成员变量/代码块,最后子类的构造器。
8.再调用子类构造方法之前会先带调用父类没有参数的构造方法,其目的是?
- 继承父类, 就获得其成员变量,成员函数的使用。因此需要对这些成员变量做一些初始化工作。
- 父类初始化完成后,再接着初始化本身的成员变量。
- 子类构造器会默认调用 父类的无参构造器,如果父类没有无参构造器,则需在子类构造器的第一行显式地调用父类的其他构造器。
- 其次,从继承的思想来看,你继承一个类,就相当于扩展一个类,形成一个更为特殊的类,但经常,我们需要将子类向上转型为基类,以便使用或达到其他各种目的。
- 这时,如果你生成子类对象时没有调用父类的构造器,那么,我们在使用父类的一些成员变量的时候,就会报变量未初始化的错误。请记住,变量初始化总是在构造器调用之前完成!
- 构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量。子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化。
9.接口和抽象类的区别是什么?
1).接口是用Interface修饰,而抽象类是用abstract修饰
2).接口中的方法都是抽象方法,抽象类中可以看抽象方法,也可以有普通方法
3).接口中只有常量,即抽象类中可以有常量也可以有普通变量
4).接口可以继承多个接口,而抽象类是单继承
5).接口中没有构造器,抽象类有构造器
6).抽象类和接口都不能被实例化
10.try-cath-finally
- 程序执行无异常:-->程序执行try块代码-->再执行finally块.
- 程序执行有异常:-->则执行catch块代码-->再执行finally语句中全部代码
- 不管有没有出现异常,finally块中代码都会执行,当try和catch中有return时,finally仍然会执行,finally提供了统一的出口
- finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
11.==和 equals 的区别是什么?
1).==是比较两个对象(引用)的地址是否相同
2).equals不被重写前和==的判断方式一样 ,重写之后equals( )是对字符串(对象)的内容进行比较
12.简单介绍一些Map
- Map是一个集和接口,是一种数据容器里面是键值对的形式,左列为key右列为value, key是唯一不可重复的 value是可重复的,每个key可以都有对应的value
- Map有三个常用实现类分别是 HashMap , LinkedHashMap , TreeMap.
- put( )添加元素方法,get( )获取元素方法,
- 遍历Map的三种方式
- 遍历所有键 key
- 遍历所有值 value
- 遍历所有键值对 entry
/*
*Set keySet()
* 将当前Map中所有的key以一个Set集合形式返回,遍历该集合等于遍历所有key
*/
Set<String> keySet = map.keySet();
for(String key: keySet){
System.out.println("key:"+key);
}
/*
* 遍历每一组键值对
* Set<Entry> entrySet();
*
* java.util.Map.Entry
* Entry的每一个实例表示Map的一组键值对,其中提供了两个常用方法:
* getKey 和 getValue 分别用来获取 对应key 和value
*/
Set<Entry<String,Integer>> entrySet = map.entrySet();
for(Entry<String,Integer> e : entrySet){
String key = e.getKey();
Integer value = e.getValue();
System.out.println(key+":"+value);
}
/**
* 遍历所有value
* Collection values();
* 该方法会将当前Map中所有的value以一个集合形式返回
*/
Collection<Integer> values = map.values();
for(Integer value: values){
System.out.println(value);
}
13.final ,finally ,finalize()区别
1).final 是修饰符
1.1).修饰变量不能被改变.
1.2).修饰方法不能被重写.
1.3).修饰类不能被继承.
2).finally
- 只能用于try/catch语句中,附带着一个语句块,表示这个语句块最终总是会被执行,是异常捕获机制中必定会执行语句,可直接放在try语句之后也可以放在最后一个catch后面.。return,continue,break也都无法阻止finally语句块的执行,finally语句块会在他们之前执行。
3).finalize
- finallize:是方法名,是Object提供的的实例方法,finalize()方法是在GC清理它所从属的对象时被调用的。当对象不再被任何对象引用时,GC会调用该对象的daofinalize()方法
- java技术允许使用finalize()方法在垃圾收集器将对象从内存清除出去之前做必要的清理工作。这个方法是在垃圾收集器确认一个对象没有被引用时,对这个对象调用的。它是在Objec类中定义的,因此所有的类都继承它,子类覆盖了finalize()方法移整理系统资源或执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。