static interface 和生活案例

static interface 和生活案例

1. static
1.1 static 修饰静态代码快
1.1.1 代码块问题
什么是代码块
	{} 只有大括号,里面的内容就是代码块内容


1. 构造代码块
    定义在类内
2. 局部代码块
    定义在方法内


//构造代码块案例
public class Person {
	 private int id;
	 private  String name;
	 private int age;
		 /*
		  * 这就是构造代码块
		  * 构造代码块在成员变量之后,构造方法之前
		  * 
		  * 通过代码运行可以的看到
		  * 	1. 构造代码块在调用执行构造方法时一定执行
		  * 	2. 构造代码块在调用执行构造方法时,首先执行
		  * 
		  * 
		  * 构造代码块内容会在 Java 编译器编译,直接给所有当前类的构造方法提供
		  * 并且在所有构造方法的【第一行 first statement】
		  * 
		  * 可以将构造方法相同功能模块,使用构造代码块封装/归纳/总结
		  *  并且可以提供所有的构造方法使用
		  * */
	 {
		 System.out.println("构造代码块执行");
	 }
	 public Person(int id) {
		 this.id = id;
		 System.out.println("构造方法");
	 }
	 public Person(int id, String name) {
		 this.id = id;
		 this.name = name;
		 System.out.println("构造方法");
	 }
	 public Person(int id, String name, int age) {
		 this.id = id;
		 this.name = name;
		 this.age = age;
		 System.out.println("构造方法");
	 }
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	 
}

public class Demo2 {
	public static void main(String[] args) {
		int num = 10;
		
		/*
		 *局部代码块,可以优化变量占用的时间,
		 *提升代码内存效率,降低内存占用 
		 * */
		{
			int num2 = 20;
		}
		System.out.println(num);
		//System.out.println(num2);
	}
}

1.1.2 static 修饰静态代码块特征
//静态代码块要求在 class 大括号以内
static {

}

package com.qf.edu;

class SingleDog {
	
	public int num = 10;
	public static String test = "ssss";
	
	/*
	 * 静态代码块
	 * 		在类文件加载阶段执行,有且只执行一次,因为 Java 中所有类型都是在
	 * 		执行之前加载一次,不会重新加载
	 * 
	 * */
	static {
		/*
		 * static 修饰的静态代码块可以认为是一个静态区域,无法直接使用类内的非静态成员变量,因为【没有对象】
		 * */
		//System.out.println(num);
		/*
		 * 
		 * static 修饰的静态代码块,可以直接使用类内的静态成员变量,因为【没有对象,难兄难弟,互不嫌弃】
		 * */
		System.out.println(test);
		/*
		 * static 修饰的静态代码块,可以直接使用类内的静态成员变量,因为【没有对象,难兄难弟,互不嫌弃】
		 * */
		testStaticMethod();
		/*
		 *  static 修饰的静态代码块可以认为是一个静态区域,无法直接使用类内的非静态成员变量,因为【没有对象】
		 * */
		//test();
		System.out.println("静态代码块");
	}
	public void test() {
		System.out.println("非静态成员方法");
	}
	public static void testStaticMethod() {
		System.out.println("静态成员方法");
	}
}


public class Demo3 {
	public static void main(String[] args) {
		System.out.println("测试");
		
		SingleDog singleDog = new SingleDog();
		SingleDog singleDog1 = new SingleDog();
		SingleDog singleDog2 = new SingleDog();
		SingleDog singleDog3 = new SingleDog();
		
	}
}
1.1.3 静态代码块特征
1. static 修饰静态代码块,在程序加载阶段一定执行,有且只执行一次
2. static 修饰静态代码块,不能直接使用类内的非静态成员变量/方法,因为【没有对象】
3. static 修饰静态代码块,可以直接使用类内的静态成员变量/方法,因为【没有对象】
4. static 修饰静态代码块,用于项目启动过程中的初始化操作
	可以利用 static 代码加载尖端执行的特征,将一些项目执行所需的配置操作前置
	用于 读取配置文件,加载相关驱动,加载第三方资源。。。。。。
1.2 static 面试题
class Demo {
    public static Demo d1 = new Demo();
    public static Demo d2 = new Demo();
   
