java面对对象高级

ops/2024/9/25 15:11:18/

1.类变量和类方法

1.1static变量
(1)类变量:
也叫静态变量/静态属性,所有对象共享并且所有对象访问的值是相同的

static变量是同一个类所有对象共享的
static类变量,在类加载的时候就生成了

(2)定义语法:
一种:访问修饰符 static 数据类型 变量名;
static 访问修饰符 数据类型 变量名;

(3)访问方式:
类名.类变量名(推荐)
(4)使用细节
加上static称为类变量/静态变量,否则称为实例变量/普通变量/非静态变量;
它们的区别在于类变量是该类所有对象共享的,而实例变量是所有对象都可以共享的。
1.2 类方法
(1)也叫静态方法;

(2)定义语法:
一种:访问修饰符 static 数据类型 方法名(){};(推荐!)
另一种:stati c 访问修饰符 数据类型 方法名(){};
(3)访问方式:
类名.类变量名(推荐)
(4)特殊细节:

当方法不涉及任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率;例如Math类,Arrays类等,可以直接用类名去调用类的静态方法;

(5)使用细节:

类方法中不能使用this,super等和对象有关的关键字/参数;
类方法/静态方法只能访问静态类和静态方法;
普通方法既可以访问静态,也可以访问普通的 ;

2.main()方法

javapublicstatic_33">1.1main()方法由java虚拟机调用,所以要public并且要static;

2.2由于main()属于静态方法,所以它满足上述类变量和类方法的所有规则

3.代码块

3.1代码块的定义

3.2代码块的应用

在这里插入图片描述
(1)不管调用哪个构造器,创建对象时,都会先调用代码块的内容,再生成 构造器;即代码块调用的顺序优先于构造器 !

3.3代码块注意事项

(1) Static静态代码块在这里插入图片描述

那么类什么时候被加载?(这个重要,要背下来)在这里插入图片描述

注:
DD dd=new DD();
DD dd1=new DD();
这种连续生成实例的情况下,类只会 被加载一次,因此static代码块也只会被执行一次;

(2)普通代码块
在这里插入图片描述
(3)在创建一个对象时,在一个类中的调用顺序如下:在这里插入图片描述
(4)为什么构造器在生成对象时最后才调用
在这里插入图片描述
在调用构造器时,会先调用一个super()方法,去找到父类的构造器,初始化完父类构造器后,还要再调用普通代码块;

(5) 创建一个子类时,静态属性、代码块;普通属性、代码块;构造方法的调用顺序为:
注意:不须考虑静态方法,因为静态方法只有在对象或类调用时才会执行
在这里插入图片描述
(6)静态代码块只能直接调用静态成员(静态属性和静态方法),普通代码块可以调用任意成员;

4.单例设计模式

4.1 饿汉式

java">public class singleCase01 {public static void main(String[] args) {GirlFriend fd=GirlFriend.getFriend();System.out.println(fd);}
}class GirlFriend{private String name;//饿汉式//1.将构造器私有化//2.在类的内部直接创建//3.提供一个公共的static方法,返回friend对象private static GirlFriend friend = new GirlFriend("小红");private GirlFriend(String name) {this.name = name;}public static GirlFriend getFriend() {return friend;}@Overridepublic String toString() {return "GirlFriend{" +"name='" + name + '\'' +'}';}
}

4.2 懒汉式

java">public class singleCase02 {public static void main(String[] args) {GirlFriend2 fd=GirlFriend2.getFriend();System.out.println(fd);}
}class GirlFriend2{private String name;private static GirlFriend2 friend;public GirlFriend2(String name) {this.name = name;}public static GirlFriend2 getFriend() {if (friend == null) {friend=new GirlFriend2("小红");}return friend;}@Overridepublic String toString() {return "GirlFriend2{" +"name='" + name + '\'' +'}';}
}

java_final_130">5.java_final的基本使用

5.1基本情形

在这里插入图片描述

5.2 使用细节

(1)final变量在定义时必须赋值,赋值位置可以在定义语句、在构造器或者在代码块中;
(2)但如果final修饰的属性为静态属性,则只能在定义语句和静态代码块两处赋值;
在这里插入图片描述
感觉一般把final放在了访问修饰符的后面叭;

在这里插入图片描述

(3)final int x; ————final关键字不能被修改

6.抽象类

6.1 定义

在这里插入图片描述
在这里插入图片描述

一般来说,抽象类会被其子类继承并实现具体方法;
*注:抽象方法不能有方法体;抽象类不能被实例
化;抽象类可以没有抽象方法,但抽象方法一定要在抽象类中 *
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.接口

7.1定 义

在这里插入图片描述
注:
(1)在接口中,可以直接省略abstract关键字;
(2)一个类implement一个接口时,它需要重写该接口的所有抽象方法;

7.1 使用注意事项

在这里插入图片描述在这里插入图片描述

class A implement interface1说明class已经执行接口的属性了,拥有和接口一样的访问权限;

7.2接口vs继承

可以理解为:实现接口是对java单继承机制的一种补充
在这里插入图片描述
在这里插入图片描述

7.3 接口多态

