0423_宋红康笔记(day14)

  1. 面向对象的三条主线
     类和类的成员(属性、方法、构造器、代码块、内部类)
     封装性(四个关键字)和多态
     其他关键字及其使用(static、final、abstract、interface)

  2. Static
    与final的区别:final属性在一个对象里只能调一次,static整体上就只能调一次
     修饰属性:静态变量随着类的加载而加载(因为成员变量是通过构造方法创建的,而构造方法在类后创建,所以静态变量在成员变量前创建),可以通过类.静态变量的方式进行调用。由于类只加载一次,静态变量也只存在一份,存储在方法区的静态域中。

    静态变量 实例变量
    类(调) Yes No
    对象(调) Yes Yes

(实例变量随着对象的创建而加载,消亡而消亡;静态结构随着类的加载而加载,消亡而消亡。晚出生的可以调早出生的,反之不行。)

 修饰方法:静态方法中,只能调用静态的方法或属性
非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
有了静态方法,调方法的时候就可以不通过对象,而直接method(形参)了
static注意点:

  • 1 在静态的方法内,不能使用this关键字、super关键字(这都是基于当前对象做指代的关键字,static方法没有对象)
  • 2 关于静态属性和静态方法的使用,大家都从生命周期的角度去理解。

Static不能修饰构造器,因为
-------口-------
口是构造器
口左边是随着类以及类加载而加载的东西
口右边是对象以及随着对象加载而加载的东西
构造器的加载处于这两类事物之间 用来区分它们

静态方法	非静态方法

类 Yes No
对象 Yes Yes

 单例模式
 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对 某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构 造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生 类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无 法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象, 静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象 的变量也必须定义成静态的。
 对对象声明Static、private的原因等(宋红康323.15)
 饿汉懒汉区别
public class SingletonTest1 {
public static void main(String[] args) {
// Bank bank1 = new Bank();
// Bank bank2 = new Bank();

	Bank bank1 = Bank.getInstance();
	Bank bank2 = Bank.getInstance();
	
	System.out.println(bank1 == bank2);
}

}

//饿汉式
class Bank{

//1.私有化类的构造器
private Bank(){
	
}

//2.内部创建类的对象
//4.要求此对象也必须声明为静态的(因为静态方法只能调用静态结构)
private static Bank instance = new Bank();

//3.提供公共的静态的方法,返回类的对象
public static Bank getInstance(){
	return instance;
}

}

  1. 类的成员之四:代码块(或初始化块)

 代码块的作用:用来初始化类、对象
 代码块如果有修饰的话,只能使用static.
 分类:静态代码块 vs 非静态代码块
*
*静态代码块

  • >内部可以有输出语句
    
  • >随着类的加载而执行,而且只执行一次
    
  • >作用:初始化类的信息
    
  • >如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
    
  • >静态代码块的执行要优先于非静态代码块的执行
    
  • >静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构
    

非静态代码块

  •  >内部可以有输出语句
    
  •  >随着对象的创建而执行
    
  •  >每创建一个对象,就执行一次非静态代码块
    
  •  >作用:可以在创建对象时,对对象的属性等进行初始化
    
  •  >如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
    
  •  >非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法
    

 对属性可以赋值的位置:

  • ①默认初始化
  • ②显式初始化/⑤在代码块中赋值
  • ③构造器中初始化
  • ④有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值
  • 执行的先后顺序:① - ② / ⑤ - ③ - ④
  1. Final
     final可以用来修饰的结构:类、方法、变量

 final 用来修饰一个类:此类不能被其他类所继承。

  •      比如:String类、System类、StringBuffer类
    

 final 用来修饰方法:表明此方法不可以被重写

  •  	比如:Object类中getClass();
    

 final 用来修饰变量:此时的"变量"就称为是一个常量

  •  final修饰属性:可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化(但是在方法里调用的时候应该是已经被初始化了的状态了,所以不能在方法里进行初始化)
    
  •  final修饰局部变量:
    
  •       尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,==就只能在方法体内使用此形参,但不能进行重新赋值。==
    
  • static final 用来修饰属性:全局(s)常量(f)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值