学习日志01-构造函数 构造代码块 this关键字 static

2021/12/27 23:15:19

本文主要是介绍学习日志01-构造函数 构造代码块 this关键字 static,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 一.构造函数
  • 二.构造代码块
  • 三.this关键字
  • 四.static(静态、修饰符)


一.构造函数

构造函数的作用: 初始化对应的对象。

构造函数的格式

修饰符  函数名(形式参数){
	函数体
}

构造函数要注意的事项
1. 构造函数是没有返回值类型的。
2. 构造函数的函数名是必须与类名一致。
3. 构造函数不是由我们手动调用的,是我们在创建了对应的对象时,jvm会根据你创建的对象传递的参数调用
对应 的对象。
4. 如果一个类没有显示写上一个构造函数的时候,那么java编译器会为该类添加一个无参 的构造函数。
5. 如果一个类已经显示写上一个构造函数的时候,那么java编译器则不会再为该类添加一个无参 的构造函数。
6. 构造函数是可以以函数重载的形式存在多个。

构造函数与普通 函数的区别:
1. 返回值类型的区别:
1. 构造函数是没有返回值类型 的,
2. 普通函数是有返回值类型的,即使函数没有返回值,返回值类型也要写上void。
2. 函数名的区别:
1. 构造函数的函数名必须要与类名一致,
2. 普通函数的函数名只要符合标识符的命名规则即可。
3. 调用方式的区别:
1. 构造函数是 在创建对象的时候由jvm调用的。
2. 普通函数是由我们使用对象调用的,一个对象可以对象多次普通 的函数,
4. 作用上的区别:
1. 构造函数 的作用用于初始化一个对象。
2. 普通函数是用于描述一类事物的公共行为的。

//婴儿类
class Baby{
	
	int id; //身份证
	String  name;  //名字
	//带参构造函数
	public  Baby(int i , String n){
		id  = i;
		name = n;
		System.out.println("baby的属性初始化完毕!!");
	}
	//无参 的构造函数
	public Baby(){
		System.out.println("无参的构造函数被调用了..");
	}	
	//普通函数
	public void cry(){
		System.out.println(name+"哇哇哭...");
	}	
}

class Demo2 
{
	public static void main(String[] args) 
	{	
		//创建一个baby对象,调用带参构造函数
		Baby b1 = 	new Baby(110,"狗娃"); //婴儿诞生   白户
		System.out.println("编号:"+ b1.id +" 姓名:"+ b1.name);
		b1.cry();
		b1.cry();

		//黑户,调用无参的构造函数
		Baby b2 = new Baby();
		b2.id = 112;
		b2.name = "狗剩";
		System.out.println("编号:"+ b2.id +" 姓名:"+ b2.name);
	}
}

二.构造代码块

构造代码块的作用:给对象进行统一的初始化。

构造函数的作用: 给对应的对象进行初始化。

构造代码块的格式

{
	构造代码块
}

*注意: 构造代码块的大括号必须位于成员 位置上。
*
代码块的类别:
1. 构造代码块。
2. 局部代码块. 大括号位于方法之内。 作用:缩短局部 变量 的生命周期,节省一点点内存。
3. 静态代码块 static

构造 代码块要注意的事项:

  1. java编译器编译一个java源文件的时候,会把成员变量的声明语句提前至一个类的最前端。
  2. 成员变量的初始化工作其实都在在构造函数中执行的。
  3. 一旦经过java编译器编译后,那么构造代码块的代码块就会被移动构造函数中执行,是在构造函数之前执行的,构造函数的中代码是最后执行 的。
  4. 成员变量的显示初始化与构造代码块 的代码是按照当前代码的顺序执行的。
class Baby{
	
	int id; //身份证 
	String  name;  //名字	
	//构造代码块...
	{
		//System.out.println("构造代码块的代码执行了......");		
	}
	//带参构造函数
	public  Baby(int i , String n){
		id  = i;
		name = n;
	}	
	//无参构造方法
	public Baby(){
	}
	//普通函数
	public void cry(){
		System.out.println(name+"哇哇哭...");
	}	
}

class Demo4 
{
	public static void main(String[] args) 
	{
		Baby b1 = new Baby(110,"狗娃");  //  狗娃 狗剩 铁蛋
		System.out.println("编号:"+ b1.id + " 名字:"+b1.name);
	}
}

三.this关键字

this关键字代表了所属函数的调用者对象。

this关键字作用:
1. 如果存在同名成员变量与局部变量时,在方法内部默认是访问局部变量的数据,可以通过this关键字指定访问成员变量的数据。
2. 在一个构造函数中可以调用另外一个构造函数初始化对象。

this关键字调用其他的构造函数要注意的事项:
1. this关键字调用其他的构造函数时,this关键字必须要位于构造函数中 的第一个语句。
2. this关键字在构造函数中不能出现相互调用 的情况,因为是一个死循环。

this关键字要注意事项:
1. 存在同名的成员变量与局部变量时,在方法的内部访问的是局部变量(java 采取的是“就近原则”的机制访问的。)
2. 如果在一个方法中访问了一个变量,该变量只存在成员变量的情况下,那么java编译器会在该变量的 前面添加this关键字。

class Person{
		
	int id; //编号
	String name; //姓名  
	int age;  //年龄
	//构造函数
	public Person(int id,String name ,int age){
		this.id  = id;
		this.name = name;
		this.age = age;
	}
	//比较年龄的方法
	public void compareAge(Person p2){
		if(this.age>p2.age){
			System.out.println(this.name+"大!");
		}else if(this.age<p2.age){
			System.out.println(p2.name+"大!");
		}else{
			System.out.println("同龄");
		}
	}
}
class Demo8{
	public static void main(String[] args) 
	{
		Person p1 = new Person(110,"狗娃",17);
		Person p2 = new Person(119,"铁蛋",9);
		p1.compareAge(12);
	}
}

四.static(静态、修饰符)

static修饰成员变量时:static修饰成员变量时,那么该成员变量的数据就是一个共享的数据.

静态成员变量的访问方式:
方式一: 使用对象进行访问。 对象.属性名
方式二:可以使用类名进行访问。 类名.属性名
注意:
1.非静态成员变量不能类名直接访问,只能使用对象进行访问;
2.千万不要为了方便访问成员变量而使用static修饰,一定要是该数据是共享数据 时才使用static修饰。

class Student{

	String name;  //非静态成员变量	
	static	String  country  = "中国";	  //静态的成员变量
	public Student(String name){
		this.name = name;
	}
}
class Demo10 {
	public static void main(String[] args) 
	{
		Student s1 = new Student("狗娃");
		Student s2 = new Student("狗剩");	
		//System.out.println("国籍:"+ Student.country);
		System.out.println("名字:"+ s1.name);
		System.out.println("名字:"+ s2.name);
	}
}


这篇关于学习日志01-构造函数 构造代码块 this关键字 static的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程