如何編寫高質(zhì)量代碼,從而提升系統(tǒng)性能。想必是很多程序員都非常注意的地方,最近總結(jié)了一些要點,特此記錄在案。 所謂代碼高可讀性和高可維護性,其實就是應(yīng)該有著規(guī)范的Java程序設(shè)計風格,在開發(fā)程序過程中,從近期目標看是應(yīng)該著眼于功能實現(xiàn),但是只能解一時之渴,而不思長遠之計,確不可取,一個雜亂無序的代碼讓人看后有一種不解其意,心緒煩亂的感覺。所以,作為一名合格的程序員,一定要確定一個觀點就是你編寫出來的代碼不只是給你一個人看的,還是給別人看的,所以在開發(fā)過程中文件注釋頭,java源文件編排格式,方法體的具體業(yè)務(wù)含義的注釋都是必須的。 如程序注釋就分為塊注釋與行注釋 。例如塊注釋為
水富網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)2013年至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
/**
* @param
@return
*/
行注釋
/** **/或者 //
再褲脊做者就是方法的命名也需要多加斟酌,一個業(yè)務(wù)方法,如果取最能體現(xiàn)體現(xiàn)該業(yè)務(wù)的名字,這樣讀者幾乎不需要看代碼便可以知道該方法具體用途。 高質(zhì)量的代碼其實很多時候都在一些小細節(jié)中野伍體現(xiàn),對于每個程序員來說一個for循環(huán)都會寫,可是卻有很多人沒有能在代碼中體現(xiàn)出高效性來,在這里我用簡單的一個例子來說明:一個ArrayList需要遍歷。 一般人會寫成for(int i=0;ilist.size();i++) 這有問題嗎?沒有問題,能夠完成程序員的意圖的功能。
可是它高效嗎?你有注意到這點嗎?其實問題就出現(xiàn)在list.size()方法,這個方法是計算一個list的大小,本身它不會存在任何問題,可是將它放在了一個for()循環(huán)中的話,就很有問題了,因為如果一個N次的for循環(huán),這個方法就需要被執(zhí)行N次,這樣的代碼就造成計算機花很多的時間去做沒有意義的事情,而本來這個list.size()方法只需要計算一次的就可以了,所以我們把計算list大小的方法放在for循環(huán)外面去定義的話,效率就可以得到提高
如: int size = list.size();
for(int i=0;isize;i++)
關(guān)于For循環(huán)還有一個要注意的地方,就是在for循環(huán)里面去New一個新對象。如:
for(int i=0;i10;i++){
A a = new A();
}
是不是怎么看都不會有問題,是的在語法上?;蛘呤菆?zhí)行業(yè)務(wù)處理邏輯的時候,它都是沒有任何問題的,可是這是從語言級別去看待問題,沒有深入到它的實現(xiàn)機制上去看待問題。
在介紹這個問題的之前我想先簡單說下關(guān)于java內(nèi)存的機制:java是如何在內(nèi)存中保存對象,我們回到A a=new A()在內(nèi)存中是怎么分配這個問題來,
首先在棧中開辟一段空間存放引用a,然后在堆中開辟一段空間存放新建的A對象,同時引用a指向堆中新建得A對象,a所指代的對象地址為A在堆中地址。根據(jù)javaGC機制,只有對象已經(jīng)沒有引用指向它的時候,才有可能被GC給回收,所以基于這種機制的話,上述的一個For循環(huán)就會存在很大的效率問題了,如果循環(huán)有1000次,在內(nèi)存中棧會有1000個引用,而堆中也會有1000個新生成的對象,同時1000個引用會相應(yīng)指向1000個新生成的對象,即使這個for循環(huán)結(jié)束,也不會有任何改變。但是實際上1000個引用的生成完全是沒有必要的,如果有著編寫高性能代碼的想法的話:像這樣的for循環(huán)完全可以這樣寫:
A a = null;
for(int i=0;i1000;i++){
a = new A();
...
}
這樣的代碼在內(nèi)存中便只會在棧中生成一個指向,每當一個for循環(huán)結(jié)束后,這個指向會指向下一個新生成的對象,前面生成的對象就會失去指向,這樣GC就有可能更加快速的回收這些已經(jīng)失去功能的對象。 在java中其實new 一個對象是非常耗費時間的,特別是重量級對象,所以每次在new 對象的時候一定需要考慮清楚是不是非的生成一個對象才能完成我的業(yè)務(wù)需求呢?總之能夠根據(jù)實際情況,然后舉一反三的話,我相信大家編寫出來的代碼就會更加高效了。
其次是針對同步的慎重考慮,因為我們一旦用了synchronized這個關(guān)鍵字后,就很可能喪失了并行的功效,所以在開發(fā)的過程中需要注意到線程是不是會對共有的資源進行處理,然后在慎重選擇Synchronized 關(guān)鍵字,其實大家可以考慮用ThreadLocal這個類,它的優(yōu)點是既保證同步的情胡衡況下仍然能保證并行,缺點是會占用更多的空間去換取換取時間。
最后,便是在j2ee開發(fā)過程中對數(shù)據(jù)庫操作的優(yōu)化,在這里我只針對代碼級別的優(yōu)化,關(guān)于數(shù)據(jù)庫級別的我不涉及。大家編寫SQL的時候會不會注意到一些原則,在這里我將羅列一些需要注意的要點。(總結(jié)肯定不會很全,我希望如果有大蝦能給予更多的經(jīng)驗指導,在下將會感激萬分。)
(1)在搜索子句的列名邊要避免函數(shù)、算術(shù)操作符和其它的表達式,除非建立基于函數(shù)的索引
(2)使用復(fù)合索引的第一個列名
(3)SELECT子句中避免使用 ‘*’
(4)如果可能盡量多用"Commit"
(5)避免在索引列上使用IS null和Is not null
(6)用Union -all替換Union(如果可能的話)
(7)Oracel 采用自下而上的順序解析WHERE子句,可以過濾掉最大數(shù)量記錄的條件寫在WHERE子句的末尾
(8)between謂詞可以轉(zhuǎn)化為=and=子句,比如:price between 10 and 20
可以轉(zhuǎn)化為 price= 10 and =20
(9)like子句中匹配值的第一個字符是常量,也可以進行轉(zhuǎn)換, 例如:
like “sm%”可以轉(zhuǎn)換成 =“sm” and “sn”
(10)在子查詢,exists和in要比not exists和not in執(zhí)行得快,因為對于exists和in,優(yōu)化器只要找到一條記錄就可以返回TRUE,而對于not exists和not in則必須檢查所有的值。
以上10條總結(jié)如果在編寫sql的時候能注意到的話,將會在一定程度上提高java跟數(shù)據(jù)交互的性能。
那么除了在SQL上下功夫來提高性能之外,編寫合適的事務(wù)處理也將帶來一些性能提高。我們都知道事務(wù)具有:原子性,隔離性,一致性,持久性,所以在使用事務(wù)的時候肯定是犧牲并發(fā)性能為代價的。特別是一個涉及update的事務(wù)處理的時候,數(shù)據(jù)庫會在表上加上排他鎖,而一個數(shù)據(jù)資源只要被一個事務(wù)放置了排他鎖,其他事務(wù)將不能放上排他鎖,一定要一直等到事務(wù)結(jié)束后才釋放。所以在這種情況下的,并發(fā)性就會被抹殺掉了。我們不能改變這種加鎖的機制,但是我們可以用另外一種方式來達到一定程度的性能提升,那就是根據(jù)實際情況將一個大事務(wù)分解成小事務(wù)來處理。簡而言之就是減低事務(wù)放置排他鎖和釋放排他鎖的時間間隔,這樣可以讓其他的事務(wù)能更快的訪問到數(shù)據(jù)資源。而關(guān)于大事務(wù)分解一定要小心使用,如果使用不恰當?shù)脑捄芸赡軙a(chǎn)生意想不到的數(shù)據(jù)不一致錯誤。
Java文件操作大全
1.創(chuàng)建文件夾
//import java.io.*;
File myFolderPath = new File(%%1);
try {
if (!myFolderPath.exists()) {
myFolderPath.mkdir();
}
}
catch (Exception e) {
System.out.println("新建目錄操作出錯");
e.printStackTrace();
}
2.創(chuàng)建文件
//import java.io.*;
File myFilePath = new File(%%1);
try {
if (!myFilePath.exists()) {
myFilePath.createNewFile();
}
FileWriter resultFile = new FileWriter(myFilePath);
PrintWriter myFile = new PrintWriter(resultFile);
myFile.println(%%2);
resultFile.close();
}
catch (Exception e) {
System.out.println("新建文件操作出鉛粗錯");
e.printStackTrace();
}
3.刪除文件
//import java.io.*;
File myDelFile = new File(%%1);
try {
myDelFile.delete();
}
catch (Exception e) {
System.out.println("刪除文件操作出錯");
e.printStackTrace();
}
4.刪除文件夾
//import java.io.*;
File delFolderPath = new File(%%1);
try {
delFolderPath.delete(); //刪槐慧鎮(zhèn)除碧賀空文件夾
}
catch (Exception e) {
System.out.println("刪除文件夾操作出錯");
e.printStackTrace();
}
5.刪除一個文件下夾所有的文件夾
//import java.io.*;
File delfile=new File(%%1);
File[] files=delfile.listFiles();
for(int i=0;ifiles.length;i++){
if(files[i].isDirectory()){
files[i].delete();
}
}
6.清空文件夾
//import java.io.*;
File delfilefolder=new File(%%1);
try {
if (!delfilefolder.exists()) {
delfilefolder.delete();
}
delfilefolder.mkdir();
}
catch (Exception e) {
System.out.println("清空目錄操作出錯");
e.printStackTrace();
}
7.讀取文件
//import java.io.*;
// 逐行讀取數(shù)據(jù)
FileReader fr = new FileReader(%%1);
BufferedReader br = new BufferedReader(fr);
String %%2 = br.readLine();
while (%%2 != null) {
%%3
%%2 = br.readLine();
}
br.close();
fr.close();
8.寫入文件
//import java.io.*;
// 將數(shù)據(jù)寫入文件
try {
FileWriter fw = new FileWriter(%%1);
fw.write(%%2);
fw.flush();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
9.寫入隨機文件
//import java.io.*;
try {
RandomAcessFile logFile=new RandomAcessFile(%%1,"rw");
long lg=logFile.length();
logFile.seek(%%2);
logFile.writeByte(%%3);
}catch(IOException ioe){
System.out.println("無法寫入文件:"+ioe.getMessage());
}
10.讀取文件屬性
//import java.io.*;
// 文件屬性的取得
File af = new File(%%1);
if (af.exists()) {
System.out.println(f.getName() + "的屬性如下: 文件長度為:" + f.length());
System.out.println(f.isFile() ? "是文件" : "不是文件");
System.out.println(f.isDirectory() ? "是目錄" : "不是目錄");
System.out.println(f.canRead() ? "可讀取" : "不");
System.out.println(f.canWrite() ? "是隱藏文件" : "");
System.out.println("文件夾的最后修改日期為:" + new Date(f.lastModified()));
} else {
System.out.println(f.getName() + "的屬性如下:");
System.out.println(f.isFile() ? "是文件" : "不是文件");
System.out.println(f.isDirectory() ? "是目錄" : "不是目錄");
System.out.println(f.canRead() ? "可讀取" : "不");
System.out.println(f.canWrite() ? "是隱藏文件" : "");
System.out.println("文件的最后修改日期為:" + new Date(f.lastModified()));
}
if(f.canRead()){
%%2
}
if(f.canWrite()){
%%3
}
11.寫入屬性
//import java.io.*;
File filereadonly=new File(%%1);
try {
boolean b=filereadonly.setReadOnly();
}
catch (Exception e) {
System.out.println("拒絕寫訪問:"+e.printStackTrace());
}
12.枚舉一個文件夾中的所有文件
//import java.io.*;
//import java.util.*;
LinkedListString folderList = new LinkedListString();
folderList.add(%%1);
while (folderList.size() 0) {
File file = new File(folderList.peek());
folderList.removeLast();
File[] files = file.listFiles();
ArrayListFile fileList = new ArrayListFile();
for (int i = 0; i files.length; i++) {
if (files[i].isDirectory()) {
folderList.add(files[i].getPath());
} else {
fileList.add(files[i]);
}
}
for (File f : fileList) {
%%2=f.getAbsoluteFile();
%%3
}
}
13.復(fù)制文件夾
//import java.io.*;
//import java.util.*;
LinkedListString folderList = new LinkedListString();
folderList.add(%%1);
LinkedListString folderList2 = new LinkedListString();
folderList2.add(%%2+ %%1.substring(%%1.lastIndexOf("\\")));
while (folderList.size() 0) {
(new File(folderList2.peek())).mkdirs(); // 如果文件夾不存在 則建立新文件夾
File folders = new File(folderList.peek());
String[] file = folders.list();
File temp = null;
try {
for (int i = 0; i file.length; i++) {
if (folderList.peek().endsWith(File.separator)) {
temp = new File(folderList.peek() + File.separator
+ file[i]);
} else {
temp = new File(folderList.peek() + File.separator
+ file[i]);
}
if (temp.isFile()) {
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(
folderList2.peek() + File.separator
+ (temp.getName()).toString());
byte[] b = new byte[5120];
int len;
while ((len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
}
if (temp.isDirectory()) {// 如果是子文件夾
for (File f : temp.listFiles()) {
if (f.isDirectory()) {
folderList.add(f.getPath());
folderList2.add(folderList2.peek()
+ File.separator + f.getName());
}
}
}
}
} catch (Exception e) {
//System.out.println("復(fù)制整個文件夾內(nèi)容操作出錯");
e.printStackTrace();
}
folderList.removeFirst();
folderList2.removeFirst();
}
14.復(fù)制一個文件夾下所有的文件夾到另一個文件夾下
//import java.io.*;
//import java.util.*;
File copyfolders=new File(%%1);
File[] copyfoldersList=copyfolders.listFiles();
for(int k=0;kcopyfoldersList.length;k++){
if(copyfoldersList[k].isDirectory()){
ArrayListStringfolderList=new ArrayListString();
folderList.add(copyfoldersList[k].getPath());
ArrayListStringfolderList2=new ArrayListString();
folderList2.add(%%2+"/"+copyfoldersList[k].getName());
for(int j=0;jfolderList.length;j++){
(new File(folderList2.get(j))).mkdirs(); //如果文件夾不存在 則建立新文件夾
File folders=new File(folderList.get(j));
String[] file=folders.list();
File temp=null;
try {
for (int i = 0; i file.length; i++) {
if(folderList.get(j).endsWith(File.separator)){
temp=new File(folderList.get(j)+"/"+file[i]);
}
else{
temp=new File(folderList.get(j)+"/"+File.separator+file[i]);
}
FileInputStream input = new FileInputStream(temp);
if(temp.isFile()){
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(folderList2.get(j) + "/" +
(temp.getName()).toString());
byte[] b = new byte[5120];
int len;
while ( (len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
}
if(temp.isDirectory()){//如果是子文件夾
folderList.add(folderList.get(j)+"/"+file[i]);
folderList2.add(folderList2.get(j)+"/"+file[i]);
}
}
}
catch (Exception e) {
System.out.println("復(fù)制整個文件夾內(nèi)容操作出錯");
e.printStackTrace();
}
}
}
}
15.移動文件夾
//import java.io.*;
//import java.util.*;
LinkedListString folderList = new LinkedListString();
folderList.add(%%1);
LinkedListString folderList2 = new LinkedListString();
folderList2.add(%%2 + %%1.substring(%%1.lastIndexOf("\\")));
while (folderList.size() 0) {
(new File(folderList2.peek())).mkdirs(); // 如果文件夾不存在 則建立新文件夾
File folders = new File(folderList.peek());
String[] file = folders.list();
File temp = null;
try {
for (int i = 0; i file.length; i++) {
if (folderList.peek().endsWith(File.separator)) {
temp = new File(folderList.peek() + File.separator
+ file[i]);
} else {
temp = new File(folderList.peek() + File.separator
+ file[i]);
}
if (temp.isFile()) {
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(
folderList2.peek() + File.separator
+ (temp.getName()).toString());
byte[] b = new byte[5120];
int len;
while ((len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
if (!temp.delete())
System.out.println("刪除單個文件操作出錯!");
}
if (temp.isDirectory()) {// 如果是子文件夾
for (File f : temp.listFiles()) {
if (f.isDirectory()) {
folderList.add(f.getPath());
folderList2.add(folderList2.peek()
+ File.separator + f.getName());
}
}
}
}
} catch (Exception e) {
// System.out.println("復(fù)制整個文件夾內(nèi)容操作出錯");
e.printStackTrace();
}
folderList.removeFirst();
folderList2.removeFirst();
}
File f = new File(%%1);
if (!f.delete()) {
for (File file : f.listFiles()) {
if (file.list().length == 0) {
System.out.println(file.getPath());
file.delete();
}
}
}
16.移動一個文件夾下所有的文件夾到另一個目錄下
//import java.io.*;
//import java.util.*;
File movefolders=new File(%%1);
File[] movefoldersList=movefolders.listFiles();
for(int k=0;kmovefoldersList.length;k++){
if(movefoldersList[k].isDirectory()){
ArrayListStringfolderList=new ArrayListString();
folderList.add(movefoldersList[k].getPath());
ArrayListStringfolderList2=new ArrayListString();
folderList2.add(%%2+"/"+movefoldersList[k].getName());
for(int j=0;jfolderList.length;j++){
(new File(folderList2.get(j))).mkdirs(); //如果文件夾不存在 則建立新文件夾
File folders=new File(folderList.get(j));
String[] file=folders.list();
File temp=null;
try {
for (int i = 0; i file.length; i++) {
if(folderList.get(j).endsWith(File.separator)){
temp=new File(folderList.get(j)+"/"+file[i]);
}
else{
temp=new File(folderList.get(j)+"/"+File.separator+file[i]);
}
FileInputStream input = new FileInputStream(temp);
if(temp.isFile()){
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(folderList2.get(j) + "/" +
(temp.getName()).toString());
byte[] b = new byte[5120];
int len;
while ( (len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
temp.delete();
}
if(temp.isDirectory()){//如果是子文件夾
folderList.add(folderList.get(j)+"/"+file[i]);
folderList2.add(folderList2.get(j)+"/"+file[i]);
}
}
}
catch (Exception e) {
System.out.println("復(fù)制整個文件夾內(nèi)容操作出錯");
e.printStackTrace();
}
}
movefoldersList[k].delete();
}
}
17.以一個文件夾的框架在另一個目錄創(chuàng)建文件夾和空文件
//import java.io.*;
//import java.util.*;
boolean b=false;//不創(chuàng)建空文件
ArrayListStringfolderList=new ArrayListString();
folderList.add(%%1);
ArrayListStringfolderList2=new ArrayListString();
folderList2.add(%%2);
for(int j=0;jfolderList.length;j++){
(new File(folderList2.get(j))).mkdirs(); //如果文件夾不存在 則建立新文件夾
File folders=new File(folderList.get(j));
String[] file=folders.list();
File temp=null;
try {
for (int i = 0; i file.length; i++) {
if(folderList.get(j).endsWith(File.separator)){
temp=new File(folderList.get(j)+"/"+file[i]);
}
else{
temp=new File(folderList.get(j)+"/"+File.separator+file[i]);
}
FileInputStream input = new FileInputStream(temp);
if(temp.isFile()){
if (b) temp.createNewFile();
}
if(temp.isDirectory()){//如果是子文件夾
folderList.add(folderList.get(j)+"/"+file[i]);
folderList2.add(folderList2.get(j)+"/"+file[i]);
}
}
}
catch (Exception e) {
System.out.println("復(fù)制整個文件夾內(nèi)容操作出錯");
e.printStackTrace();
}
}
18.復(fù)制文件
//import java.io.*;
int bytesum = 0;
int byteread = 0;
File oldfile = new File(%%1);
try {
if (oldfile.exists()) { //文件存在時
FileInputStream inStream = new FileInputStream(oldfile); //讀入原文件
FileOutputStream fs = new FileOutputStream(new File(%%2,oldfile.getName()));
byte[] buffer = new byte[5120];
int length;
while ( (byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字節(jié)數(shù) 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
}
catch (Exception e) {
System.out.println("復(fù)制單個文件操作出錯");
e.printStackTrace();
}
19.復(fù)制一個文件夾下所有的文件到另一個目錄
//import java.io.*;
File copyfiles=new File(%%1);
File[] files=copyfiles.listFiles();
for(int i=0;ifiles.length;i++){
if(!files[i].isDirectory()){
int bytesum = 0;
int byteread = 0;
try {
InputStream inStream = new FileInputStream(files[i]); //讀入原文件
FileOutputStream fs = new FileOutputStream(new File(%%2,files[i].getName());
byte[] buffer = new byte[5120];
int length;
while ( (byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字節(jié)數(shù) 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
} catch (Exception e) {
System.out.println("復(fù)制單個文件操作出錯");
e.printStackTrace();
}
}
}
20.提取擴展名
String %%2=%%1.substring(%%1.lastIndexOf(".")+1);
/*這個相當詳細了.
程序也不算太難.而且給老師看的時候效果比較好.因為有圖形化界面,又實現(xiàn)一個比較實用的功能.老師會比較高興的.
建立一個文件名為Change.java就可以編譯了*/
/*
* 這個程序?qū)崿F(xiàn)輸入身高算出標準體重,輸入體重,算出身高的功能
*/
import java.awt.*; //導入相關(guān)類包,這才樣使用相應(yīng)awt圖形界面的類
import java.awt.event.*;//同上
public class Change extends Frame { //定義一個類Change, 父類是Frame(圖形界面的)
Button b = new Button("互查"); //創(chuàng)建一個按鈕的對象b,顯示為"互喚饑鎮(zhèn)查"
Label l1 = new Label("身高(cm)");//創(chuàng)建一個lable.顯示身高
Label l2 = new Label("體重(kg)");//創(chuàng)建一個lable 顯示體重
double heigth, weigth; //定義變量
double x, y; //定義變量
TextField tf1 = new TextField(null, 10);//添加Text框
TextField tf2 = new TextField(null, 10);//添加Text框
public Change() {//類的構(gòu)造函數(shù),完成初始化
super("互查表");//創(chuàng)建窗口,標題為互查表
setLayout(new FlowLayout(FlowLayout.LEFT));//設(shè)置布局
add(l1);//把lable 身高放到window里
add(tf1);//把Text 框 放到窗口上
add(l2); //把lable 體重放肢坦到window里
add(tf2);//Test放到窗口里
add(b);//把button放到窗口上
pack();//自動放到窗口里排列上邊的組件
setVisible(true);//可以讓用戶看到窗口
addWindowListener(new WindowAdapter() {//如果按 X, 關(guān)閉窗口
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
b.addActionListener(new ButtonListener());//添加button監(jiān)聽函數(shù)
}
class ButtonListener implements ActionListener {//實現(xiàn)click button時功能操作
public void actionPerformed(ActionEvent e) {//當click調(diào)用
if (tf1.getText()!=null) {//檢查tf1 test 是否和粗為空
try {//取異常
x = Double.parseDouble(tf1.getText());//字符轉(zhuǎn)為double型
weigth = (x - 100) * 0.9;//算重量
tf2.setText("" + weigth);//顯示重量
} catch (NumberFormatException ex) {
tf1.setText("");//如果輸入不是數(shù)字,設(shè)為空
}
}
if (tf1.getText().equals("")==true){//tf1是否為空
y = Double.parseDouble(tf2.getText());//把tf2里的文本轉(zhuǎn)為double 型 的
heigth = y / 0.9 + 100; //算身高根據(jù)重量
tf1.setText("" + heigth);}//顯示身高
}
}
public static void main(String[] args) {//主函數(shù),程序入口
new Change(); //建立類Change的對象,并調(diào)用他的構(gòu)造函數(shù)Change().顯示窗口
}
}
最簡單的java代碼此逗肯定就是這個了,如下:
public class MyFirstApp
{
public static void main(String[] args)
{
System.out.print("Hello world");
}
}
“hello world”就是應(yīng)該是所有學java的新手看的第一個代碼了。如果是零基礎(chǔ)的新手朋友們可以來我們的java實驗班試聽,有免費的試聽課程幫助學習java必備基礎(chǔ)知識,有助教老師為零基礎(chǔ)的人提差扒型供個人學習方案,學習完成后有考評團進行專業(yè)測試,幫助測評學員是否適合繼續(xù)學習java,15天內(nèi)免費幫助來報名體驗實驗班的虛猜新手快速入門java,更好的學習java!