B站宋红康JAVA基础视频教程个人笔记chapter07(面向对象高级)

news2024/11/26 10:22:42

文章目录

      • 1.static关键字的学习
        • 1.1为什么需要static关键字
        • 1.2 static总结
      • 2.单例设计模式
      • 3.静态代码块
      • 4.final关键字的使用
      • 5.抽象类和抽象方法
        • 5.1抽象类的由来
      • 6.接口的使用
        • 6.1基本概念理解
      • 7.匿名内部类的学习
      • 8.内部类
      • 9.枚举类
      • 9.包装类
      • 10.IDEA快捷键大全

1.static关键字的学习

1.1为什么需要static关键字

当前类的多个实例共享该变量,且此成员变量的值是相同的
方法操作的变量是静态的变量,通常需要将该方法设置为静态方法

1.2 static总结

1.static用来修饰的结构:属性,方法;代码块,内部类;
2.用static修饰的成员变量,叫做类变量
3.整个内存就一份,被类的多个对象所共享
4.静态方法内可以调用静态的属性和其他的静态方法,不能调用非静态结构
5.static修饰的方法内不能调用this和super

class Chinese {
	String name;
	int age;
	static String nation; 
	public static void eat(){}
}

2.单例设计模式

饿汉式

public class BankTest{
	public static void main(String[] args){
		Bank bank1 = Bank.getInstance();
		Bank bank2 = Bank.getInstance();
		sout(bank1 == bank2); // true指向同一个对象
	}
}

class Bank{
	private Bank(){} //构造器私有化
	private static Bank instance = new Bank(); // 作为类的属性出现
	public static Bank getInstance(){
		return Bank; // 静态方法内部只能访问静态属性和方法
	}
}

懒汉式

public class GirlFriendTest {
	public static void main(String[] args){
		
	}
}
class GrilFriend{
	// 1.类构造器私有化
	private Girlfriend(){}
	// 2.声明当前类的实例
	private static GirlFriend instance = null;
	// 3.通过get方法获取当前类的实例,如果未创建对象,则在方法内部创建
	public static GirlFriend getInstance(){
		if (instance == null){
			instance = new GirlFriend();
			return instance;
		}
		return instance;  
	}
}

2.1两种模式的对比
特点

饿汉式:“立即加载”,随着类的加载,唯一的实例就创建了
懒汉式:“延迟加载”,在需要的时候进行创建

优缺点

饿汉式:(优点)写法简单,内存中较早加载,使用较方便,是线程安全。(缺点):内存中占用时间较长
懒汉式:(缺点):线程不 安全,(优点):在需要的时候创建,节省内存空间

3.静态代码块

class Person {
	String name;
	int age;
	public Person(){}
	
	// 非静态代码块
	{
	}
	// 静态代码块
	static{
	}
}

具体使用

1.静态代码块

随着类的加载而执行
由于类的加载只会执行一次,进而静态代码块的执行,也会只执行一次
作用:用来初始化类的信息
静态代码块的执行先于非静态代码块

2.非静态代码块

随着对象的创建而执行
每创建当前类的一个实例,就会执行一次非静态代码
作用:初始化对象的信息

4.final关键字的使用

1.final可以用来修饰的结构:类,方法,变量
2.final修饰的类不能被继承
3.变量修饰后不可以更改。可以在显示赋值,代码块中赋值,构造器中赋值
4.static final修饰的成员变量叫全局常量

5.抽象类和抽象方法

5.1抽象类的由来

1.父类越来越抽象,以至于没有必要创建他的实例对象,这样的类叫做抽象类
2.子类继承父类,必须实现父类的所有抽象方法

语法格式:

public abstract class Person{
	public abstract void eat(); //抽象方法,没有方法体
} // 这里定义了abstract,就不能建对象

包含抽象方法的类应该是抽象类

6.接口的使用

6.1基本概念理解

