本文目錄一覽:
JAVA中類方法和對象方法有什麼區別?
類方法是所有該類的實例也就是對象共有的方法;對象方法是每個該類的實例也就是對象所私有的。
類方法必須既可以用類名直接調用,也可以用對象來調用;對象方法只能用對象來調用。
Java是一種可以撰寫跨平台應用軟件的面向對象的程序設計語言。
Java 技術具有卓越的通用性、高效性、平台移植性和安全性,廣泛應用於PC、數據中心、遊戲控制台、科學超級計算機、移動電話和互聯網,同時擁有全球最大的開發者專業社群。
Java編程語言的風格十分接近C語言、C++語言。Java是一個純粹的面向對象的程序設計語言,它繼承了C++語言面向對象技術的核心。
優勢:Java適合團隊開發,軟件工程可以相對做到規範。由於Java語言本身的極其嚴格語法的特點,Java語言無法寫出結構混亂的程序。這將強迫程序員的代碼軟件結構的規範性。這是一個很難比擬的優勢。
劣勢:J2EE的架構很完美,第一版軟件可以做滿意,但是很不適合互聯網模式的持續不斷修改。互聯網軟件工程管理上的不足,持續的修修補補導致架構的破壞。
java類的方法由哪幾部分組成?
組成:一個簡單的java程序由java包(如:import java.awt.*)、類聲明 、變量、構造方法(可缺省)、方法 這幾部分構成。
Java:
Java是一種可以撰寫跨平台應用程序的面向對象的程序設計語言。Java 技術具有卓越的通用性、高效性、平台移植性和安全性,廣泛應用於PC、數據中心、遊戲控制台、科學超級計算機、移動電話和互聯網,同時擁有全球最大的開發者專業社群。
Java 編程語言的風格十分接近C、C++語言。Java是一個純的面向對象的程序設計語言,它繼承了 C++ 語言面向對象技術的核心,Java捨棄了C ++語言中容易引起錯誤的指針(以引用取代)、運算符重載(operator overloading)、多重繼承(以接口取代)等特性,增加了垃圾回收器功能用於回收不再被引用的對象所佔據的內存空間,使得程序員不用再為內存管理而擔憂。在 Java SE 1.5 版本中,Java 又引入了泛型編程(Generic Programming)、類型安全的枚舉、不定長參數和自動裝/拆箱等語言特性。
Java類和方法的定義
類的定義:
public class Test {//類的訪問修飾符可以是public,默認(就是沒有),
//abstract,final,class是定義類的關鍵字
方法的定義:
//方法的定義:
/**
* [訪問修飾符] [static] [是否有返回值類型] 方法名(參數列表){
* [方法執行體]
* [return返回值]
* }
*/
public void getName(){
}
//靜態方法
public static void main(String[] args) {
}
}
java類方法?
emm…問題…不少。
1、這個構造函數問題就很大:
你傳遞一個r數組進來,然後你又讓this.v1=v1,this.v2=v2,那麼這個r的意義到底是什麼?你構造出來的這個向量的v1和v2也還是根本沒有任何值。
2、這。。這塊問題太多了,我都不知道該怎麼說,就全都不應該這麼玩,下面加法也是一樣的我就不圈出來了。
首先,非常不建議用null來聲明任何變量,你聲明r[]數組為null,下面又在循環里使用r[i],r都不是一個東西(因為它是null,還真不是個東西 手動滑稽),r[i]必然導致萬惡的空指針異常NullPointerException。然後前面第一點說了,你的v1和v2根本就沒有值,其實他們也是null,所以v1.length也將產生空指針異常,你的for循環根本沒法進行。好,就算假設你的v1和v2都聲明為new double[0]了,他們不再是null了,那麼你的這個方法最終有可能返回null,又來了又來了,不要隨便使用null,一不小心可能導致你main方法中調用這個方法後再次造成空指針異常。所以你非要這樣寫的話也建議寫成return new double[0];這樣即使它是一個空的數組但最起碼它已經是個對象了,不再是null了。
3、main方法中null又雙叒來了:
null數組不能放任何東西進去,不然將導致空指針異常。
所以現在怎麼辦?我估計你也發現了,因為你不知道這個數組究竟有多少個數字所以無法準確地定義這個r的長度。
本來我認為最優的做法是利用java的幾種數據結構來保存輸入項就好了,但是我怕你還沒學到,其中這幾個數據結構都不需要指定長度就能保存數據,他們能保存的最大數據量為int的最大值:java.util.List(java的集合,特別好用)、java.util.Vector(沒錯,java本來就有向量這種數據結構,比你這個MyVector功能要多一些)、java.util.Stack(棧其實是繼承了向量,是一種特殊的向量)、java.util.Queue(java的隊列),常用的就這些。
另外一種方法就是指定r[]數組有一個較大的length,也就是一開始就聲明的足夠大,比如直接double[] r = new double[999]但是這種是非常不好的辦法,一個是如果你最終只存儲兩三個數字,那麼數組空間就浪費太多了,另外是如果超過了999個數字,又會導致數組溢出。
所有我下面採用了第三種直截了當的方法幫你改進為,一開始你要輸入向量的長度,你要說明向量到底有多長,這樣不就能準確地定義r[]數組了嗎?look:
這樣就穩得一批了。
4、再看你main方法的最後:
你這種設計方法根本沒有體現出兩個向量之間的運算關係啊,根本就是只有一個向量在這裡。因此,你的運算函數應該修改為傳入一個新的向量,也就是這樣:
這樣的話,main函數里就可以這樣了:
看到沒,是不是一眼就能看出是向量1和向量2相加、點積?
5、審題!審題!你的toString()方法吶?結果保留兩位小數吶?see:
另外題目里還說要定義一個int n的成員變量表示維度。我沒太明白這個維度是啥?這不就是一維向量嗎?維度不就是1嗎?
綜上所述,代碼被我整體修改為:
public class MyVector {
private double[] array;
private int n = 1;
public MyVector(double[] array) {
this.array = array;
}
public double[] getArray() {
return this.array;
}
public double[] MyVectorDott(MyVector myVector2) {
double[] array2 = myVector2.getArray();
double[] result = new double[this.array.length];
for (int i = 0; i this.array.length; i++) {
result[i] = this.array[i] * array2[i];
}
return result;
}
public double[] MyVectorAdd(MyVector myVector2) {
double[] array2 = myVector2.getArray();
double[] result = new double[this.array.length];
for (int i = 0; i this.array.length; i++) {
result[i] = this.array[i] + array2[i];
}
return result;
}
public String toString() {
String s = “(“;
for (int i = 0; i this.array.length; i++) {
if (i this.array.length – 1) {
s += String.format(“%.2f”, this.array[i]) + “,”;
} else {
s += String.format(“%.2f”, this.array[i]);
}
}
return s + “)”;
}
public static void main(String[] args) {
System.out.print(“請輸入向量長度:”);
Scanner input = new Scanner(System.in);
int length = input.nextInt();
double[] array1 = new double[length];
double[] array2 = new double[length];
System.out.print(“請輸入第一組向量值:”);
input = new Scanner(System.in);
for (int i = 0; i length; i++) {
array1[i] = input.nextDouble();
}
System.out.print(“請輸入第二組向量值:”);
input = new Scanner(System.in);
for (int i = 0; i length; i++) {
array2[i] = input.nextDouble();
}
input.close();
MyVector myVector1 = new MyVector(array1);
System.out.println(“向量1為:”);
System.out.println(myVector1.toString());
System.out.println(“向量2為:”);
MyVector myVector2 = new MyVector(array2);
System.out.println(myVector2.toString());
MyVector myVector3 = new MyVector(myVector1.MyVectorAdd(myVector2));
System.out.println(“向量1與向量2求和為:”);
System.out.println(myVector3.toString());
System.out.println(“向量1與向量2點積為:”);
MyVector myVector4 = new MyVector(myVector1.MyVectorDott(myVector2));
System.out.println(myVector4.toString());
}
}
運行結果:
代碼老是會擠在一起,你自己整理一下
原創文章,作者:BJKZ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/140724.html