Java學習筆記03--main方法詳解;單例設計模式;繼承;instanceof 關鍵字
阿新 • • 發佈:2018-12-25
===============java相關講解=============
main函式的詳解:
public : 公共的。 許可權是最大,在任何情況下都可以訪問。 原因: 為了保證讓jvm在任何情況下都可以訪問到main方法。 static: 靜態。靜態可以讓jvm呼叫main函式的時候更加的方便。不需要通過物件呼叫。 void: 沒有返回值。 因為返回的資料是 給 jvm,而jvm使用這個資料是沒有意義的。所以就不要了。 main: 函式名。 注意: main並不是關鍵字,只不過是jvm能識別的一個特殊的函式名而已。 arguments :擔心某些程式在啟動需要引數。
class Demo4 {
public static void main(String[] args)
{
System.out.println("陣列的長度:"+ args.length);
for(int i = 0 ; i <args.length ; i++){
System.out.print(args[i]+",");
}
Scanner scanner = new Scanner(System.in);
}
}
單例設計模式
單例設計模式的步驟:
餓漢單例設計模式
- 私有化建構函式。
- 宣告本類的引用型別變數,並且使用該變數指向本類物件。
- 提供一個公共靜態的方法獲取本類的物件。
懶漢單例設計模式:
- 私有化建構函式。
- 宣告本類的引用型別變數,但是不要建立物件,
- 提供公共靜態 的方法獲取本類 的物件,獲取之前先判斷是否已經建立了本類 物件
,如果已經建立了,那麼直接返回物件即可,如果還沒有建立,那麼先建立本類的物件,
然後再返回。
推薦使用: 餓漢單例設計模式。 因為懶漢單例設計模式會存線上程安全問題,目前還不能保證一類在記憶體中只有一個物件。
//餓漢單例設計模式 ----> 保證Single在在記憶體中只有一個物件。
class Single{
//宣告本類的引用型別變數,並且使用該變數指向本類物件
private static Single s = new Single();
//私有化建構函式
private Single(){}
//提供一個公共靜態的方法獲取本類的物件
public static Single getInstance(){
return s;
}
}
//懶漢單例設計模式 ----> 保證Single在在記憶體中只有一個物件。
class Single2{
//宣告本類的引用型別變數,不建立本類的物件
private static Single2 s;
//私有化了建構函式
private Single2(){}
//
public static Single2 getInstance(){
if(s==null){
s = new Single2();
}
return s;
}
}
java繼承
繼承:繼承是通過關鍵字extends體現的。
繼承的格式:
class 類名1 extends 類名2{
}
繼承要注意的事項:
- 千萬不要為了減少重複程式碼而去繼承,只有真正存在著繼承關係的時候才去繼承。
- 父類私有的成員不能被繼承。
- 父類的建構函式不能被繼承。
- 建立子類物件時預設會先呼叫父類無參的建構函式。
//人類
class Person{
String name;
private int age;
public Person(String name){
this.name = name;
}
public Person(){
System.out.println("Person類的構造方法被呼叫了....");
}
public void eat(){
System.out.println(name+"在吃飯...");
}
}
//學生類
class Student extends Person { // Student 就稱作為Person類的子類, Person類就稱作為Student的父類(超類、基類)
int num; //學號
public Student(){
System.out.println("Student類的構造方法被呼叫了....");
}
public void study(){
System.out.println(name+"good good study , day day up");
}
}
疑問: 為什麼要呼叫父類的構造方法啊?這樣子做的意義在那?
呼叫父類 的構造方法是可以初始化從父類繼承下去的屬性的。
class Fu{
int x = 10;
String name;
public Fu(String name){
this.name = name;
System.out.println("Fu類d帶參的構造方法...");
}
public Fu(){
System.out.println("Fu類無參的構造方法...");
}
}
class Zi extends Fu{
int x = 20;
public Zi(String name){
super(name); //指定呼叫父類一個引數的建構函式。
}
public void print(){
System.out.println("x1 = "+ x);
}
}
class Demo8
{
public static void main(String[] args)
{
Zi z = new Zi("大頭兒子");
System.out.println("name= "+z.name);
}
}
instanceof 關鍵字
instanceof關鍵字的作用:判斷一個物件是否屬於指定的類別。
instanceof關鍵字的使用前提:判斷的物件與指定的類別必須要存在繼承或者實現的關係。
instanceof關鍵字的使用格式:
`物件 instanceof 類別`
一般我們做強制型別轉換之前都會使用該關鍵字先判斷一把,然後在進行轉換的。
class Demo{
public static void main(String[] args)
{
Dog d = new Dog("哈士奇","白色");
System.out.println("狗是狗類嗎?"+ (d instanceof Dog));
System.out.println("狗是動物類嗎?"+ (d instanceof Animal));
//System.out.println("狗是老鼠類嗎?"+ (d instanceof Mouse));
Animal a = new Animal("狗娃","黃色"); //狗娃是人
System.out.println("動物都是狗嗎?"+ (a instanceof Dog));
}
}
——————————————————————————————————————————————————
===============與上方java相關的iOS技術關聯理解==========
ios程式啟動原理
iOS單例 –Singleton
單例模式的意思就是隻有一個例項。單例模式確保某一個類只有一個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。
單粒:保證程式執行過程中,永遠只有一個物件例項
目的是:全域性共享一份資源、節省不必要的記憶體開銷
單例的特點:
- 1.單例物件可以儲存一些共享的資訊,每個物件都能訪問和修改
- 2.如果一個類的建立非常耗費效能,那麼這個類最好設計為單列,只建立一次,節約效能;
缺點:單例物件一旦建立,物件指標是儲存在靜態區的,單例物件在堆中分配的記憶體空間,會在應用程式終止後才會被釋放;
#import "ServiceManager.h"
static ServiceManager *defaultManager;
@implementation ServiceManager
+(ServiceManager *)defaultManager{
if(!defaultManager)
defaultManager=[[self allocWithZone:NULL] init];
return defaultManager;
}
@end
#import "ServiceManager.h"
@implementation ServiceManager
+(ServiceManager *)sharedManager{
static dispatch_once_t predicate;
static ServiceManager * sharedManager;
dispatch_once(&predicate, ^{
sharedManager=[[ServiceManager alloc] init];
});
return sharedManager;
}
@end