Java Study For Six Day( 面向物件二)
static(靜態)關鍵字
用於修飾成員(成員變數和成員函式)
被修飾後的成員具備以下的特點
隨著類的載入而載入
優先於物件存在
被所有的物件共享
可以被類名直接呼叫
靜態注意事項
靜態方法只能訪問靜態成員(原因:因為靜態的內容是隨著類的載入而載入,它先進記憶體)
靜態方法中不能使用this、super關鍵字
主函式是靜態的
public static void main(String[] args)
public:公共的意思,是最大許可權修飾符。
static:由於jvm呼叫main方法的時候,沒有建立物件。
只能通過類名呼叫。所以,main必須用static修飾。
void:由於main方法是被jvm呼叫,不需要返回值。用void修飾。
main:main是主要的意思,所以jvm採用了這個名字。是程式的入口。
String[]:字串陣列
args:陣列名
在執行的時候,通過java命令給args陣列賦值。
格式:java MainTest hello world itcast
靜態變數和成員變數的區別
1.呼叫方式
靜態變數也稱為類變數,可以直接通過類名呼叫,也可以通過物件呼叫,這個變數屬於類
成員變數也稱為例項變數,只能通過物件名呼叫,這個變數屬於物件
2.儲存位置
靜態變數儲存在方法區中的靜態區而成員變數儲存在堆記憶體中
3.生命週期
靜態變數隨著類的載入而存在,隨著類的消失而消失,週期較長
成員變數隨著物件的建立而存在,隨著物件的消失而消失
4.與物件的相關性
靜態變數是所有物件共享的資料而成員變數是每個物件所特有的資料
靜態的優點和弊端
優點:對物件的共享的資料進行單獨的空間儲存,節省記憶體,可以直接用類名呼叫
弊端:生命週期較長,隨著類的消失才消失,訪問許可權出現限制,既靜態只能訪問靜態,訪問非靜態需要使用物件
為什麼使用靜態?
A:當所有物件共享某個資料的時候,就把這個成員變數定義為靜態修飾的。
B:當某個方法沒有訪問該類中的非靜態成員,就可以把這個方法定義為靜態修飾。
但是因為靜態的生命週期較長,所以一般不推薦使用
靜態程式碼塊
它只執行一次,比main還先執行
執行的順序:靜態程式碼塊--->構造程式碼塊--->建構函式
class Person
{
String name;//成員變數,例項變數。(物件在該例項才在)
static String country = "cn";//靜態的成員變數,類變數
public void show()
{
System.out.println(name+"::::"+country);
}
}
class StaticDemo
{
public static void main(String[] args)
{
//Person p = new Person();
//p.name = "zhangsan";
//p.show();
System.out.println(Person.country);
}
}
*主函式
class MainDemo
{
public static void main(String[] args)//new String[]
{
System.out.println(args.length);
}
}
//String[] args = new String[3];
//String [] args = null;
class Person
{
String name;
public static void show()
{
System.out.println("haha");
}
}
class StaticDemo1
{
public static void main(String[] args)
{
//Perosn p = new Person();
//p.show();
Person.show();
}
}
*靜態的應用
public class ArrayTool
{
private ArrayTool(){};//建構函式私有化:為了更為嚴謹,強制讓該類不能建立物件。
public static int getMax(int[] arr)
{
int max = 0;
for(int x = 1;x<arr.length;x++)
{
if(arr[x]>arr[max])
max = x;
}
return arr[max];
}
public static int getMin(int[] arr)
{
int min =0;
for (int x = 1;x<arr.length ;x++ )
{
if(arr[x]<arr[min])
min = x;
}
return arr[min];
}
public static void selectSort(int [] arr)
{
for (int x = 0;x<arr.length-1 ;x++ )
{
for (int y =x+1;y<arr.length ;y++ )
{
if(arr[x]>arr[y])
{
swap(arr,x,y);
}
}
}
}
public static void bubbleSort(int[] arr)
{
for (int x = 0;x<arr.length-1 ;x++ )
{
for (int y=0;y<arr.length-1-x ;y++ )
{
if(arr[y]>arr[y+1])
{
swap(arr,y,y+1);
}
}
}
}
private static void swap(int[] arr,int a,int b)//把不需要其他類使用的功能私有化。
{
int temp = arr[a];
arr[a] =arr[b];
arr[b] =temp;
}
public static void printArray(int[] arr)
{
System.out.print("[");
for (int x=0;x<arr.length ;x++ )
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
}
一個類總會預設會有一個空引數的建構函式。
這個預設的建構函式的許可權和所屬類一致
如果類被public修飾,那麼預設的建構函式也被public修飾。
如果類沒有被public修飾,那麼預設的建構函式,也沒有public修飾
預設建構函式的許可權是隨著類的變化而變化
如何製作(API)
全稱:Application Program Interface 應用程式介面
類中的內容需要用文件註釋
使用JDK\bin目錄下的javadoc工具
格式:javadoc -d 目錄 -author -version Arraytools.java
單例設計模式
設計模式:解決某類問題行之有效的方法,是一種思想,是規律的總結
用來保證某個類在記憶體中只有一個物件
保證唯一性的思想及步驟
為了避免其它程式建立該類的物件,先禁止其它程式建立該類的物件,即將建構函式私有化
為了其它程式能訪問到該類物件,從而在本類中需要建立一個私有的物件
為了方便其它程式能訪問到該類物件,因而需要對外提供一個公共的訪問方式
例如:javaAPI中的Runtime類就是一個典型的單例設計模式
單例設計模式的兩種方式
A:餓漢式 當類載入的時候,就建立物件。
class Student
{
private Student(){}
private static final Student s = new Student();
public static Student getInstance()
{
return s;
}
}
B:懶漢式 當使用的使用,才去建立物件。
class Student
{
private Student(){}
private static final Student s = null;
public static Student getInstance()
{
if(s==null)
{
//執行緒1就進來了,執行緒2就進來了。
s = new Student();
}
return s;
}
}
餓漢式和懶漢式的區別:
餓漢式是類一載入進記憶體就建立好了物件;
懶漢式則是類才載入進記憶體的時候,物件還沒有存在,只有呼叫了getInstance()方法時,
物件才開始建立。
懶漢式是延遲載入,如果多個執行緒同時操作懶漢式時就有可能出現執行緒安全問題,解決執行緒安全問題
可以加同步來解決。但是加了同步之後,每一次都要比較鎖,效率就變慢了,
所以可以加雙重判斷來提高程式效率。
注:開發常用餓漢式,因為餓漢式簡單安全。懶漢式多執行緒的時候容易發生問題
附加:
Math類的使用
數學操作類:給類都是靜態的,沒有構造方法
掌握的知識
成員變數
E:比任何其它值都更接近e(即自然對數的底數)的double值
PI:比其它任何值更接近PI(即圓的周長與直徑之比)的double值
成員方法
static double abs(double a)返回double值的絕對值 返回絕對值
static double ceil(double a) 返回最小值的double值,該值大於或是等於引數,並等於某個整數
static double floor(double a)返回最大值double值,該值小於或是等於引數,並等於某個整數
max:返回兩個值的較大的那個
min:返回兩個值的較小的那個
static long round(double a)返回最接近引數的long
static int round(float a)返回最接近引數的int
static double random()返回帶正號的double值,該值大於或是等於0.0且小於1.0
static double pow(double a,double b)返回第一個引數的第二個引數次冪的值
static double sqrt(double a)返回正確的舍入的double值的平方根
相關推薦
Java Study For Six Day( 面向物件二)
static(靜態)關鍵字 用於修飾成員(成員變數和成員函式) 被修飾後的成員具備以下的特點 隨著類的載入而載入 優先於物件存在 被所有的物件共享 可以被類名直接呼叫 靜態注意事項 靜態方法只能訪問靜態成
java初學 面向物件二 static關鍵字 封裝、繼承和多型
static關鍵字 1:如果沒有static會怎樣? 1:定義Person類 1:姓名、年齡、國籍,說話行為 2:多個構造,過載形式體現 2:中國人的國籍都是確定的 1:國籍可以進行顯示初始化 class Person {
第45節:Java當中的變數,面向物件
Java當中的變數 01 Java當中的例項變數和類變數 什麼是例項變數和類變數呢? 例項變數為沒有用static修飾符修飾的變數,而類變數為用static修飾符修飾的變數。 public class Hello{ // 私有的靜態變數 name priva
面向物件二 成員
本節主要內容: 1. 類的成員 2. 類的成員-變量 3. 類的成員-方法 4. 類的成員-屬性 5. 私有 一. 類的成員: 首先, 什麼是類的成員. 很簡單. 你能在類中寫什麼? 寫的內容就是成員. 到目前為止. 我們 已經學過了一些成員了. class 類名: &n
JAVA學習筆記----第二天面向物件
1.1不同修飾符使用細節 常用來修飾類、方法、變數的修飾符如下: public 許可權修飾符,公共訪問 prtotected 許可權修飾符,受保護訪問 預設什麼也不寫 也是一種許可權修飾符,預設訪問 private 許可權修飾符,私有訪問
JAVA基礎(42)---面向物件程式設計
面向物件 概述 類(class)和物件(object)是面向物件方法的核心概念。 類是對一類事物描述,是抽象的、概念上的定義;物件是實際存在的該類事物的每個個體,
Day面向物件
概述 面向過程:根據業務邏輯從上到下寫壘程式碼 函式式:將某功能程式碼封裝到函式中,日後便無需重複編寫,僅呼叫函式即可 面向物件:對函式進行分類和封裝,讓開發“更快更好更強...” 面向過程程式設計最易被初學者接受,其往往用一長段程式碼來實現指定功能,開發過程中最常見的操作就是貼上複製,
胡八一之Java(七):面向物件的陷阱
一、instanceof的陷阱: 如果前面運算元的編譯型別與後面的型別沒有任何關係,那麼編譯將不通過。例如: String a ="aaa"; System.out.println("a是否屬於MATH的型別:"+(a.instanceof Math)); Stri
Java第三課之面向物件的特性——自學筆記
面向物件的特性 Java作為一門面向物件的語言,有幾大特性 抽象 封裝 繼承 多型 抽象 抽象就是忽略問題中與當前目標無關的方面,只關注與目標有關的那方面。抽象有過程抽象和資料抽象,過程抽象就是面向過程額的程式語言;資料抽象就是面向物件的程式語言。資料抽象是
Java版資料結構之面向物件的陣列
操作簡介 獲取陣列長度 列印陣列 末尾新增一個元素 在指定位置插入一個元素 刪除一個元素 獲取指定位置元素 修改指定位置元素 public class MyArray { private int[] elements; public MyA
Java 學習(三)—— 面向物件
一、面向過程的思想和麵向物件的思想 (1)面向過程是一種思維方式。當試圖通過面向過程解決問題時,我們的關注點在於問題解決的流程,重在這個過程的控制,需要用大量的模組(模組化的思想源自於硬體,在C語言中是函式)將大問題拆解,程式設計師通過控制模組的執行順序以解決問題。
java基礎知識整理 ---Day06面向物件
一、程式語言的發展 機器語言 直接由計算機的指令組成,指令、資料、地 址都以“0”和“1”組成:可以被計算機直接識別並執行。 組合語言 用容易理解和記憶的符號表示指令、資料以 及暫存器等,抽象層次很低,程式設計師需要考慮大量的機器細節。 高階語言 遮蔽了機器細節,
學生成績管理系統2(java類的運用,面向物件思想的應用)
本來想自己直接用java的類寫一個管理系統,結果還是心太燥,於是順著視訊教程跟著進度寫完了這個小專案,體會到了面向物件思想的妙用 開發環境: eclipse 實現功能:1.輸入學生資訊 姓名 年齡 2.輸入學生的成績 java, c#
java學習筆記(6-面向物件程式設計)
1.學生類案例 學生類: package daigua6; /* * 定義一個學生類 * */ public class Student { // 成員變數 String name; int age; // 成員方法 public void study
Java千百問_05面向物件(011)_引用傳遞和值傳遞有什麼區別
1、什麼是值傳遞 值傳遞,是將記憶體空間中某個儲存單元中存放的值,傳送給另一個儲存單元。(java中的儲存單元並不是實體記憶體的地址,但具有相關性) 例如: //定義了一個改變引數值的函式 public static void changeVa
JS面向物件(二)——成員屬性、靜態屬性、原型屬性與JS原型鏈
前 言 上一篇部落格(https://blog.csdn.net/caseywei/article/details/86298732 )中,我們介紹了JS中的面向物件,並詳細的解釋了this的指向問題。本篇部落格,我們繼續來學習JS的面向物件。來深入理解一下JavaSc
Java千百問_05面向物件(002)_package和import作用是什麼
1、java中package是什麼 即包。簡單地說,它是分類class(類)與interface(介面)的方式。 在Java開發中,將會寫數以百計的類和介面,因此,對它們分類是必須的。 瞭解更多類看這裡:類、物件到底有什麼祕密 瞭解更多介面看這裡
Java設計模式1:面向物件程式設計的四大特徵和設計模式的六大原則
這篇博文算是對《設計模式之禪》的讀書筆記。這本書寫得非常好,通俗易懂,強烈推薦!另外,也參考了很多其他的資料,包括http://www.runoob.com/design-pattern/design-pattern-tutorial.html以及網上一些部落格等,再次表示感
Java基礎-第六章(面向物件5)
一、介面 (一) 介面的定義和使用 多個抽象類的抽象就是介面。 在Java中最小的程式單元就是類,介面其實是一個特殊的類。 Java中的介面表示規範,用於定義一組抽象方法,表示某一類事物必須具備的功能,要求實現類必須來實現介面並提供方法實現。 定義
Java千百問_05面向物件(008)_java中覆蓋是什麼
1、什麼是覆蓋 在java中,覆蓋是針對繼承才有的概念,某一個子類需要某些方法或屬性,但又不想使用父類中的同名的方法或屬性,就需要使用覆蓋。 直白的來說,就是在子類中編寫與父類同名、同參數、