1.接口的本质是一种规范
2.定义接口的关键字:interface
3.接口内部的使用说明:

属性:public static final修饰
方法:jdk8之前,声明未抽象方法,修饰为public abstract

4.接口和类之间的关系:实现关系
5.格式:class A extends SuperA implements B,C{}
6.类可以实现多个接口,弥补了类的单继承的局限性
7.类必须将实现接口中的所有抽象方法都实现,方可实现实例化,否则必须声明为抽象类
8.接口和接口的关系:继承关系,且可以多继承
9.接口的多态性: 接口名 变量名 = new 实现类对象;
10.接口不存在构造器,不能new 调用
11.接口和抽象类的区别:

共性:都可以声明抽象方法,都不能实例化

不同

抽象类一定有构造器,接口没有构造器
类和类之间是继承关系,类和接口之间是实现关系,接口和接口之间是多继承关系

public class InterfaceTest{
	public static void main(String[] agrs){
		sout(Flyable.MIN_SPEED);
		
		Bullet b1 = new Bullet();
		b1.fly();
		b1.attack();
	
		// 接口的多态性
		Flyable f1 new Bullet();
		f1.fly();
	
	}
} 
//接口1
interface Flyable { // 接口
	// 1.属性,全局常量
	public static final int MiN_SPEED = 0;
	// 可以省略public static final ,默认也是全局常量,外部无法修改
	int MAX_SPEED = 7900;
	
	// 2.方法:可以省略public abstract声明
	void fly();

}
// 接口2
interface Attackable{
	void attack(); // 省略abstract
}

