【威哥說】很多人在工作中不斷的遇到瓶頸孽亲,想研究新的技術(shù),卻發(fā)現(xiàn)自己的基礎不扎實展父,無法深入理解某一項技能的原理問題返劲。這就需要大家能在工作之余穩(wěn)固一下自己的基礎知識了玲昧。有了比較完善的基礎積淀才能事半功倍。
【正文】上篇介紹了Android和ios該如何選擇的文章后篮绿,收到了很多同學的回復孵延,統(tǒng)計下來選擇Android的要多于ios。要學Android開發(fā)亲配,必須學習java尘应,下面這些知識點掌握了,Android就會學習的更快吼虎。
1. 基本數(shù)據(jù)類型
整形:
byte ? ? ?1 個字節(jié)
short ? ? 2 個字節(jié)
int ? ? ? ? ?4個字節(jié)
long ? ? ? 8個字節(jié)
字符:
char ? ? 2個字節(jié)
浮點數(shù):
float ? ? ? 4個字節(jié)
double ? 8個字節(jié)
布爾:
boolean ? 1個字節(jié)
2.java 7 ?新增二進制整數(shù)
以0b或者0B開頭
3.java中字符時16位的Unicode編碼方式犬钢,格式是'\uXXXX',其中xxxx代表一個十六進制整數(shù)
4.java中規(guī)定了正無窮大思灰、負無窮大和零
正無窮大= ?一個正數(shù)除以0
負無窮大= 一個負數(shù)除以零
0.0 除以0.0 ?或者 對一個負數(shù)開方 ?得到一個非數(shù)
5. 在java中布爾類型只能是true和false
6. 在java中沒有多維數(shù)組
看似像C語言中的多維數(shù)組不是真正的數(shù)組玷犹,比如 a[3][4] , a[0] a[1] a[2] ?是真實存在的,裝的是地址官辈,和c語言中動態(tài)分配為的數(shù)組一樣
int ?[][] ?b ?= new ?int[3][4]
7. Java中帶包的編譯方法
javac -d . ?Hello.java ? ?會在當前目錄下生成目錄樹
運行 ?java ?包名字.類名字
8. Java多態(tài)中的對象的filed 不具有多態(tài)性箱舞,如 ?父類 ?對象 = ?new ?子類(), 對象.field ?是調(diào)用的父類的拳亿,即使子類中覆蓋了該字段。
9. instanceof 運算符
格式: 引用變量名 ?instanceof ?類名(或者接口) ?他用于判斷前面的對象是否是后面對象的類愿伴,子類肺魁、實現(xiàn)類的實例,是返回true隔节,否者返回false
10. Java 中基本數(shù)據(jù)類型和對應封裝類之間的轉(zhuǎn)化
int ? a ?= ?1;
Integer ?A ?= ?new Integer(a);
a ?= A.intValue();
其他的類型也是這樣的鹅经。
11.單例(singleton)類 例子
代碼如下:
class Singleton
{
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance()
{
if(instance == null)
{
instance = new Singleton();
}
return instance;
}
public static void main(String[] args)
{
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2);
}
}
12.final修飾的成員變量初始化問題
類Field: 必須在靜態(tài)初始塊中或聲明該FIeld時指定初始值
實例Field:必須在非靜態(tài)初始塊中或聲明該FIeld時指定初始值或構(gòu)造器中聲明
13.Final 變量必須顯式初始化,系統(tǒng)不會對final變量進行隱式初始化
14.java會使用常量池來管理曾經(jīng)用過的字符串直接常量怎诫,例如:String a = "java"; 瘾晃,系統(tǒng)把常量字符串“java”存在常量池,當再次執(zhí)行 String b = "java"; ?a == b ?是true
15.final 方法不可以重寫幻妓,final類不能被繼承
如果用private 方法 和 final private 是一樣的
若果是用final修飾的方法在子類中出現(xiàn)蹦误,那是子類新定義的,與父類沒有關(guān)系
16.不可變類:創(chuàng)建后該類的Field是不可改變的肉津。java提供了8個基本變量的包裝類和string都是不可改變類强胰。
17.緩存實例的不可改變類
代碼如下:
class CacheImmutale
{
private static int MAX_SIZE = 10;
private static CacheImmutale[] cache = new CacheImmutale[MAX_SIZE];
private static int pos = 0;
private final String name;
private CacheImmutale(String name)
{
this. name = name;
}
public String getName()
{
return name;
}
public static CacheImmutale valueOf(String name)
{
for(int i = 0; i < MAX_SIZE; ++i)
{
if(cache[i] != null && cache[i].getName().equals(name))
return cache[i];
}
if(pos == MAX_SIZE)
{
cache[0] = new CacheImmutale(name);
pos = 1;
}
else
{
cache[pos++] = new CacheImmutale(name);
}
return cache[pos -1];
}
public boolean equals(Object obj)
{
if(this == obj)
return true;
if(obj != null && obj.getClass() == CacheImmutale.class)
{
CacheImmutale ci = (CacheImmutale)obj;
return name.equals(ci.getName());
}
return false;
}
public int hashCode()
{
return name.hashCode();
}
}
public class CacheImmuteTest
{
public static void main(String[] args)
{
CacheImmutale c1 = CacheImmutale.valueOf("Hello");
CacheImmutale c2 = CacheImmutale.valueOf("Hello");
System.out.println(c1 == c2);
}
}
用緩存實例要看某個對象的使用頻率,若重復使用那就利大于弊妹沙,若不經(jīng)常使用那弊就大于利
還有java提供的java.lang.Integer ?創(chuàng)建數(shù)值在-128-127之間的數(shù)采用緩存機制的
Integer in2 = Integer.valueOf(6);
Integer in3= Integer.valueOf(6);
in2 == in3 ?is true;
18. static 和 abstract 不能同時修飾一個方法偶洋,沒有類抽象方法
19.一個類可以又一個父類,實現(xiàn)多個接口距糖,接口中Filed是public 玄窝、static牵寺、final的,方法是public abstract的
20.非靜態(tài)內(nèi)部類的方法訪問某個變量恩脂,搜索順序為:先內(nèi)部類中方法內(nèi)-> 內(nèi)部類 ?-> 外部類中如果都找不到則出現(xiàn)編譯錯誤
代碼如下:
import java.util.*;
public class DiscernVariable
{
private String prop = "外部類的實例變量";
private class InClass
{
private String prop = "內(nèi)部類的實例變量";
public void info()
{
String prop = "局部變量";
System.out.println("外部類的field值:" + DiscernVariable.this.prop);
System.out.println("內(nèi)部類的field值:" + this.prop);
System.out.println("局部變量的值:" + prop);
}
}
public void test()
{
InClass in = new InClass();
in.info();
}
public static void main(String[] args)
{
new DiscernVariable().test();
}
}
21.非靜態(tài)內(nèi)部類不能有靜態(tài)方法缸剪、靜態(tài)Field、靜態(tài)初始化塊
22.在外部類之外訪問內(nèi)部類
訪問非靜態(tài)內(nèi)部類:outclass.Inclass varname = new outclass().new InClass();
訪問靜態(tài)內(nèi)部類: ?outclass.Inclass varname = new outclass.Inclass();
代碼如下:
import java.util.*;
class Out
{
class In
{
public In()
{
System.out.println("非靜態(tài)內(nèi)部類構(gòu)造器");
}
}
}
public class CreatInnerInstance
{
public static void main(String[] args)
{
Out.In in = new Out().new In();
/*
以上的代碼可分開寫為:
Out.In in;
Out out = new Out();
in = out.new In();
*/
}
}
class SubClass extends Out.In
{
//顯示定義SubClass的構(gòu)造器
public SubClass(Out out)
{
//通過轉(zhuǎn)入的Out對象顯示調(diào)用In的構(gòu)造器
out.super();
}
}
代碼如下:
import java.util.*;
class StaticOut
{
static class StaticIn
{
public StaticIn()
{
System.out.println("靜態(tài)內(nèi)部類構(gòu)造器");
}
}
}
public class CreatStaticInnerInstance
{
public static void main(String[] args)
{
StaticOut.StaticIn in = new StaticOut.StaticIn();
/*
以上的代碼可分開寫為:
StaticOut.StaticIn in;
in = new StaticOut.StaticIn();
*/
}
}
class SubClass extends StaticOut.StaticIn
{
//無須創(chuàng)建內(nèi)部類實例
}
更多內(nèi)容關(guān)注微信公眾號mjw-java或訪問www.moliying.com