黑马程序员——Java基础学习笔记(三)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

30. Person p = new Person(“nasuf”,22);

此句话(1)因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中(2)执行该类中的static代码块,如果有的话,给Person.class类进行初始化;(3)在堆内存中开辟空间,分配内存地址(4)在堆内存中建立对象的特有属性,并进行默认初始化(5)对属性进行显示初始化(6)对对象进行构造代码块初始化(7)对对象进行对应的构造函数初始化(8)将内存地址付给栈内存中的变量;

31. 单例设计模式:解决一个类在内存只存在一个对象。想要保证对象唯一,(1)为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象;(2)还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象;(3)为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式;

将这三步涌代码体现,即为:(1)将构造函数私有化(2)在类中创建一个本类对象(3)提供一个方法可以获取到该类对象;如:

class Single	//先初始化对象,称为:饿汉式
{
	private Single(){}
	private static Single s = new Single();
	public static Single getInstance()
	{
		return s;
}
}

class SingleDemo
{
	public static void main(String[] args)
	{
		Single s1 = Single.getInstance();
		Single s2 = Single.getInstance();	//s1与s2指向同一个对象
}
}

对于事物该怎么描述,还怎么描述,当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可;

单例设计模式还可写为:

class Single	//对象是方法被调用时才初始化,也叫做对象的延时加载;称为:懒汉式
{
	private static Single s = null;
	private Single(){};
	public static Single getInstance()
	{
		if(s==null)
			s=new Single();
		return s;
}
}

32. 子类要访问本类中的变量,用this;子类要访问父类中的同名变量,用super;

33. 子类覆盖父类,必须保证子类权限大于等于父类权限,否则编译失败;

34. 静态只能覆盖静态;

35. 重载:只看同名函数的参数列表;重写:子父类方法要完全一样(包括返回值类型);

36. 在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的语句super();   super()会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();

37. 子类之所以一定要访问父类的构造函数,是因为父类中的数据,子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的,所以在子类对象初始化时,要先访问一下父类中的构造方法;如果要访问父类中指定的构造方法,可以通过手动定义super语句的方式来指定;如:

class Person 
{
	private String name;
	Person(String name)
	{
		this.name = name;
}
void show();
}
class Student extends Person
{
	Student(String name)
	{
		super(name);
}
void method()
{
	super.show();
}
}

38. 子类的实例化过程:  super语句一定定义在子类构造方法中的第一行;如果子类构造方法第一行已经有了this();则就不能有super(); (因为this语句和super语句只能在第一行,初始化语句要先执行)所以,子类的所有的构造函数,默认都会访问父类中空参数的构造方法,因为子类每一个构造函数内的第一行都有一句隐式super();当父类中没有空参数的构造方法时,子类必须手动通过super或者this语句形式来指定要访问父类中的构造方法;当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造方法;子类中至少会有一个构造方法会访问父类中的构造函数;

39. final:(1)可以修饰类,函数,变量;(2)被final修饰的类不可以被继承;为了避免被继承,被子类复写功能;(3)被final修饰的方法不可以被复写;(4)被final修饰的变量是一个常量,只能被赋值一次,既可以修饰成员变量,又可以修饰局部变量;(5)内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量;

40. 抽象类特点:(1)抽象方法一定在抽象类中(2)抽象方法和抽象类都必须被abstract关键字所修饰;(3)抽象类不可以用new创建对象,因为调用抽象方法没意义;(4)抽象类中的抽象方法要被使用,必须由子类复写其所有的方法后,建立子类对象调用,如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类;

41. 抽象类中可以不定义抽象方法,这样做只是为了不让该类建立对象;

42. 模板方法设计模式:在定义功能时,功能的一部分是确定的,但有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成;

43. 接口定义时,格式特点:(1)接口中常见定义:常量,抽象方法;(2)接口中的成员都有固定修饰符,常量:public static final  方法:publicabstract    这些固定修饰符可以省略;

注意:接口中的成员都是public的;

44. 接口不可以被创建对象,因为有抽象方法,需要被子类实现;子类对接口中的抽象方法全部覆盖后,子类才可以实例化;否则子类是一个抽象类;

45. 类之间只支持单继承,类可以继承一个类的同时实现多个接口,而接口之间可以实现多继承,例如:

interface A
{
	void methodA();
}
interface B
{
	void methodB();
}
interface C extends B,A
{
	void methodC();
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值