// 接口实现
// 类必须实现接口的方法
class Bullet implements Flyable, Attackable{
	public void fly(){sout(“让子弹飞"};
}



// 测试接口的继承关系
interface AA {
	void method1();
}
interface BB {
	void method2();
}

interface CC extends AA, BB {// 接口可以实现多继承(子接口)
	
}

class DD implements CC{
//重写
	public void method1();
	public void method2();
}

案例实现:电脑打印机

public class USBTest{
	public static void  main(String[] args){
		Computer computer = new Computer();
		Printer printer = new Printer();

		computer.transferData(printer);
	}
}

class Computer{
	public transferData(USB usb){ // USB usb = new Printer(); 多态的实现
		Sout("设备连接成功...")
		usb.start();
		sout("数据传输的细节操作");
		usb.stop();
	}
}

//外部设备(一般电脑下载驱动就是这个)
class Printer implements USB{
	public abstract void start(){
		sout("打印机开始工作");
	};
	public abstract void stop(){
		sout("打印机结束工作")
	};
}

interface USB{
	// 声明常量:
	// 方法
	public abstract void start();
	public abstract void stop();
}

7.匿名内部类的学习

7.1通常,我们在创建一个类的实例时,首先需要定义这个类的名字,比如:

class MyComparable implements Comparable {
    @Override
    public int compareTo(Object o) {
        return 0;
    }
}

MyComparable instance = new MyComparable();

匿名内部类则是省略了类名,直接在创建类的实例时定义了类的行为。换句话说,匿名内部类就是一个没有名字的类,我们在定义它的同时就创建了它的实例
7.2匿名内部类的语法格式如以下

new 接口名或父类名() {
    // 类的实现,原本你打算在类里面写啥东西就写在这里就行了
};

8.内部类

1.啥是内部类?

将一个类A定义在另一个类B里面,里面那个类就称为“内部类”,类B则称为“外部类”

2.内部类的分类

成员内部类:直接声明在外部类里面

使用static修饰的,静态的成员内部类
不使用static修饰的,非静态的成员内部类

局部内部类:声明在方法内,构造器内,代码块内的内部类

匿名的局部内部类
非匿名的局部内部类

9.枚举类

1.解释:

枚举类本质上也是一种类,只不过这个类的对象是有限的,固定的几个,不能让用户随意创建

2.开发中的建议

开发中,如果针对某个类,其实例是确定个数的。则推荐将此类声明为枚举类

3.案例
3.1jdk5.0之前的定义方法

public class SeasonTest {
    public static void main(String[] args) {
        System.out.println(Season.spring); // 默认调用类的toString方法
    }
}

class Season{
    private final String seasonName; // 只能获取不能修改
    private final String seasonDesc; // final修饰的变量必须被初始化,且初始化后不能修改

    // 1.私有化的构造器
    private Season(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }


    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

    // 创建对象
    public static final Season spring = new Season("Spring", "Spring");
    public static final Season summer = new Season("Summer", "Summer");
    public static final Season autumn = new Season("Autumn", "Autumn");
    public static final Season winter = new Season("Winter", "Winter");

    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}

3.2.jdk5.0使用关键字定义枚举类

public class SeasonTest1 {
    public static void main(String[] args) {
        System.out.println(Season1.SPRING);
    }
}

enum Season1{

    // 必须再枚举类的开头声明多个对象,对象之间使用逗号隔开
    SPRING("spring", "spring"),
    SUMMER("summer", "summer"),
    AUTUMN("autumn", "autumn"),
    WINTER("winter", "winter");


    private final String seasonName;
    private final String SeasonDesc;

    private Season1(String seasonName, String SeasonDesc){
        this.seasonName = seasonName;
        this.SeasonDesc = SeasonDesc;
    }

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return SeasonDesc;
    }

    @Override
    public String toString() {
        return "Season1{" +
                "seasonName='" + seasonName + '\'' +
                ", SeasonDesc='" + SeasonDesc + '\'' +
                '}';
    }
}

使用enum关键字定义的枚举类,默认其父类是java.lang,Enum类
属性是private ,final修饰
构造器是private修饰

3.3枚举类实现接口

public class SeasonTest2 {
    public static void main(String[] args) {
        Season2[] values = Season2.values();
        for(int i = 0; i<values.length; i++) {
            values[i].info(); // values[i]是得到的每个对象的实例
        }
    }
}

interface info1{
    void info();
}

enum Season2 implements info1{
    // 枚举类实现接口中的方法
    SPRING("spring", "spring"){
        public void info() {
            System.out.println("春天再哪里");
        }
    },
    SUMMER("summer", "summer"){
        public void info() {
            System.out.println("夏天再哪里");
        }
    },
    AUTUMN("autumn", "autumn"){

        public void info() {
            System.out.println("秋天再哪里");
        }
    },
    WINTER("winter", "winter"){
        public void info() {
            System.out.println("冬天再哪里");
        }
    };

    private final String seasonName;
    private final String seasonDesc;

