JAVA学习历程---面向对象三

1 static关键字
---->用来修饰属性 、方法 、 代码块 、 内部类
---->静态变量和实例变量
属性:静态属性和非静态属性
实例变量: 创建了类的多个对象,每个对象都拥有一套独立的非静态属性。
静态变量: 每个对象都共用一个静态变量,当某个对象调用时修改了,其他对象调用时就是修改过的版本
---->几点说明
静态变量随着类的加载而加载,要早于对象的创建,可以“类.属性”调用
由于类只加载一次,静态变量在内存中只有一份,存在于方法区的静态域中
---->静态方法
静态方法中,只能调用静态属性 和 静态方法 //和声明周期有关
静态方法中,不能使用this super
在这里插入图片描述

2 设计模式
----> 设计模式 实在大量的事件中总结和理论化的之后优选的代码结构、变成风格、
---->27种设计模式
---->单例设计模式:这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其 唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
尚硅谷 323
懒汉式:延迟对象创建 / 有线程安全问题
饿汉式:对象加载时间过长 线程是安全的

// 饿汉式
class Bank{
	//1 私有化构造器
	private Bank() {
 
	}
 
	//2 在内部创建类
	//4 要求此对象也声明为静态的
	private static Bank bank = new Bank();
	//3 提供公共的方法 返回类的对象
	//要是静态的
	public static Bank getBank() {
		return bank;
	}
}
 
//懒汉式
class Order{
	//1 私有化构造器
	private Order() {
 
	}
	//2 声明当前类的变量
	//4 此变量也要是static
	private static Order order = null;
	//3 声明public static的返回当前类对象的方法
	public static Order getOrder() {
		if(order == null) {
			order = new Order();
		}
		return order;
	}
}

3 main方法的理解
---->程序入口
---->main方法也是一个普通的静态方法
---->可以作为我们和控制台交互的方式 String[] args
对于字节码文件 进行 java 类名 “98” “89” “899”

4 代码块 block / 初始化块
---->作用:用来初始化类 / 对象
---->静态代码块
可以有输出语句
随着类的加载而执行
作用:初始化类的属性
只能调用静态结构
---->非静态代码块
可以有输出语句
随着对象的创建执行每创建一个对象就执行一次
作用:对属性进行初始化
---->多个静态代码块的执行顺序:按照声明的先后顺序
----> 代码块比构造器要先执行!!!!!!!!!!!!!!
---->尚硅谷 330 注意 : main方法在执行前也会加载类的信息,因此 静态代码块也会先执行
5 属性赋值 顺序
(1)默认初始化
(2)显示初始化
(3)构造器初始化
(4)有了对象后 对象.属性 对象.方法 赋值
(5)代码块
(1) - (2)(5)-(3) - (4)
注:2 和 5 要看 声明的顺序

6 final 关键字
修饰 类 / 方法 / 变量
不能被继承 / 不能被重写 / 常量
---->final修饰属性 只能显示初始化 / 或者代码块中初始化 / 构造器中初始化
---->final 修饰局部变量 / 形参
---->static final修饰属性(全局常量)

7 abstract
---->将父类设计的非常抽象 叫抽象类
---->可以修饰 类 / 方法
---->抽象类不能被实例化(
一定有构造器,便于子类的构造器
开发中都会提供抽象类的子类
---->抽象方法:没有方法体 abstract void eat();
子类中要实现
---->abstract不能用来修饰私有方法:子类要重写 抽象,子类又不能重写 私有
---->abstract不能修饰static方法: 原因同上 子父类的static 方法(同名同参数)不认为是重写
----> final 也不行(类 和 方法)

8 创建抽象类的匿名子类对象

public class AbstractTest {
	// Person是一个匿名类
	Person person = new Person() {        //创建了一个匿名子类的对象
		@Override
		public void show() {
			// TODO Auto-generated method stub
		}
		 
		@Override
		public void eat() {
		// TODO Auto-generated method stub
		}
	};
}
 
abstract class Person{
	public abstract void eat();
	public abstract void show();
}

9 interface 接口
继承是“是不是”的关系 接口是“能不能”的关系,是一种标准、规范
接口中的成员
JDK1.7之前 只能定义全局常量和抽象方法
public static final 书写时可以省略不写 这个常量 也是可以用 接口名.常量 调用
public abstract 可以省略
JDK1.7之后 除了全局常量和抽象方法之外,还能定义静态方法,默认方法(略)
---->接口中不能定义构造器(不能实例化),但是可以 定义变量 (多态性) 尚硅谷351
---->接口可以继承接口 而且可以多继承 interface AA extends BB, CC
----> 抽象类 和 接口的异同
---->接口的
---->笔试题
(1) 父类 和 接口中 都有x 虚拟机不知道执行那个
改成 super.x / A.x
在这里插入图片描述

(2)
interface中 是全局常量 public static final , 右边最后 不能再修改了
在这里插入图片描述

10 java8中接口的新特性
静态方法 public static void method(){方法体}
默认方法 public default void method(){方法体}
---->接口中 的静态方法 只能用接口名调,,其他类实现该接口,没有这个静态方法
---->和上面不同的是 一个类实现接口,可以通过该类的实例化对象 来调用接口的默认方法
---->实现类也可以重写默认方法
---->如果子类的父类中 和子类所实现的接口中 声明了 同名同参数的方法 ,那么子类在没有重写此方法的情况下,会调用父类中的方法(类优先原则) ,该原则 只针对方法,不针对变量

11 内部类
内部类的测试
1 java中允许将类A声明在类B中 A是内部类
2 分类:成员内部类(静态 / 非静态) VS 局部内部类(方法内 代码块内 构造器内)
3 成员内部类:
一方面,作为外部类的成员
>可以调用外部类的结构
>可以用statics修饰
>可以被4中权限修饰符修饰
另一方面,作为一个类,
>类内可以声明 属性 方法 构造器等
>可以用final修饰,不能被继承
>abstract修饰 不能被实例化
4 关注如下的三个问题
4.1 如何实例化
//创建EE的实例(静态成员变量)
Person.EE ee = new Person.EE();
//创建DD实例 (非静态)
Person person = new Person();
Person.DD dd = person.new DD();
4.2 如何在成员内部类中,区分调用的结构
以下一个内部类的方法
public void method(String name){
System.out.println(name); //形参
System.out.println(this.name); //外部类的属性
System.out.println(Person.this.name); //内部类的属性
4.3 开发中局部内部类的使用
尚硅谷 363
局部内部类 调用 他所在方法的局部变量时,这个方法必须是final的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值