java面向对象(二)构造函数和构造代码块

面向对象


类成员

1.成员变量

  • 属性
  • 数值类型的基本数据类型默认值是 0
  • 成员变量在任何方法中都能访问,和声明先后没有关系

2.成员函数

方法

3.定义方式

class 类名{成员变量;成员函数} //首字符大写,$_开头

局部变量

  • 定义在方法或者语句中,
  • 没有默认的初始化值,必须手动初始化

数组和函数在堆中

方法在栈中

class ClassDemo1{
	public static void main(String[] args){
	//创建对象,p指向Person的内存地址
	Person p = new Person();
	p.run();
	}
}
/**
*定义类
*/
class Person{
	//成员变量===属性(property)===字段(field)
	int height;//身高
	int weight;
	int age;
	public void run(){
		System.out.println("run...");
	}
}

匿名对象

1.new Person().run();
2.作为参数进行传递

class ClassDemo1{
	public static void main(String[] args){
	//匿名对象
	new Person().run();
	
	}
}
/**
*定义类
*/
class Person{
	//成员变量===属性(property)===字段(field)
	int height;//身高
	int weight;
	int age;
	public void run(){
		System.out.println("run...");
	}
}
  • 匿名对象是对象的简化形式

  • 匿名对象两种使用情况
    -- 当对对象方法仅进行一次调用的时候
    -- 匿名对象可以作为实际参数记性传递

构造函数

特点:

  1. 函数名名相同
  2. 不用定义返回值类型
  3. 没有具体的返回值

作用:给对象进行初始化

注意:

1. 默认构造函数的特点

2. 多个构造函数是以重载的形式存在的

对构造函数的几点解释:
1.函数名和类型相同
2.没有返回值
3.如果类没有定义构造函数,jvm分配一个空构造;如果类定义了构造函数,就没有空构造。
4.可以重载
5.创建对象时使用,如:new Car();

class ClassDemo1{
	public static void main(String[] args){
		
		Dog d2 = new Dog("white");
		System.out.println(d2.getColor());
	}	
}

class Dog{
	//成员属性
	private String color;
	private int age;
	
	//构造函数
	//空构造
	public Dog(){
		
	}
	//只有一个参数的构造函数
	public Dog(String c){
		color = c;
	}
	
	public void setColor(String c){
		color = c;
	}
	public String getColor(){
		return color;
	}
}

注意程序中构造函数传参的方式。

另外,构造函数可以有多个,只要参数不同就可以。下面给出三种不同的构造方式。

class ClassDemo1{
	public static void main(String[] args){
		//第一种构造函数创建对象的方式
		Dog d1 = new Dog();
		d1.setColor("black");
		d1.setAge(1);
		System.out.println(d1.getColor() + d1.getAge());
		
		//第二种构造函数创建对象的方式
		Dog d2 = new Dog("white");
		System.out.println(d2.getColor());
		
		//第三种构造函数创建对象的方式
		Dog d3 = new Dog("yellow",2);
		System.out.println(d3.getColor() + d3.getAge());
	}	
}

class Dog{
	//成员属性
	private String color;
	private int age;
	
	//构造函数
	//空构造
	public Dog(){
		
	}
	//只有一个参数的构造函数
	public Dog(String c){
		color = c;
	}
	
	//有两个参数的构造函数
	public Dog(String c,int a){
		color = c;
		age = a;
	}
	public void setAge(int a){
		age = a;
	}
	
	public int getAge(){
		return age;
	}
	
	public void setColor(String c){
		color = c;
	}
	public String getColor(){
		return color;
	}
}

构造代码块

1.创建对象的时候调用
2. 在构造函数之前

对象的创建过程:

  • 1.先运行构造代码块
    (从上到下,按序执行)
  • 2.运行构造函数
  • 3.成员变量
    --- 执行顺序:
    a.color = null;如果没有赋值
    b.color = "black";如果在类中赋了初值
    c.构造代码块
    d.构造函数

静态代码块 static{}

类加载期间执行,而且只执行一次,也是从上到下按序执行。

由此,我们可以总结一下这些 类成员

  • 成员变量
  • 成员函数
  • 构造函数
  • 构造代码块 { }
  • 静态代码块 static{}:在类加载期间执行,而且只执行一次。也是从上到下按序执行。
    -- 静态成员之间可以互相访问,按序执行。
    -- 静态成员不可以访问非静态成员,
    -- 可以访问静态成员,
    -- 静态成员通过类访问(和对象无关。比如:Dog.blood)
原文地址:https://www.cnblogs.com/zhqin/p/10008050.html