关键字instanceof、final、static的特点总结

本文深入探讨了Java中的关键字instanceof、final和static的使用方法和特性。解释了instanceof用于类型检查,final用于定义常量、限制方法重写和防止类被继承,以及static如何实现类成员的共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、关键字instanceof

判断一个对象是不是属于某一个类型,返回值为boolean
1、即子类的对象属于父类的类型,但父类的对象不属于子类的类型。

public class Animal {
private final int AGE;
	public Animal() {
		AGE = 1;
	}
	public void eat() {
		System.out.println("吃肉");
	}

}

class Cat extends Animal {
	@Override
	public void eat() {
		System.out.println("吃鱼");
	}
}

class Dog extends Animal{
@Override
	public void eat() {
		System.out.println("吃骨头");
	}
}

public class Test {

	public static void main(String[] args) {
        Animal a = new Animal();
		// a动物属于猫类型
		boolean b = a instanceof Cat;
		System.out.println("b=" + b);//b=false

		Cat c = new Cat();
		// c猫动物属于动物类型
		boolean b2 = c instanceof Animal;
		System.out.println("b2=" + b2);//b2=true
		}
		}

2、父类的引用可以指向子类的对象,但子类的引用不能指向父类的对象,也不能指向继承为同一个父类的对象

	public static void main(String[] args) {
            Animal a = new Cat();//true
             Cat c=new Animal();//false
             Cat c1=new Dog();//false
		}

3、相互指向的对象,也就属于同一个类型。

public static void main(String[] args) {
            Animal a = new Cat();
        boolean b=a instanceof Animal;//true
        boolean b1=a instanceof Cat;//true
		}

4、相互转换的对象,也就属于同一个类型。
注意:要是属于一个类型的才能强转
转换分为:向上转换(又叫泛化)和向下转换

public static void main(String[] args) {
		Cat c = new Cat();
		// 隐式转换,又叫泛化,向上转型
		Animal a = c;
		boolean a1 = c instanceof Cat;
		boolean a2 = c instanceof Animal;
		boolean a3 = a instanceof Cat;
		boolean a4 = a instanceof Animal;
		System.out.println("泛化");
		System.out.println(a1 + " " + a2 + " " + a3 + " " + a4);//true true true true

       //向下转型
		Animal animal = new Animal();
		animal = new Cat();//向下转型需注意的是:首先需要指向该类型,不然会发出异常
		boolean b = animal instanceof Cat;
		System.out.println(b);
		
		System.out.println("向下转型");
		boolean cc = animal instanceof Cat;
		boolean ccc = animal instanceof Animal;
		System.out.println(cc + " " + ccc);
		
	}
	}

5、继承为同一个对象的两个不同的子类,不能相互转换,也不能相互指向 (参考第二条)

二、关键字final

1.final修饰的变量,叫常量
命名习惯,全部大写,单词切换用下划线
常量需要初始化,而且值不可更改
例:final int NUM=4;

2.final修饰的方法不能被override
override作用:否定父类的,使用自己的

3.final修饰的类不能被继承
final修饰的类中的功能,只能自己来用
例如:String

三、static

1、概念:static修饰的属性和方法被该类的所有对象共享(仅此一份)
2、使用:使用类名直接调用
static修饰的代码中不包含this和super
非静态的可以直接调用静态的,反之不行
静态的可以直接调用静态的
3、普通的属性在对象创建才加载内存
静态的属性在类加载就立即加载内存
4、非静态修饰的依赖对象,所以,普通方法看着是对象方法,普通属性属于某个具体对象
static修饰的依赖于类,所以,静态的方法和属性使用类名直接调用

static修饰代码块
类加载的时候,只执行一次
优先级高于代码块
作用:类加载的时候,给类初始化
代码块
每new一次执行一次
作用:给类所有对象初始化
优先级高于构造方法
构造方法
每new一次执行一次
作用:给对象初始化
优先级高于普通方法

例:
class ClassA{ 
static { 
        System.out.println("In ClassA Static"); 
} 
public ClassA(){ 
   		System.out.println("ClassA()"); 
} 
} 

class ClassB{ 
static { 
		System.out.println("In ClassB Static"); 
} 
public ClassB(){ 
		System.out.println("ClassB()"); 
} 
} 

class ClassC extends ClassB{ 
static{ 
		System.out.println("In ClassC Static"); 
} 
public ClassC(){ 
		System.out.println("ClassC()"); 
} 
} 

class MyClass { 
		static ClassA ca = new ClassA(); 
		ClassC cc = new ClassC(); 
static{ 
		System.out.println("In Static MyClass"); 
} 
public MyClass(){ 
		System.out.println("MyClass()"); 
} 
} 

public class TestMain{ 
		public static void main(String args[]){ 
						MyClass mc1 = new MyClass(); 
						MyClass mc2 = new MyClass(); 
						System.out.println(mc1.cc == mc2.cc); 
						System.out.println(mc1.ca == mc2.ca); 
} 
}
结果:In ClassA Static
			ClassA()
			In Static MyClass
			In ClassB Static
			In ClassC Static
			ClassB()
			ClassC()
			MyClass()
			ClassB()
			ClassC()
			MyClass()
			true
			false
1. 用户与身体信息管理模块 用户信息管理: 注册登录:支持手机号 / 邮箱注册,密码加密存储,提供第方快捷登录(模拟) 个人资料:记录基本信息(姓名、年龄、性别、身高、体重、职业) 健康目标:用户设置目标(如 “减重 5kg”“增肌”“维持健康”)及期望周期 身体状态跟踪: 体重记录:定期录入体重数据,生成体重变化曲线(折线图) 身体指标:记录 BMI(自动计算)、体脂率(可选)、基础代谢率(根据身高体重估算) 健康状况:用户可填写特殊情况(如糖尿病、过敏食物、素食偏好),系统据此调整推荐 2. 膳食记录与食物数据库模块 食物数据库: 基础信息:包含常见食物(如米饭、鸡蛋、牛肉)的名称、类别(主食 / 肉类 / 蔬菜等)、每份重量 营养成分:记录每 100g 食物的热量(kcal)、蛋白质、脂肪、碳水化合物、维生素、矿物质含量 数据库维护:管理员可添加新食物、更新营养数据,支持按名称 / 类别检索 膳食记录功能: 快速记录:用户选择食物、输入食用量(克 / 份),系统自动计算摄入的营养成分 餐次分类:按早餐 / 午餐 / 晚餐 / 加餐分类记录,支持上传餐食照片(可选) 批量操作:提供常见套餐模板(如 “明治 + 牛奶”),一键添加到记录 历史记录:按日期查看过往膳食记录,支持编辑 / 删除错误记录 3. 营养分析模块 每日营养摄入分析: 核心指标计算:统计当日摄入的总热量、蛋白质 / 脂肪 / 碳水化合物占比(按每日推荐量对比) 微量营养素分析:检查维生素(如维生素 C、钙、铁)的摄入是否达标 平衡评估:生成 “营养平衡度” 评分(0-100 分),指出摄入过剩或不足的营养素 趋势分析: 周 / 月营养趋势:用折线图展示近 7 天 / 30 天的热量、大营养素摄入变化 对比分析:将实际摄入与推荐量对比(如 “蛋白质摄入仅达到推荐量的 70%”) 目标达成率:针对健
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值