    private Season2(String seasonName, String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

    @Override
    public String toString() {
        return "Season2{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}

9.包装类

1.有哪些包装类在这里插入图片描述
2.为什么要使用包装类

为了使得基本数据类型的变量具备引用数据类型的相关特征(比如:封装继承多态)

3.如何使用

// 基本转包装类
int num = 10;
Integer i1 = Integer.valueof(num);

// 包装类转基本
Integer i1 = Integer.valueof(20);
int num1 = i1.intValue();

调用包装类的xxxValue()方法即可
注意:原来使用基本数据类型的位置,改成包装类以后,对于成员变量来说,其默认值变化了
现在基本可以自动装箱和自动拆箱

4.包装类/基本数据类型和String之间的转换

public class Test{
	// 基本转String 
	int i1 = 10;
	String str1 = String.valueOf(i1);
	sout(strl); // "10"
	
	// String转基本
	String s1 = "123";
	int i1 = Interger.parseInt(s1);
	sout(i1) // 123
}

10.IDEA快捷键大全

在这里插入图片描述

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IOTE 2024 第二十二届国际物联网展 ·深圳站 8月28-30日唯创知音

​ 世界聚焦物联网&#xff0c;产业规模空前&#xff01;一场高端产业研学盛会即将如约而至。 IOTE 2024 第二十二届国际物联网展深圳站&#xff0c;2024年8月28-30日将在深圳国际会展中心(宝安)开展&#xff0c;汇聚全球超800家参展企业、13万来自工业、物流、基础建设、智慧…

MySQL基本查询 -- 表的增删改查CRUD

CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; 文章目录 1.Createa.insert语法&#xff1a;插入指定列&#xff1a;全列插入&#xff1a;一次插入多行数据&#xff1a; b. on duplicate key update ~ 插入否则更…

【前端】文件上传框架plupload使用(前后端交互)

这个框架是用来给前端设置文件上传的按钮的。 首先要明白&#xff0c;前端向后端发送请求的方式有get和post&#xff0c;两者的区别在于&#xff0c;前者只能在网址中携带参数&#xff0c;后者是在请求体body中携带参数。 Plupload向后端发送请求是post请求方式&#xff0c;发送…

Axios介绍;前后端分离开发的介绍;YAPI的使用;Vue项目简介、入门;Elementui的使用;nginx介绍

1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xf…

基于 Dots + GPU Instance 的大规模物体渲染

之前写的两篇开放世界技术栈都是公司其他同事做的&#xff0c;所以很多细节了解不详细。但这次是全程我自己搭建的轮子&#xff0c;可以讲得稍微详细些。 之前写的大规模物件渲染的 GPU 版本&#xff0c;虽然渲染量大效率高&#xff0c;但是有个很致命的缺陷&#xff1a;无法与…

Azure OpenAI citations with message correlation

题意&#xff1a;“Azure OpenAI 引用与消息关联” 问题背景&#xff1a; I am trying out Azure OpenAI with my own data. The data is uploaded to Azure Blob Storage and indexed for use with Azure AI search “我正在尝试使用自己的数据进行 Azure OpenAI。数据已上传…

行业应用 | 桥田MMC磁力换模系统-冲压场景案例分享

随着市场竞争的日益加剧&#xff0c;制造形态从单品种大批量转变为多品种小批量&#xff0c;品种的多样化对模具的多样化产生了需求&#xff0c;在更换产品品类时&#xff0c;首先需要更换加工模具。冲压是金属加工中的典型场景&#xff0c;如何缩短冲压模具的更换时间&#xf…

【Hot100】LeetCode—23. 合并 K 个升序链表

目录 1- 思路优先队列 2- 实现⭐23. 合并 K 个升序链表——题解思路 3- ACM 实现 原题连接&#xff1a;23. 合并 K 个升序链表 1- 思路 优先队列 1- 提供的数据结构&#xff1a;ListNode[] lists2- 由于提供的数据结构已经是有序的&#xff0c;不能通过指针实现是因为不知道一…

基于I2S和esp-now协议制作esp32对讲机

基于I2S和esp-now协议制作esp32对讲机 1.概述 这篇文章介绍基于I2S和esp-now协议制作对讲机&#xff0c;他的实现需要在ESP32开发环境的2.0.10版本号下才能成功&#xff0c;高版本号的源码有改动会导致编译失败。 安装ESP32 2.0.10版本&#xff1a; https://brucelong.blog.c…

2 nestjs 设计模式

回顾 MVC MVC&#xff08;Model-View-Controller&#xff09;设计模式是一种常用于软件开发的架构模式&#xff0c;旨在分离应用程序的不同部分&#xff0c;使得它们可以独立地开发、测试和维护。它将应用程序分为三个主要组件&#xff1a; Model&#xff08;模型&#xff09;…

什么牌子的开放式耳机性价比高?五款高口碑精品推荐!

由于传统入耳式耳机可能对耳道健康造成长期影响&#xff0c;许多人开始偏好选择开放式耳机的非侵入式设计。这种耳机有助于减少耳内湿润、细菌增长&#xff0c;以及耳道闷热的不适感。为了帮助大家在众多产品中挑选合适的开放式耳机&#xff0c;我将列举一些市场反馈良好的款式…

C#中的WebClient与XPath:实现精准高效的Screen Scraping

在现代互联网中&#xff0c;Screen Scraping&#xff08;屏幕抓取&#xff09;已成为从网页中提取信息的重要技术。对于C#开发者来说&#xff0c;WebClient和XPath是实现高效抓取的重要工具。本文将概述如何使用C#中的WebClient类结合XPath技术&#xff0c;实现精准高效的Scree…

探索科技潮流新领地厦门凯酷全科技有限公司抖音小店

在这个日新月异的数字时代&#xff0c;科技不仅深刻改变了我们的生活方式&#xff0c;更成为连接消费者与未来生活的桥梁。今天&#xff0c;就让我们一起走进厦门凯酷全科技有限公司的抖音小店&#xff0c;感受一场科技与时尚的完美碰撞&#xff0c;体验未来生活触手可及的魅力…

Python 和 PyCharm 安装(傻瓜式)

为什么要安装Python&#xff1f; 当我们写 python 代码的时候&#xff0c;需要有环境的支持&#xff0c;才可以运行代码。而 python 的安装支持了两个主要部分&#xff0c;分别是解释器和标准库。当我们安装完成&#xff0c;就可以使用python里面的标准库来写代码&#xff0c;而…

Linux 内核源码分析---netfilter 框架

iptables是用户用来管理和配置防火墙规则的一种策略&#xff0c;但是实际解析规则并按照规则实施产生作用的是Netfilter。 iptables 与协议栈内有包过滤功能的 hook 交互来完成工作&#xff0c;这些内核 hook 构成了 netfilter 框架。每个进入网络系统的包&#xff08;接收和发…

Java Web —— 第七天(Mybatis案例 员工管理2)

新增员工 EmpController类 PostMappingpublic Result save(RequestBody Emp emp){log.info("新增员工操作,emp:{}",emp);empService.save(emp);return Result.success();} EmpServiceImpl实现类 //新增员工Overridepublic void save(Emp emp) {//补充基础属性 创…

jmeter中添加ip欺骗

1、首先在本机电脑中通过配置文件创建添加ip的配置文件&#xff0c;先创建一个txt格式的&#xff0c;直接修改文件名以及后缀为ips.bat 2、编辑该ips.bat文件&#xff0c;在文件中输入如下内容&#xff0c;用于快速给本机添加ip地址&#xff0c;&#xff08;2&#xff0c;1&…

今年奥运会的场馆设计,竟然藏着这样的黑科技!

随着奥运会的盛大开幕&#xff0c;全球观众不仅关注运动员的精彩表现&#xff0c;也被奥运场馆的壮丽设计所吸引。这些场馆不仅外观炫酷&#xff0c;功能齐全&#xff0c;更重要的是背后应用了一系列先进的技术和材料&#xff0c;其中最为亮眼的就是巴黎奥运会永久性体育场馆之…

“救命快刊”:升到2区,IF3.1,水平低也无俱,专家意见中肯不难为人

1、期刊简介&#xff1a; International Journal of Green Energy • 出版社&#xff1a;Taylor and Francis • 影响因子&#xff1a;3.1 • 期刊分区&#xff1a;JCR2/3区&#xff0c;中科院4区 • 检索数据库&#xff1a;SCI&EI 2、研究领域&#xff1a; 分享了能源…

开源好用的堡垒机工具Jumpserver

Jumpserver是一个由杭州飞致云信息科技有限公司&#xff08;FIT2CLOUD飞致云&#xff09;开发的开源堡垒机系统&#xff0c;旨在帮助企业构建和强化运维安全审计能力。 以下是关于Jumpserver的详细介绍&#xff1a; 一、基本概述 定义&#xff1a;Jumpserver是一个开源的堡垒…