(1)可以用A instanceof <类>来判断A的运行类型是否为特定类;

7.4接口的多态传递

(1)接口类型的变量可以指向实现了该接口的类的对象实例; 
(2)接口继承就能实现多态传递;

在这里插入图片描述

7.5 至今类的迭代

在这里插入图片描述

8.内部类

类的五大成员:属性,方法,构造器,代码块,内部类

8.1内部类定义在这里插入图片描述

8.2内部类分类(4种)

在这里插入图片描述
(1)局部内部类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)匿名内部类(重要!!!)

基于接口的匿名内部类举例
在这里插入图片描述
在这里插入图片描述

基于类的匿名内部类
在这里插入图片描述

匿名内部类的使用注意事项
在这里插入图片描述
在这里插入图片描述

匿名内部类的常用实践举例

java">public class innerClassExercise {public static void main(String[] args) {Phone phone = new Phone();phone.alarmclock(new Bell(){public void ring(){System.out.println("懒猪起床了");}});phone.alarmclock(new Bell(){public void ring(){System.out.println("小伙伴上课了。。。。");}});}}interface Bell{public void ring();
}class Phone{public void alarmclock(Bell bell){bell.ring();}
}

(3)成员内部类
在这里插入图片描述

外部类要使用成员内部类的方法:
在这里插入图片描述
外部其他类要使用成员内部类时

java">public void getInner08Instance(){return new Inner08;
}

在这里插入图片描述
(4)静态内部类
在这里插入图片描述

外部其他类访问静态内部类
在这里插入图片描述
在这里插入图片描述
当外部类和静态内部类中的属性重名时,可以直接使用:外部类名.成员去访问;(因为本身静态属性就不要实例对象,所以this存在没有意义,this它代表的是实例对象)


http://www.ppmy.cn/ops/115835.html

相关文章

构建高可用和高防御力的云服务架构第一部分:深入解析DDoS高防(1/5)

引言 在数字化时代&#xff0c;网络安全已成为全球关注的焦点。随着互联网技术的快速发展和应用的广泛深入&#xff0c;网络安全形势日益严峻。特别是分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;以其破坏性强、难以防范的特点&#xff0c;对个人、企业乃至国…

从头开始:手搓一个基于C/C++的线程池

手搓线程池 线程池工作原理和实现线程池工作原理1. 线程池的基本组成&#xff1a;2. 线程池的基本执行流程&#xff1a;3. 线程池的核心参数&#xff1a;4. 线程池的生命周期&#xff1a;5. 线程池的执行策略&#xff1a; 相关知识点线程与进程的比较读写锁互斥锁 基于C语言的线…

Qt系列-1.Qt安装

Qt安装 0 简介 1.安装步骤 1.1 下载 进入qt中文网站:https://www.qt.io/zh-cn/ Qt开源社区版本:https://www.qt.io/download-open-source#source 1.2 安装 chmod +x qt-online-installer-linux-x64-4.8.0.run ./qt-online-installer-linux-x64-4.8.0.run 外网不能下载…

etcd三节点,其中一个坏掉了的恢复办法

一、配置etcdctl环境变量 --------------------------------------------------------------------------------------------- #其中证书实际路径和endpoints,以环境情况为准,查询方式 # ps -ef | grep etcd-cafile # ps -ef | grep etcd-servers export ETCDCTL_API3 export…

41. 如何在MyBatis-Plus中实现批量操作?批量插入和更新的最佳实践是什么?

在 MyBatis-Plus 中&#xff0c;实现批量操作&#xff08;如批量插入、批量更新&#xff09;是非常常见的需求。MyBatis-Plus 提供了对批量操作的良好支持&#xff0c;可以通过多种方式实现高效的批量处理。下面详细介绍批量操作的实现方式以及最佳实践。 1. 批量插入 批量插入…

fo-dicom,第一个基于.NET Standard 2.0 开发的DICOM开源库

1. 简介&#xff1a; fo-dicom是一个基于C#开发的库&#xff0c;用于处理DICOM&#xff08;Digital Imaging and Communications in Medicine&#xff09;格式的数据。DICOM是一种用于医学影像和相关信息的标准格式&#xff0c;广泛应用于医学领域。fo-dicom提供了多平台支持&…

日常生活中喝够水,能帮助预防多种慢性病、提高免疫力,还能改善情绪、提高认知能力!

文章目录 引言多喝水的好处为何人体中水分含量这么高?引言 感到口渴时,人体缺水程度已经在 1%~2% 了。建议大家养成随时喝、少量多次的习惯,在口渴前喝水,避免影响健康。 水分的丢失却无时无刻不在发生,即便没有大量出汗,每天通过呼吸、排泄、皮肤蒸发就能排出 1.5~2 升…

Oracle和JSON结合起来,开发者的福利

Oracle Database 23c在简化开发、应对开发发力了&#xff0c;更多拥抱开发者方面的能力&#xff0c;真的是人惊讶&#xff0c;这几天也是参加Oracle官方组织的AI专家培训&#xff0c;受益非浅&#xff0c;在这里给大家分享一下通过 ORDS操作对外暴露Http Restful服务&#xff0…