又是新的一天,真好。
每日名言:
紙上談來終覺淺,絕知此事要躬行。
- 2022.4.29
- 水博客第二天
- 學習兩個新詞,semantics and formatting 語義和格式
- 算了,接下來的Markdown在實踐中學習吧
- 今天開始學習Java
計算機硬件介紹
- 赫茲(hz):在給定時間段內,可執行指令次數
1.1khz = 1024hz
2.1mhz = 1024khz
3.1Ghz = 1024mhz - cpu 中央處理器(central processing unit)
- IT定律之計算機行業發展定律
1.摩爾定律
2.安迪比爾定律
3.反摩爾定律 - 1字節(byte)由8個比特(bit)構成
- 分辨率:顯示設備水平和垂直方向上顯示的像素數,像素密度才是衡量標準(ppi)
計算機發展史上鼻祖
- 圖靈,馮·諾依曼、 圖靈獎(中國只有姚期智)
- 萬維網(world wide web環球信息網)WWW可以讓用戶訪問瀏覽web 服務器上的頁面,是一個由許多互相連接的超文本組成的系統,通過互聯網直接訪問,在這個系統中,每一個有用的事物,稱為一樣的“資源”;并且由一個全局“同意資源標識符(URI)標識;致謝資源通過超文本傳輸協議,(HTTP)傳輸給用戶,后者通過點擊鏈接來獲得資源。
- 軟件架構分為兩種 B/S和C/S
Java
Java的一些特性
1.分布式
2.多線程:在 Java 語言中,線程是一種特殊的對象,它必須由 Thread 類或其子(孫)類來創建。通常有兩種方法來創建線程:其一,使用型構為 Thread(Runnable) 的構造子類將一個實現了 Runnable 接口的對象包裝成一個線程,其二,從 Thread 類派生出子類并重寫 run 方法,使用該子類創建的對象即為線程。值得注意的是 Thread 類已經實現了 Runnable 接口,因此,任何一個線程均有它的 run 方法,而 run 方法中包含了線程所要運行的代碼。線程的活動由一組方法來控制。Java 語言支持多個線程的同時執行,并提供多線程之間的同步機制(關鍵字為 synchronized)。
3.安全性
4.動態性
5.java生成的字節碼文件不依賴于平臺
6.完全面向對象:Java采用單重繼承+接口提供語言級的內存自動管理和異常處理方式。
面向對象編程的三大特性
1.封裝性(encapsulation):封裝是一種信息隱蔽技術,它體現于類的說明,是對象的重要特性。封裝使數據和加工該數據的方法(函數)封裝為一個整體,以實現獨立性很強的模塊,使得用戶只能見到對象的外特性(對象能接受哪些消息,具有哪些處理能力),而對象的內特性(保存內部狀態的私有數據和實現加工能力的算法)對用戶是隱蔽的。封裝的目的在于把對象的設計者和對象的使用者分開,使用者不必知曉其行為實現的細節,只須用設計者提供的消息來訪問該對象。
2.繼承性:繼承性是子類共享其父類數據和方法的機制.它由類的派生功能體現。一個類直接繼承其他類的全部描述,同時可修改和擴充。繼承具有傳遞性。繼承分為單繼承(一個子類有一父類)和多重繼承(一個類有多個父類)。類的對象是各自封閉的,如果沒繼承性機制,則類的對象中的數據、方法就會出現大量重復。繼承不僅支持系統的可重用性,而且還促進系統的可擴充性。
3.多態性:對象根據所接收的消息而做出動作。同一消息被不同的對象接受時可產生完全不同的行動,這種現象稱為多態性。利用多態性用戶可發送一個通用的信息,而將所有的實現細節都留給接受消息的對象自行決定,如是,同一消息即可調用不同的方法。例如:同樣是 run 方法,飛鳥調用時是飛,野獸調用時是奔跑。多態性的實現受到繼承性的支持,利用類繼承的層次關系,把具有通用功能的協議存放在類層次中盡可能高的地方,而將實現這一功能的不同方法置于較低層次,這樣,在這些低層次上生成的對象就能給通用消息以不同的響應。在 OOPL 中可通過在派生類中重定義基類函數(定義為重載函數或虛函數)來實現多態性。
Java專業術語
Application: 顯示字符串的Application應用程序。
Applet:通常嵌入在網頁中運行
Java可以在平臺之上再提供一個Java運行環境(Java Runtime Environment,JRE)這個Java運行環境由Java虛擬機(Java Virtual Machine,JVM)、類庫以及一些核心文件組成
JDK(Java Development Kit ):編寫Java程序的程序員使用的軟件
JRE(Java Runtime Environment):運行Java程序的用戶使用的軟件
Server JRE (Java SE Runtime Environment):服務端使用的 Java 運行環境
SDK(Software Development Kit):軟件開發工具包,在Java中用于描述1998年~2006年之間的JDK
DAO(Data Access Object):數據訪問接口,數據訪問,顧名思義就是與數據庫打交道
MVC(Model View Controller):模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用于組織代碼用一種業務邏輯和數據顯示分離的方法
類。對象,方法,實例
對象:對象是類的一個實例,有狀態和行為。例如,一條狗是一個對象,它的狀態有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。
類:類是一個模板,它描述一類對象的行為和狀態。
方法:方法就是行為,一個類可以有很多方法。邏輯運算、數據修改以及所有動作都是在方法中完成的。
實例變量:每個對象都有獨特的實例變量,對象的狀態由這些實例變量的值決定。
第一個Java程序
public class HelloWorld{
/*第一個Java程序
輸出 Hello world
*/
public static void main(String[] args){
System.out.println("Hello World");
}
}
Java基本語法
大小寫敏感:Java 是大小寫敏感的,這就意味著標識符 Hello 與 hello 是不同的。
類名:對于所有的類來說,類名的首字母應該大寫。如果類名由若干單詞組成,那么每個單詞的首字母應該大寫,例如 MyFirstJavaClass 。
方法名:所有的方法名都應該以小寫字母開頭。如果方法名含有若干單詞,則后面的每個單詞首字母大寫。
源文件名:源文件名必須和類名相同。當保存文件的時候,你應該使用類名作為文件名保存(切記 Java 是大小寫敏感的),文件名的后綴為 .java。(如果文件名和類名不相同則會導致編譯錯誤)。
主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法開始執行。
Java 標識符
Java 所有的組成部分都需要名字。類名、變量名以及方法名都被稱為標識符。
關于 Java 標識符,有以下幾點需要注意:
- 所有的標識符都應該以字母(A-Z 或者 a-z),美元符($)、或者下劃線(_)開始
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下劃線(_)或數字的任何字符組合
- 關鍵字不能用作標識符
- 標識符是大小寫敏感的
- 合法標識符舉例:age、$salary、_value、__1_value
- 非法標識符舉例:123abc、-salary
- 變量和方法:第一個單詞小寫,從第二個單詞開始首字母大寫,如:tarenaStudent。
- 常量:所有字母大寫,每個單詞之間用 _ 連接。
常見轉義字符(逃逸字符)
"\b" (退格)
"\f" (換頁)
"\n" (換行)
"\r" (回車)
"\t" (水平制表符(到下一個tab位置))一般是8個字符
"\' " (單引號)
"\" " (雙引號)
"\\" (反斜杠)
Java 變量
Java 中主要有如下幾種類型的變量
- 局部變量
- 類變量(靜態變量)
- 成員變量(非靜態變量)生存期是對象的生存期,作用域是類內部的成員函數
- 定義在函數內的變量叫本地變量:作用域和生存期都在函數內部
Java 數組
數組是儲存在堆上的對象,可以保存多個同類型變量。
Java 枚舉
枚舉限制變量只能是預先設定好的值,枚舉可以單獨聲明或者聲明在類里面。方法、變量、構造函數也可以在枚舉中定義。
Java的八種基本類型:(按字節來分)
boolean 布爾型 1個字節 8bit(8位) 包裹類型Boolean
byte 字節類型 1個字節
char 字符類型 2個字節 包裹類型Character
short 短整型 2個字節
int 整型 4個字節 包裹類型Integer
float 浮點型(單精度) 4個字節
long 長整型 8個字節
double 雙精度類型 8個字節 包裹類型Double
Java中默認的整數類型是int,如果要定義為long ,則要在數值后加上L或者l
默認的浮點型是雙精度浮點,如果要定義float,則要在數值后面加上f或者F
一個字節等于8位,1個字節等于256個數。2^8
一個英文字母或者阿拉伯數字占一個字節,一個漢字占2個字節
Integer.MAX_VALUE獲得最大值v
注釋規范
1.類注釋
在每個類前面必須加上類注釋,注釋模板如下:
/**
* Copyright (C), 2006-2010, ChengDu Lovo info. Co., Ltd.
* FileName: Test.java
* 類的詳細說明
*
* @author 類創建者姓名
* @Date 創建日期
* @version 1.00
*/
2.屬性注釋
在每個屬性前面必須加上屬性注釋,注釋模板如下:
/** 提示信息 */
private String strMsg = null;
3.方法注釋
在每個方法前面必須加上方法注釋,注釋模板如下:
/**
* 類方法的詳細使用說明
*
* @param 參數1 參數1的使用說明
* @return 返回結果的說明
* @throws 異常類型.錯誤代碼 注明從此類方法中拋出異常的說明
*/
4.構造方法注釋
在每個構造方法前面必須加上注釋,注釋模板如下:
/**
* 構造方法的詳細使用說明
*
* @param 參數1 參數1的使用說明
* @throws 異常類型.錯誤代碼 注明從此類方法中拋出異常的說明
*/
5.方法內部注釋
在方法內部使用單行或者多行注釋,該注釋根據實際情況添加。如:
//背景顏色
Color bgColor = Color.RED
Java編譯和運行過程
具體操作
Scanner in = new Scanner(System.in);
int n = scanner.nextInt();//nextint 讀入整數
System.out.println(in.nextline());//nextline 讀入一整行
final int a = 100;// final int 常量,不能改變
System.out.print((int)(a)); //強制類型轉換
關系比較優先級中:==和!=的優先級要低于其他的
如:! > && > ||
- 6>5>4 這是錯誤的,得到true>4
- a == b == true 這是正確的
- a == b == 4 這是錯誤的 true = 4
- a == b > false 這是錯誤的
注意double類型的數不能互相比較,有誤差 - 只能通過 Math.abs(a-b) < 1e-6; //a,b 為浮點數
一般遵循單一出口原則
循環和分支還有判斷和c++基本一致
如果有固定次數,用for;必須先進行一次用do while,其他情況用while
如果要模擬一個大的循環,可以先模擬一個小的做出判斷
產生隨機數int num = (int) (Math.random()*100+1);
break可以跳出多重循環,可以在循環前放一個標號來標示循環,帶標號的break和continue對那個循環起作用。
OUT: //是一個label
for(;;)
{
for(;;)
{
System.out.println("nihao");
break OUT;
}
}
//for循環的第二種方式叫for - each循環
//不能用于修改數組,可以用于讀出數組的內容
int data[] = new int[100];
for(int k : data){}
System.out.printf("%.2f",a);//輸出小數點后兩位
布爾類型:判斷真假
boolean
String 類型
取出某個字符s.charAt(i);//i從0-s.length()-1
比較兩個字符串內容 s.equals(b);//結果為真輸出true
比較兩個字符串大小s.compareTo(b);//s<b,結果是負 s = b,結果是0 s > b,結果是正
compareToIgnoreCase可以不區分大小寫的來比較大小
取出子字符串substring(n);//從n一直取到末尾
substring(a,b);//從a取到b;不包括b位置
indexOf可以找出字符串中第一個字母的位置
s.indexOf('A');s.indexOf("A23");輸出A存在的位置
indexOf('a',loc+1);//從loc位置開始往后找a
字符串的改變操作都是制造一個新的字符串出來
函數
函數就是一塊代碼,接收0或者多個參數,做一件事情,并返回0或多個值
包括
public static void sum(int a)//函數頭,sum叫函數名,void是返回類型
{
//函數體
}
Math類 函數
abs求絕對值
round求四舍五入的值
random給出一個從0-1的隨機數
pow(2,3.2);計算23.2次方
類和對象
對象:對象是實體,需要被創建,可以為我們做事情
類:類是規范,根據類定義來創造對象
對象 = 屬性 + 服務
this是成員函數的一個特殊的固有的本地變量,它表達了調用這個函數的那個對象
int price;
void setPrice(int price1)
{
this.price = price1;//
}
對象初始化
構造函數:一個成員函數名和類名完全相同,創建類的每一個對象會自動調用這個函數,沒有返回類型,可以重載(同名,參數表不同)
對象交互
一個對象里可以擁有另一個對象的成員
訪問屬性
封裝
概念 :封裝,就是把數據和對這些數據的操作放在一起,并且用這些操作把數據掩蓋起來,是面向對象的基本概念之一,也是最核心的概念。
private
private只能用于成員變量還有成員函數,它的意思是說這個變量或者函數是這個類所私有的,只有在這個類的內部才能訪問到
- 而類的內部指的是成員函數和定義初始化
- 這個限制是對類的而不是對對象的(這一點我們可以這樣解釋,在一個定義有多個對象的類中,在類內部的對象可以互相使用類內的對象)
public
public字如其名,可以被任何對象所調用。
值得注意的是,當我們不在成員函數上使用public關鍵字的時候,被認為是"friendly",在同一個包下是可以被使用的,
同時,我們在定義類的時候也用到的是public,我們在java類文件的類名稱必須與文件名一致,否則需要重構
上面提到的定義public成員函數和成員變量的,對于定義類也是這么一回事,沒有在這個包里面就不能用。
- 一個編譯單元最多只有一個public class;其他都是private
package包
包的名字可以帶","表達的是在文件系統里文件夾的層次,每一個點代表一個文件夾的層次。通過這個管理類,將類寫上全名,分門別類放在一個包里面,形成一個類的有效管理機制。
import 包名.類名;
import 包名.*;//引進包內的所有文件,不推薦,有可能有重名
static 類變量
這個關鍵字可以用來定義類變量,這個變量是存在于整個類中的,它可以在對象中直接呼出,并且修改,修改的時候所有屬于這個類的對象都會被相對應地修改,也可以直接通過類直接呼出變量進行修改。
在含有static定義的函數可以在一個類內直接調用。
類函數中沒有this,因為類函數不會和某個對象或者其成員產生互動,也就不需要使用this標識調用其的是哪個對象。只能用來修改static變量,static的初始化和對象的創建沒有關系。
parseDouble
浙公網安備 33010602011771號