    static {
        System.out.println("静态代码块");
    }
    {
        System.out.println("构造代码块");
    }
    public Demo() {
        System.out.println("构造方法");
    }
    public static void main(String[] args) {
        Demo d = new Demo();
    }
    
}
/*
以上代码执行流程:


*/
  1. interface 接口
    2.1 生活中的接口
    生活中的接口
    		USB 网线接口RJ45 Type-C Ligthing USB-C HDMI VGA PCI-E
    		minidp  SATA  3.5MM mircoUSB 电源(国标/英标/美标)
    接口有什么用?
    	USB-B 
    		连接鼠标/键盘/声卡/麦克风/耳机/充电/传输数据/U盘/移动硬盘
    	USB
    		1.指定的尺寸规范,并且不可修改
    			宽度、高度、长度、引脚规范、电压、电流
    		2. 规范了连接标准版,但是最终设备的功能由设备本身决定。
    			例如鼠标连接 USB控制光标
    				键盘谅解 USB 输入设备
    				声卡连接 USB 声音控制
    	USB 是一个接口,是用来连接USB 设备,从而增强拓展当前 PC/电脑/笔记本!
    
    2.2 Java 中定义接口的格式

    当前阶段要求掌握接口的基本语法,格式规范,和使用要求

    后期学习具体案例,特殊用法,架构设计

    关键字:
    	interface
    格式:
    	interface 接口名 {
    		成员变量
    		成员方法
    	}
    	1. 接口是一个特殊的类,也是一个数据类型
    	2. 接口名要求符合命名规则,见明知意,大驼峰命名法
    	3. 接口类型变量也是一个引用数据类型变量
    
    interface A {
    	//成员变量
    	
    	/*
    	 * The blank final field num may not have been initialized
    	 * final 修饰的 num 可能尚未初始化
    	 * 
    	 * final 从何而来 斜体因为何事??
    	 * 
    	 * 接口中成员变量【缺省属性、默认属性】 public static final
    	 * public 表述数据公开,任何位置都可以使用
    	 * 
    	 * static 静态修饰,独一份 == > USB 相关数据独一份 ,大家都需要遵守
    	 * final 最终修饰、不可以修改修饰 ,常量 == > USB 接口数据不可以修改
    	 * 【带有名称的常量】 ==> 下划线命名法处理,所有字母全部大写,不同英文单词之间使用——下划线分割
    	 * */
    	int NUM = 10;
    	/*
    	 * Abstract methods do not specify a body
    	 * abstract 修饰的方法没有方法体
    	 * 接口中的成员方法【缺省、默认属性】public abstract
    	 * 
    	 * 		public 表示方法公开,标志公开 ==> USB 接口需要公开连接规则,连接方式、连接要求
    	 * 		abstract 修饰没有方法体 ==> USB 接口仅定制方法要求,具体实现看对应设备,USB ==> 鼠标,键盘....
    	 * 					USB 接口具体做什么,不是USB接口本身决定,是由USB 接口连接的设备决定
    	 * */
    	void test();
    }
    
    
    2.3 遵从接口
    类遵从接口
    关键字:
    	implements
    格式
    	class 类名 implements 接口名 {
    	
    	}
    
    /*
     * 
     * 一个非 abstract 修饰类【遵从】接口,要求实现接口中所有缺省属性为
     * public abstract 修饰方法
     * 
     * */
    class TypeA implements A {
    
    	@Override
    	public void test() {
    		// TODO Auto-generated method stub
    		System.out.println("TypeA 类遵从接口 A 实现test 方法");
    	}
    	
    }
    
    2.4 接口的特殊用法
    2.4.1 类可以遵从多个接口
    interface B {
    	void testB();
    	void test();
    }
    
    interface C {
    	void testC();
    	void test();
    }
    /*
     * TypeB 类可以同时遵从两个接口,分别是 interface B 和 interface C
     * 不同的接口直接使用, + 空格隔开
     * 
     * 语法要求:
     * 		1.遵从多个接口的类,要求分别实现各个接口中的方法要求
     * 		2.如果出现多个接口中存在完全相同的方法声明,实现类中有且只实现一个方法即可。
     * 
     * */
    class TypeB implements B, C {
    
    	@Override
    	public void testC() {
    		// TODO Auto-generated method stub
    		System.out.println("Type 类遵从接口C testC方法");
    	}
    
    	@Override
    	public void testB() {
    		// TODO Auto-generated method stub
    		System.out.println("Type 类遵从接口B testB方法");
    	}
    
    	@Override
    	public void test() {
    		// TODO Auto-generated method stub
    		System.out.println("TypeB 遵从接口B 和接口 C 实现的两个接口中同规则方法");
    	}
    	
    }
    public class Demo2 {
    	public static void main(String[] args) {
    		TypeB typeB = new TypeB();
    		
    		typeB.testB();
    		typeB.testC();
    		typeB.test();
    	}
    }
    
    2.4.2 类可以继承父类且遵从接口
    class SuperClass {
    	public void testA() {
    		System.out.println("父类成员方法");
    	}
    }
    interface D {
    	void testD();
    }
    class TypeC extends SuperClass implements D {
    
    	
    	
    	/*
    	 * 
    	 * 紫色空心箭头 ---> 实现接口中的方法
    	 * 
    	 * */
    	@Override
    	public void testD() {
    		// TODO Auto-generated method stub
    		System.out.println("TypeC 遵从接口D 实现的testD 方法");
    	}
    	
    	
    	/*
    	 * 
    	 * 绿色是实心箭头 ---> 重写父类继承到子类的方法
    	 * */
    	@Override
    	public void testA() {
    		System.out.println("子类重写父类方法");
    	}
    }
    
    public class Demo3 {
    	public static void main(String[] args) {
    		TypeC typeC = new TypeC();
    		
    		typeC.testA();
    		typeC.testD();
    	}
    }
    
    
    2.4.3 接口可以继承其它接口,并且可以多继承
    
    interface USB1_0 {
    	void usb1_0Counnect();
    }
    interface USB2_0 {
    	void usb2_0Counnect();
    }
    /*
     * 
     * 接口可以继承其它接口,同时允许多继承
     * */
    interface USB3_0 extends USB1_0, USB2_0{
    	void usb3_0Counect();
    }
    /*
     * 
     * 类遵从接口,要求实现接口中所有的缺省属性/默认属性 public abstract 修饰方法
     * 包括当前接口父接口要求的方法
     * 
     * */
    
    class TypeD implements USB3_0 {
    
    	@Override
    	public void usb1_0Counnect() {
    		// TODO Auto-generated method stub
    		System.out.println("USB 1.0 协议规定方法");
    	}
    
    	@Override
    	public void usb2_0Counnect() {
    		// TODO Auto-generated method stub
    		System.out.println("USB 2.0 协议规定方法");
    	}
    
    	@Override
    	public void usb3_0Counect() {
    		// TODO Auto-generated method stub
    		System.out.println("USB 3.0 协议规定方法");
    	}
    	
    }
    
    
    public class Demo4 {
    	public static void main(String[] args) {
    		TypeD typeD = new TypeD();
    		
    		typeD.usb1_0Counnect();
    		typeD.usb2_0Counnect();
    		typeD.usb3_0Counect();
    		
    	}
    }
    
    
    2.4.4 JDK 1.8以上版本特征

    允许在接口中使用 default 关键字修饰方法,修饰的方法为默认方法允许有方法体

    interface E {
    	void test();
    	default void testDefaultMethod() {
    		System.out.println("JDK 1.8以上版本允许默认方法 default 修饰");
    	}
    }
    class TypeE implements E {
    
    	@Override
    	public void test() {
    		// TODO Auto-generated method stub
    		System.out.println("TypeD 类有且只需要完成即可 E 中的缺省属性 public abstract 对应方法");
    	}
    	/*
    	 * 重写接口中的 default 关键字修饰的方法
    	 * */
    	@Override
    	public void testDefaultMethod() {
    		System.out.println("重写接口中 default 关键字修饰的默认成员方法");
    	}
    
    }
    
    public class Demo5 {
    	public static void main(String[] args) {
    		TypeE typeE = new TypeE();
    		typeE.test();
    		typeE.testDefaultMethod();
    	}
    }
    
    
    2.4.5 接口语法细节
    接口中是否可以用 static 修饰的静态成员方法?
    		可以
    	static 修饰的方法直接通过该接口名调用
    一个方法是否可以同时使用 abstract 和 static 关键字修饰?
    	abstract 关键字修饰的方法没方法体
    	static 修的方法是在类加载阶段已经准备就绪,已具备执行能力,必须明确所有和执行相关的内容,权限修饰符,返回值类型,方法名,形式参数列表和方法体
    	【static 修饰方法必须有方法体】
    	【abstract 修饰的方法必须没有方法体】
    	两者无法合作
    

    3. 生活案例

    3.1 动物园
    动物 ==> 动物类
    
    猴子 ==> 猴子类  ==> 动物类子类
    老虎 ==> 老虎类 ==> 动物类子类
    狮子 ==> 狮子类 ==> 动物类子类
    
    
    饲养员需要去喂动物吃饭 ===> 吃饭
    	该方法所属参数类型:
    		动物类型
    		
    饲养员今天去喂动物,不管是老虎,狮子还是猴子都算是动物
    
    3.2 USB 接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值