#千峰#java08初始化和静态

一、构造方法

1、定义:

。用于初始化对象

。我们在通过new关键字创建对象的时候,必须调用构造方法

2、特点:

。方法名和类名相同(大小写也要与类名相同)

。没有返回值类型。注意,连void都没有

。没有具体的返回值return

。构造方法可以是有参的,也可以是无参的

3、演示


public class Student{ //构造方法 public Student(){ System.out.println("构造方法"); } }

4、注意事项:

。在创建对象时,构造方法会在对象创建之后自动被调用

。如果没有写构造方法,那么编译器会自动加一个空参的构造方法

。如果已经写了有参的构造方法,编译器就不会再加上空参的构造方法

。这时,如果还想使用空参的构造,那么,就需要手动补上空参构造

。构造方法必须通过new关键字来调用,不可以使用对象名来调用

。构造方法也是成员方法,只是比较特殊而已,所有成员方法的属性构

造方法也拥有

。创建对象的时候,只能调用一个构造方法,但构造方法内部可以相互

调用

。本类中的成员方法无法直接调用构造方法

二、构造方法的重载

1、定义:

。和成员方法的重载一样,方法名相同,参数列表不同。

。需要注意的是,只要是构造方法,方法名一定是相同的,也就是说构

造方法的重载只是参数列表不同

2、构造方法相互调用

。构造方法可以重载,我们可能会写多个构造方法以应对不同的赋值

动作,已经写过的构造方法可以直接调用

。使用this(),表示调用本类的构造方法

。this()必须写在第一行

3、演示

public class Student { 
private String name ; private int age; //空参构造
 public Student(){ 
} //有参的构造方法
 public Student(int age){
 if(age>0&&age<150) this.age = age; } 
public Student(String name,int age){ //调用构造方法 this(age); 
this.name = name; } }

三、类成员之间的相互调用

1、定义;

。成员变量一般来说都是为了成员方法服务的

。成员方法可以根据成员属性的不同做出不同的应对

2、演示

public class RectangLe{
 private int high ;
 private int with; 
public Rectangle(int high ,int with){
 this.high = high; 
this.with = with; 
} //获取面积 public int getArea(){
 return high*with; 
} //获取长方形的周长 public int getLength(){
 return (high + with)*2; 
} public int getHigh(){ 
return high; 
} public int setHigh(int high){ 
this.high = high; 
} public int getWith(){ 
return with;
 } public int setWith(int with){
 this.with = with; 
} 
}

四、代码块:

1、定义:

。代码块就是定义一个无名称的代码块,用{}括起来

2、分类:

。局部代码块:方法中

。构造代码块: 类中方法外

。静态代码块:类中方法外

。同步代码块:作用域多线程中

3、应用:

。局部代码块:

。限定局部变量的生命周期,及早释放,提高内存利用率

。在方法中创建一个域,限制变量的作用范围

。构造代码块:

。创建对象时候优先于构造方法执行,多个构造方法中相同

的代码存放到构造代码块中,节省代码量

。静态代码;

。给构造代码块加上static关键字就变成了静态代码块,用

于类的初始化,在类加载的时候就执行,并且只在类加载的

时候执行一次,一般用于加载驱动。

