Java构造方法 static关键字使用

方法 就是我们曾经学过的方法 用于描述对象的行为

但是 方法中还有一种特殊的方法,方法名字和类相同,用于对象的初始化。

构造方法是一种特殊方法,使用关键字new在实例化对象的过程中会被自动调用

new执行过程

●为对象分配内存空间

●调用对象的构造方法

语法规则

1.方法的名称和类名必须相同

2.构造方法没有返回值的类型

3.每一个类都会有一个构造方法(若没有则系统会自己生成构造方法

class Person { 
 
 private String name;//实例成员变量
 private int age; 
 private String sex; 

 //默认构造函数 构造对象 
 public Person() { 
 this.name = "caocao"; 
 this.age = 10; 
 this.sex = "男"; 
 } 

 //带有3个参数的构造函数
 public Person(String name,int age,String sex) { 
 this.name = name; 
 this.age = age; 
 this.sex = sex; 
 } 
 public void show(){ 
 System.out.println("name: "+name+" age: "+age+" sex: "+sex); 
 } 
 
} 

public class Main{ 
 public static void main(String[] args) { 
 Person p1 = new Person();//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
 p1.show(); 
 Person p2 = new Person("zhangfei",80,"男");//调用带有3个参数的构造函数
 p2.show(); 
 } 
} 
// 执行结果
name: caocao age: 10 sex: 男
name: zhangfei age: 80 sex: 男

static关键字

一.修饰属性
  在定义一个类时,只是在描述某类事物的特征和行为,并没有产生具体的数据。只有通过new

关键字创建该类的实例化对象后,系统才会为每个对象分配内存空间,存储各自的数据。


  有时候,开发人员会希望某些特定的数据在内存中只有一份,而且能够被一个类的所有实例

化对象所共享。这时候就可以用static来修饰属性。此时被static修饰的属性属于类而不属于对象,

被所有对象共享


访问方式

1.类名

每new一个对象,系统就会分配内存,并且只能用来修饰成员变量,不能修饰局部变量

public class Student{
   public void study(){
      static int num=10;       //编译会报错
   }
}

二、用来修饰方法

如果在任何方法上应用 static 关键字,此方法称为静态方法。
静态方法属于类,而不属于类的对象。
可以直接调用静态方法,而无需创建类的实例。
静态方法可以访问静态数据成员,并可以更改静态数据成员的值。
class TestDemo{
    public int a;
    public static int count;
    
    public static void change() {
        count = 100;
        //a = 10; error 不可以访问非静态数据成员
   }
}
public class Main{
   
    public static void main(String[] args) {
        TestDemo.change();//无需创建实例对象 就可以调用
        System.out.println(TestDemo.count);   
   }
}

三、修饰代码块

什么是代码块

   
根据代码块定义的位置以及关键字,又可分为以下四种:
1.普通代码块
2.构造代码块
3.静态代码块
4.同步代码块(暂时还没学到)
1.普通代码块
普通代码块:定义在方法中的代码块
public class Main{ 
 public static void main(String[] args) { 
 { 
  //直接使用{}定义,普通方法块

    int x = 10 ; 
    System.out.println("x1 = " +x); 
 } 
    int x = 100 ; 
    System.out.println("x2 = " +x); 
 } 
} 

// 执行结果
x1 = 10 
x2 = 100

2.构造代码块 (实例代码块)

构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。

class Person{ 
    private String name;//实例成员变量
    private int age; 
    private String sex; 
 
 public Person() { 
    System.out.println("Person ()!"); 
 } 
 
      //实例代码块
 { 
    this.name = "tig"; 
    this.age = 12; 
    this.sex = "man"; 
    System.out.println(" instance ()!"); 
 } 
 
 public void show(){ 
    System.out.println("name: "+name+" age: "+age+" sex: "+sex); 
 } 
 
} 
public class Main { 
    public static void main(String[] args) { 
    Person p1 = new Person(); 
    p1.show(); 
 } 
} 
// 运行结果
instance ()! 
Person ()! 
name: tig age: 12 sex: man 
注意:实例代码块优先于构造函数执行
3.静态代码块
使用 static 定义的代码块。 一般用于初始化静态成员属性。

class Person{ 
 

   private String name;//实例成员变量
   private int age; 
   private String sex; 
   private static int count = 0;//静态成员变量 由类共享数据 方法区
 
 public Person(){ 
   System.out.println(" Person ()!"); 
 } 
 
 //实例代码块
 { 
   this.name = "tig"; 
   this.age = 12; 
   this.sex = "man"; 
   System.out.println(" instance ()"); 
 } 
 
 //静态代码块
 static { 
   count = 10;//只能访问静态数据成员 
   System.out.println(" static  ()"); 
 } 
 
 public void show(){ 
   System.out.println("name: "+name+" age: "+age+" sex: "+sex); 
 } 
 
} 
public class Main { 
  public static void main(String[] args) { 
  Person p1 = new Person(); 
  Person p2 = new Person();//
 } 
}

//结果
 static  ()
 instance ()
 Person ()!
 instance ()
 Person ()!

注意事项 

静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。
静态代码块执行完毕后 , 实例代码块(构造块)执行,再然后是构造函数执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值