Java学习笔记day09

三大修饰符

代码块

作用: 封装一段代码
语法:	
	{}
定义位置: 
	1.方法中
		注意: 此时不会影响代码的运行,定义相当于没定义
	2.类中,方法以外
		注意: 
			1.此时每次创建该类对象时,就会执行该代码块中的代码
			2.该代码块在构造函数前执行
			3.在对象的属性赋初始值之后

static

含义: 静态
可以修饰: 
	属性
		含义: 公共的(使用static修饰的属性属于该类的所有对象,如果其中一个对其进行修改,那么该类的所有对象的该属性都将被修改)
		使用方式: 
			对象名.属性名
			或
			类名.属性名
		注意: 
			static修饰的属性不管该类有多少个对象,该属性只有一个
	方法
		含义: 静态方法
		使用方式: 
			对象名.方法名(实参列表);
			或
			类名.方法名(实参列表);
		注意: 
			静态方法中不能直接使用非静态成员(没有使用static修饰的属性或方法)
			静态方法中不能使用this或super关键字
	代码块
		调用时机: JVM加载该类时调用
		由于一个类只会被加载一次,所以该代码块只会被执行一次
		语法: 
			static{
			
			}
	内部类(以后补充)

类加载

总结: 使用该类时
如: 
	使用类名调用静态属性或静态方法
	创建该类对象
	创建其子类对象
	获取类对象时

在静态下对象的创建过程

没有继承关系
	1.加载该类
	2.给静态属性赋初始值
	3.执行静态代码块中的代码
	4.在堆内存中开辟空间
	5.给非静态属性赋初始值
	6.执行代码块中的代码
	7.执行构造函数
	8.赋值给栈中的引用
	总结: 先静态,再非静态

final

含义: 最终的,不可修改的
可以修饰: 
	类
		语法: 
			访问权限修饰符 final class 类名{
			
			}
		特点: final修饰的类不能被别的类继承
	属性
		语法: 
			访问权限修饰符 final 数据类型 属性名 = 值;
		特点: 
			final修饰的属性必须在声明时赋值
			值不能被修改
	方法
		语法: 
			访问权限修饰符 final 返回值类型 方法名(形参列表){
			
			}
		特点: 
			final修饰的方法不能被重写
	局部变量
		语法: 
			final 数据类型 变量名;
		注意: 
			final修饰的局部变量只能赋值一次
名称: 
	公共静态常量: 使用public static final修饰的属性
	公共静态方法: 使用public static修饰的方法

常量

概念: 不能被修改的变量或值称为常量

abstract

含义: 抽象的
可以修饰: 
	类
		特点: 不能直接创建对象
		语法: 
			访问权限修饰符 abstract class 类名{
				属性
				方法
				构造函数
				代码块
				静态代码块
			}
	方法: 
		特点: 没有方法体
		语法: 
			访问权限修饰符 abstratc 返回值类型 方法名(形参列表);
		注意: 
			有抽象方法的类一定是抽象类
			抽象类中不一定有抽象方法
			子类继承于抽象类,要么重写父类所有抽象方法,要么自己也是抽象类
			
abstract能否与static一起使用
	不能一起使用
abstract能否与final一起使用
	不能一起使用
static能否与final一起使用
	可以一起修饰属性,方法

案例

宠物医生给宠物治病,宠物有猫,狗,鱼

宠物医生: 小李
宠物: 
	旺财,黄,公(狗)
	富贵,白,公(狗)
	布丁,白,母(猫)
	金龙,黄,雌(鱼)
	
小李给以上宠物治病,病好后,狗叫汪汪汪,猫叫喵喵喵,鱼叫咕噜噜

对象: 
	小李 旺财 富贵 布丁 金龙
类: 
	医生类
		属性: 名称
		方法: 看病(动物的对象){
			sout(name + "给" + 动物对象.getName() + "看病");
			动物对象.叫();
		}
	动物类
		属性: 名称,性别,颜色
		构造函数
		方法: 
			get与set
			叫: 因为无法具体描述,所以是一个抽象方法
		因为动物类中有抽象方法,所以动物类也是抽象类
		
	狗类
		继承于动物类
		必须重写父类中叫的方法
	猫类
		继承于动物类
		必须重写父类中叫的方法
	鱼类
		继承于动物类
		必须重写父类中叫的方法
	环境类(测试类)
		main
			创建对象
			建立关系
package demo01;
//动物类
public abstract class Animal {
	private String name;
	private String sex;
	private String color;
	
	public Animal() {

	}
	
	public Animal(String name, String sex, String color) {
		this.name = name;
		this.sex = sex;
		this.color = color;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}
	
	public abstract void call();
}

package demo01;
//狗类
public class Dog extends Animal{
	
	public Dog() {
		super();
	}
	
	public Dog(String name, String sex, String color) {
		super(name, sex, color);
	}
	
	public void call() {
		System.out.println(getName() + "汪汪汪");
	}
}

package demo01;
//猫类
public class Cat extends Animal{
	
	public Cat() {
		super();
	}
	
	public Cat(String name, String sex, String color) {
		super(name, sex, color);
	}
	
	public void call() {
		System.out.println(getName() + "喵喵喵");
	}
}

package demo01;
//鱼类
public class Fish extends Animal{
	
	public Fish() {
		super();
	}

	public Fish(String name, String sex, String color) {
		super(name, sex, color);
	}

	public void call() {
		System.out.println(getName() + "咕噜噜");
	}
}

package demo01;
//医生类
public class Doctor {
	private String name;
	
	public Doctor() {
		
	}
	
	public Doctor(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void treat(Animal a) {
		System.out.print(name + "给" + a.getName() + "看病, ");
		a.call();
	}
}

package demo01;
//测试类
public class Test {
	public static void main(String[] args) {
		Doctor doctor = new Doctor("小李");
		Dog dog1 = new Dog("旺财", "公", "黄");
		Dog dog2 = new Dog("富贵", "公", "白");
		Cat cat = new Cat("布丁", "母", "白");
		Fish fish = new Fish("金龙", "雌", "黄");
		
		doctor.treat(dog1);
		doctor.treat(dog2);
		doctor.treat(cat);
		doctor.treat(fish);
	}
}

运行结果

案例

记录一个类的对象创建次数
分析: 
	可以在代码块中统计对象的创建次数
package demo02;

public class Test {
	public static void main(String[] args) {
		System.out.println("创建对象前, 创建次数为: " + A.count);		
		new A();
		System.out.println("创建1次, 创建次数为: " + A.count);		
		new A();
		new A();
		new A();
		System.out.println("创建4次, 创建次数为: " + A.count);
	}
}

class A {
	
	{
		count++;
	}
	
	public static int count;
	
	public A() {
		
	}
}

运行结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值