public class Demo { //构造代码块 { System.out.println("构造代码块执行了"); } //静态代码块 static{ System.out.println("静态代码块执行了"); } public void method(){ //局部代码块 { System.out.println("局部代码块执行了"); } } }

4、对象初始化顺序问题

。成员变量==》构造代码块==》构造方法

。成员变量和构造代码谁在上面先执行谁(一般是,成员变量在上)

五、静态(static)

[图片上传失败...(image-5da7d4-1584889379646)]

。静态:存储在静态方法区,跟对象没有关系,创建的对象中是不存在

静态的内容的

。好处:不用创建对象也可以直接调用,节省时间,每个对象中不用去

记录这个方法,节省对象的存储空间。

1、定义:

。用于修饰类的成员,表示静态

。一旦被修饰,类的成员将不再属于这个类创建的对象

2、特点:

。随着类的加载而载

。优先于对象存在

。被类的所有对象共享

。通过类名调用

·其实他本身也可以通过对象名调用

·推荐使用类名调用

。优先于非静态成员

。类的所有静态成员都存储于静态方法区

3、初始化顺序:

。静态成员变量==>静态代码块==>成员变量==>构造代码块==>构造方

。静态成员变量和静态代码块(构造代码块)谁写在前面谁先执行

4、静态方法的缺点:

。静态方法区小,存储过多的内容,容易造成内存溢出,还会降低

查询效率

六、类加载:

1、。从硬盘将.class文件读到内存中,形成java的类,这个过程称之为

类加载。

2、分两步(其实是13步):

。加载类

。类初始化

七、静态的使用:

。非静态可以直接调用静态,因为:非静态可以执行时,静态一定存在

。静态无法调用非静态,因为:因为不确定非静态是否真的存在,就是

存在,对象有可以有很多,也不知道用哪个对象的

。静态只能调用静态,非静态可以调用静态

1、定义:

。公用的变量就可以写成静态的、频繁被使用的方法要写成静态的

。当一个雷的成员被频繁的使用的时候,就可以写成静态

。当一个属性或方法被所有的对象共享的时候,可以写成静态的

2、使用格式:

。类名.成员变量名

。类名.方法名()

3、演示

public class Demo{
 //静态成员变量 
public static String name = "小红";
 //静态的成员方法
 public static void method(){ 
System.out.println("静态方法");
 }
 }
 public static void main(String[] args){
 //调用静态成员变量
 System.out.pringtln(Demo.name); //调用静态的成员方法 Demo.method(); 
}

4、注意事项:

。静态的成员在内存中只有一份

。所有的操作指向的都是同一个静态成员

。可以使用对象名调用,但是不推荐

。静态可以极大的提升运行的效率

。静态随着类的存在而存在,随着类的消亡而消亡,jvm不关闭

,静态就一直存在,太多的话,容易造成内存溢出。

。频繁被使用的成员要写成静态的

八、静态和非静态

1、this关键字的问题

。静态中方法无法使用this关键字,因为静态方法调用的时候,不需要

对象

。非静态方法中可以使用this关键字,因为非静态方法在调用的时候必

须有对象

2、访问成员变量

。静态方法只能访问静态的成员变量,如果要使用非静态的成员变量

必须先创建对象

。非静态的方法可以直接访问静态的成员变量,也可以直接访问非静态

的成员变量

3、访问成员方法

。静态方法只能访问静态方法,如果想使用就必须要创建对象

。非静态方法可以直接访问静态方法,也可以直接访问非静态方法

4、简单记

。静态只能访问静态(直接调用)

public class Demo{ static String name = "李四"; int age = 19 ; public static void method(){ //静态方法可以直接访问静态成员变量 System.out.println(name); //这里会报错 //System.out.println(age); //静态要访问非静态的成员变量必须要创建对象 Demo d = new Demo(); System,.out.println(d.age); //静态方法可以直接访问静态方法 method3(); //静态方法想要访问非静态方法必须要先创建对象 demo.method4(); } public void method2(){ //非静态可以直接访问静态成员变量 System.out.println(name); //非静态方法可以直接访问非静态的成员变量 System.out.println(age); //非静态方法可以直接访问静态成员方法 method3(); //非静态方法可以直接访问非静态方法 method4(); } //静态方法 public static void method3(){ } //非静态方法 public void method4(){} }

九、main方法详解

1、格式:

。 public static void main(String[] args){}

2、详解

。public 被jvm调用,访问权限足够大

。static 被jvm调用,不用创建对象,直接类名访问

。void 被jvm调用, 不需要给jvm返回值

。main 一个通用的名称,虽然不是关键字,但是被jvm识别

。String[] args 以前用于接受键盘录入的arguments

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容