java 静态块的作用域_java 学习笔记(一)
對象
new 出來的對象都是保存在堆內存中的
不是使用 new 創建變量,而是使用一個“自動”變量。 這個變量直接存儲"值",并置于棧內存中,因此更加高效。
基本類型有自己對應的包裝類型,如果你希望在堆內存里表示基本類型的數據,就需要用到它們的包裝類
或者使用 自動裝箱
Character ch = 'x';
對象作用域
Java 對象與基本類型具有不同的生命周期。當我們使用 new 關鍵字來創建 Java 對象時,它的生命周期將會超出作用域。
基本類型默認值
無參構造器
一旦你顯式地定義了構造器(無論有參還是無參),編譯器就不會自動為你創建無參構造器。
this
this就是調用改方法的對象,就像是
或者用去在構造器中調用其他其他構造器
static 方法中不會存在 this。你不能在靜態方法中調用非靜態方法
static只能用于屬性(字段、域) 不能用于局部變量
靜態初始化順序
class Bowl {
Bowl(int marker) {
System.out.println("Bowl(" + marker + ")");
}
void f1(int marker) {
System.out.println("f1(" + marker + ")");
}
}
class Table {
static Bowl bowl1 = new Bowl(1);
Table() {
System.out.println("Table()");
bowl2.f1(1);
}
void f2(int marker) {
System.out.println("f2(" + marker + ")");
}
static Bowl bowl2 = new Bowl(2);
}
class Cupboard {
Bowl bowl3 = new Bowl(3);
static Bowl bowl4 = new Bowl(4);
Cupboard() {
System.out.println("Cupboard()");
bowl4.f1(2);
}
void f3(int marker) {
System.out.println("f3(" + marker + ")");
}
static Bowl bowl5 = new Bowl(5);
}
public class StaticInitialization {
public static void main(String[] args) {
System.out.println("main creating new Cupboard()");
new Cupboard();
System.out.println("main creating new Cupboard()");
new Cupboard();
table.f2(1);
cupboard.f3(1);
}
static Table table = new Table();
static Cupboard cupboard = new Cupboard();
}
==輸出:==
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
main creating new Cupboard()
Bowl(3)
Cupboard()
f1(2)
main creating new Cupboard()
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)
一個java文件里面只能有一個public class
靜態屬性安申明順序執行,之后再是構造器
類中的static只會初始化一次
非靜態初始化
static{
/* 靜態代碼塊*/
}
{
/*非靜態代碼塊*/
}
==非靜態代碼塊在每次生成對象是都會執行==
// housekeeping/Mugs.java
// Instance initialization
class Mug {
Mug(int marker) {
System.out.println("Mug(" + marker + ")");
}
}
public class Mugs {
Mug mug1;
Mug mug2;
{ // [1]
mug1 = new Mug(1);
mug2 = new Mug(2);
System.out.println("mug1 & mug2 initialized");
}
Mugs() {
System.out.println("Mugs()");
}
Mugs(int i) {
System.out.println("Mugs(int)");
}
public static void main(String[] args) {
System.out.println("Inside main()");
new Mugs();
System.out.println("new Mugs() completed");
new Mugs(1);
System.out.println("new Mugs(1) completed");
}
}
==輸出:==
Inside main
Mug(1)
Mug(2)
mug1 & mug2 initialized
Mugs()
new Mugs() completed
Mug(1)
Mug(2)
mug1 & mug2 initialized
Mugs(int)
new Mugs(1) completed
數組的創建
int[] a1 = {1, 2, 3, 4, 5};
int[] a = new int[rand.nextInt(20)];
或者
new String[] {"fiddle", "de", "dum"}
==數組的定義==
int[] a
int a[]
可變參數列表
static void printArray(Object... args)
public class NewVarArgs {
static void printArray(Object... args) {
for (Object obj : args)
System.out.print(obj + "!! ");
System.out.println();
}
public static void main(String[] args) {
// Can take individual elements:
printArray(47, (float) 3.14, 11.11);
printArray(47, 3.14F, 11.11);
printArray("one", "two", "three");
printArray(new A(), new A(), new A());
// Or an array:
printArray((Object[]) new Integer[] { 1, 2, 3, 4 });
printArray(); // Empty list is OK
}
}
==輸出:==
==如果把數組傳入可變對象參數中,該方法會把它們當作可變參數列表來接受。==
總結
以上是生活随笔為你收集整理的java 静态块的作用域_java 学习笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 泛型 引用_Java嵌套自引用
- 下一篇: java和php混合_PHP和Java强