Java06-面向对象2相关笔记

1 构造方法

1.1 概念

构造方法是一种特殊的方法,它是一个与类同名访问修改符和类的访问修改符相同的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的创建或者对象的初始化。当类实例化一个对象时会自动调用构造方法
构造方法和其他方法一样也可以重载

1.2 形式和功能

可以无参也可以有参: 修饰符 类名(【参数】){ 代码…}

1.2.1 构造方法创建对象

  • 无参构造创建对象
  • 含参构造创建对象
public class P {
	String name;
	//当存在一个含参的构造方法时,无参构造将不再自动生成...    
	public P(){}
	//含参构造
	public P(String n){
		name=n;
	}
	void eat(){
		System.out.println("Test2_构造方法.eat()");
	}
}

class T{
	public static void main(String[] args) {
		//无构造方法时系统会自动提供一个无参的构造方法
		P t2 = new P();//无参构造创建对象
		t2.eat();        
		//t是引用变量,引用的是对象的地址值。
		//根据地址值找到对象,并获取对象的数据
		P t = new P("张三");//含参构造创建对象
		System.out.println(t.name);
	}
}

1.2.2 构造方法赋值

public class P{
		String name;
  		int age;      
       //赋值方式1:通过含参构造方法赋值
       public P(String name,int age){
              this.name=name;
              this.age=age;
       }
      
       //赋值方式2:通过setXxx()方法赋值
       public void setName(String name){
              this.name=name;
       }
       public void setAge(int age){
              this.age=age;
       }
}

2 构造代码块和局部代码块

2.1 构造代码块

1、 在类的内部,方法外部的代码块。
2、 通常用于抽取构造方法中的共性代码。
3、 每次调用构造方法前都会调用构造代码块
4、 优先于构造方法加载

class c{
       String country;
       {
             country="中国";
       }
       public c() {
              System.out.println("1号选手,来自"+country);
       }
       public c(int a) {
             System.out.println("2号选手,也来自"+country);
       }
}

2.2 局部代码块

1、 在方法里面的代码块
2、 通常用于控制变量的作用范围,出了括号就失效
3、 变量的范围越小越好,成员变量会有线程安全问题
4、 总结:执行顺序:
构造代码块是最优先的,局部代码块顺序执行

class Student{
       {
              System.out.println("构造代码块1");
       }
      
       public void init(){
              {
                     System.out.println("局部代码块");
              }
       }      
       {
              System.out.println("构造代码块2");
       }
}

2.3 静态代码块

随着类的加载而加载,并且只被加载一次,一般用于项目的初始化

static{...}

2.3 静态代码块、构造代码块、局部代码块区别

1、 静态代码块:在类加载时就加载,并且只被加载一次,一般用于项目的初始化
2、 构造代码块:在调用构造方法前会自动调用,每次创建对象都会被调用
3、 局部代码块:方法里的代码块,方法被调用时才会执行
4、 静态代码块:static{ },位置:在类里方法外
5、 执行顺序:静态代码块 - 构造代码块 - 构造方法 - 局部代码块

3 this关键字

3.1 概念

this代表本类对象的一个引用对象
构造函数中,this()必须放在第一行

3.2 当变量名相同时

当局部变量和成员变量同名时,用于区分。

public class P{
		String name;
       	//当局部变量和成员变量同名时
		public void run(String name){
			//name=name;//变量的就近使用原则,这样用的都是最近的也就是一直在用局部变量的
        	this.name=name;//this调用成员变量
       }
    }

3.3 构造方法间的调用

class Animal{
       public Animal(){
              this("来福");//调用本类中的含参构造
              System.out.println(name);
       }  
         
       public Animal(String name){
              System.out.println(name);
       }
}

3.4 this和super的区别

1、 this代表本类对象的引用,super代表父类对象的引用。
2、 this用于区分局部变量和成员变量
3、 super用于区分本类变量和父类变量
4、 this.成员变量 this.成员方法() this(【参数】)代表调用本类内容
5、 super.成员变量 super.成员方法() super(【参数】),代表调用父类内容
6、 this和super不可以同时出现在同一个构造方法里,他们两个只要出现在构造方法里都得放在第一行

4 重写与重载的区别(Overload和Override的区别)

1、重载:是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同
2、重写:是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表相同的返回类型
3、重写是父类与子类之间多态性的一种表现
4、重载是一类中多态性的一种表现

5 static关键字

5.1 概念

1、 是java中的一个关键字
2、 用于修饰成员(成员变量和成员方法

5.2 特点

1、 可以修饰成员变量,成员方法
2、 随着类的加载而加载,优先于对象加载
3、 只加载一次,就会一直存在,不再开辟新空间
4、 全局唯一,全局共享
5、 可以直接被类名调用
6、 静态只能调用静态,非静态可以随意调用
7、 static不能和this或者super共用,因为有static时可能还没有对象

5.3 静态调用关系

静态只能调用静态(变量或者方法),非静态可以访问所有的不管是不是静态

6 final关键字

6.1 概念

1、 是java提供的一个关键字
2、 final是最终的意思
3、 final可以修饰类,方法,成员变量

6.2 特点

1、 被final修饰的不能被继承
2、 被final修饰的方法不能被重写
3、 被final修饰的变量是个常量,值不能被更改
4、 常量的定义形式: final 数据类型 常量名 = 值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值