java面向对象查缺

news2024/12/27 12:05:13

匿名对象

匿名对象只能使用一次

public class Test1 {
    public static void main(String[] args) {
        PhoneFactory p1 = new PhoneFactory();
        p1.show(new Phone(1000,"black"));
    }
}
class PhoneFactory{
    public void show(Phone p){
        p.send();
    }
}
class Phone{
    private int price;
    private String color;

    public Phone() {
    }

    public Phone(int price, String color) {
        this.price = price;
        this.color = color;
    }
    public void send(){
        System.out.println("send");
    }
}

递归

递归方法:一个方法体内调用它自身

方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无需循环控制。
递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。

public class Test2 {

    public static void main(String[] args) {
        Test2 t = new Test2();
        System.out.println( t.getSum(100));
    }
    /*
   例子1:计算1-n之间所有自然数的和
    */
    public int getSum(int n){//n为5
        if(n == 1){
            return 1;
        }else{
            return  n + getSum(n-1);
        }
    }
    /*
    例子2:计算1-之间所有自然数的乘机
     */
    public int getSum1(int n){//n为5
        if(n == 1){
            return 1;
        }else{
            return  n * getSum(n-1);
        }
    }
    /*
    例子3:已知有一个数列:f(0) = 1,f(1) = 4,f(n+2) =2*f(n+1)+f(n)
    其中n是大于0的整数,求f(10)的值。
    思路:要将f(n+2)当成f(n)
     */
    public  int f(int n){
        if(n == 0){
            return 1;
        }else if(n == 1){
            return 4;
        }else {
            return 2*f(n-1) + f(n-2);
        }
    }
    /*
例子4:斐波那契数列
    1 1 2 3 5 8 13 21 34 55
    规律:一个数等一两个数之和
    要求:计算斐波那契数列的第n个值。
     */
 public class Demo2 {
	private static int getFibo(int i) {
		if (i == 1 || i == 2)
			return 1;
		else
			return getFibo(i - 1) + getFibo(i - 2);
	}
 
	public static void main(String[] args) {
		System.out.println("斐波那契数列的前20项为:");
		for (int j = 1; j <= 20; j++) {
			System.out.print(getFibo(j) + "\t");
			if (j % 5 == 0)
				System.out.println();
		}
	}

instanceof关键字的使用

a instanceof A :判断对象a是否是A的实例。如果是,返回true,如果不是,返回false。
使用情景:为了避免在向下转型时出现ClassCastException的异常。我们在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。

public class Test3 {
    public static void main(String[] args) {
        Person s = new Student();
        Person t = new teacher();


        System.out.println(s instanceof Student);//true,多态的体现
        System.out.println(s instanceof teacher);//flase
        
        if(s instanceof Student){
            Student s1 = (Student) s;
        }

    }
}
class Person{}
class Student extends Person{}
class teacher extends Person{}

抽象类抽象方法abstract

抽象类

1、此类不能实例化
2、抽象类中一定有构造器,便于子类实例化时调用(涉及,子类对象实例化的全过程)
3、开发中,都会提供抽象类的子类,让子类对象实例化,完成相关操作。

抽象方法

1、抽象方法只有方法的声明,没有方法体
2、包含抽象方法的类,一定时一个抽象类。反之,抽象类可以没有抽象方法。
3、若子类重写了父类中的所有抽象方法后,此子类方可实例化
4、若子类没有重写父类中的所有抽象方法,则此子类也是一个抽象类,需要用abstract修饰。

抽象类使用情景

抽象类时用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类。
举例
在这里插入图片描述

接口

1.接口使用interface来定义
2.java中,接口和类时并列的两个结构
3.如何定义接口:定义接口中的成员
	3.1 jdk7及以前:只能定义全局常量和抽象方法
		全局常量:public static final修饰,书写时,可以省略不写。	
		抽象方法:public abstract修饰。
	3.2 jdk8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法。
4.接口中不能定义构造器,意味着接口不可以实例化
5.java开发中,接口通过类实现(implement)的方式使用。
	如果实现了覆盖了接口中所有抽象方法,则此实现类就可以实例化。
	如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类
6.java类可以实现多个接口---->弥补了java单继承的弊端
	格式:class AA extends BB implements CC,DD,EE
7.接口于接口之间可以继承,而且可以多继承
8.接口的具体使用,体现多态性
9.接口,实际上可以看作是一种规范

内部类

1.java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类。
2.内部类的分类:成员内部类 、局部内部类(方法内、代码块内、构造器内)
3.成员内部类:
   一方面:作为外部类的成员:
       >调用外部类的结构
       >可以用static修饰
       >可以被四种不同权限修饰
   另一方面,作为一个类:
       >类内可以定义属性方法构造器等
       >可以被final修饰,即不能被继承
       >可以被abstract修饰,即不能被实例化
4.关注问题:
    4.1如何实例化成员内部类的对象
    4.2如何在成员内部类中区分调用外部类的结构
    4.3开发中,局部内部类的使用

成员内部类

public static void main(String[] args) {
        //创建Dog实例(静态成员内部类的实例)
        Person.Dog dog = new Person.Dog();
        dog.show();
        //创建Cat实例(非静态成员内部类)
        Person person = new Person();
        Person.Cat cat = person.new Cat();
        cat.show();
    }

}
class Person {
    String name;
    int age;
    public void eat(){
        System.out.println("Personeat");
    }


    //静态成员内部类
    static class Dog{
        String name;
        int age;
        public void show(){
            System.out.println("dogshow");
            //eat();静态结构不能调用非静态
        }

    }
    //非静态成员内部类
    class Cat{
        String name;
        int age;
        public void show(){
            System.out.println("catshow");
            eat();//调用外部类的属性Person.this.eat()
        }
        public void display(String name){
            System.out.println(name);//形参name
            System.out.println(this.name);//内部类属性
            System.out.println(Person.this.name);//外部类属性
        }

    }

局部内部类

public class Test2 {
    //局部内部类(不常用)
    public void method(){
        class AA{

        }
    }
    //返回一个实现了Comparable接口的对象,局部内部类多用于比较器
    public Comparable getComparable() {
        //方式一:
//        class MyComparable implements Comparable{
//
//            @Override
//            public int compareTo(Object o) {
//                return 0;
//            }
//        }
//        return  new MyComparable();
//    }
        //方式二:
        return new Comparable() {
            @Override
            public int compareTo(Object o) {
                return 0;
            }
        };
    }
}

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

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

相关文章

Nginx代理接口访问返回404

Nginx代理接口访问返回404 一、背景 因为不同业务系统间有接口调用&#xff0c;存在跨域问题&#xff0c;为了解决同源策略&#xff0c;需要将接口通过nginx去转发&#xff0c;但是配置完后通过postman请求一直存在访问404的问题。 访问地址&#xff1a;https://a.test.com/n…

无代码集成明道云与更多应用连接

明道云是一个APaaS平台&#xff0c;可以帮助用户快速搭建个性化企业应用&#xff0c;用户不需要代码开发就能够搭建出用户体验上佳的销售、运营、人事、采购等核心业务应用&#xff0c;打通企业内部数据&#xff0c;也能够通过API和Webhook和其他系统对接。 场景描述&#xff…

Vue实战技巧:从零开始封装全局防抖和节流函数

前言 你是否曾经遇到过用户频繁点击按钮或滚动页面导致反应迟钝的问题&#xff1f;这是因为事件被连续触发&#xff0c;导致性能下降。在本文中&#xff0c;我将为大家介绍 vue 中的防抖和节流策略&#xff0c;并展示如何封装全局的防抖节流函数&#xff0c;以避免频繁触发事件…

酷开系统丨加入酷开会员,体验有趣的云逛荷兰海牙市立博物馆

夏日炎炎&#xff0c;出门是不可能的&#xff0c;还是宅在家里享受空调的吹拂吧&#xff01;如果想足不出户看展览&#xff0c;感受文化的熏陶&#xff0c;那就打开酷开系统&#xff0c;加入酷开会员&#xff0c;在云端逛逛荷兰海牙市立博物馆吧&#xff01; 荷兰海牙市立博物…

格式化后数据恢复,教你3个实用方法!

“格式化后数据还能恢复吗&#xff1f;前几天因为我的电脑中了病毒&#xff0c;我不得不将它进行格式化操作。但是我电脑里有很多比较重要的文件&#xff0c;有什么方法可以帮我恢复电脑中的文件吗&#xff1f;求解答&#xff01;” 格式化是一种比较常见的数据清除方法&#x…

低代码平台:初创公司的理想选择

对于初创公司而言&#xff0c;时间和资源是宝贵的。他们需要快速构建和部署应用程序&#xff0c;以满足业务需求&#xff0c;提高效率&#xff0c;并保持竞争优势。在这个背景下&#xff0c;低代码平台成为了初创公司的一个理想选择。而Zoho Creator作为一款出色的低代码平台&a…

node 报错:tagOffsetsMap[tag] ??= [];...SyntaxError: Unexpected token ,‘??=‘,亲测解决

安装的 node 版本不支持空值赋值运算符(??) 更换合适的 node 版本就行&#xff0c;如图 看看版本对应支持的 更多支持请在 node.green 上查看各种语法支持的版本

计算机视觉与图形学-神经渲染专题-pi-GAN and CIPS-3D

《pi-GAN: Periodic Implicit Generative Adversarial Networks for 3D-Aware Image Synthesis》 摘要 我们见证了3D感知图像合成的快速进展&#xff0c;利用了生成视觉模型和神经渲染的最新进展。然而&#xff0c;现有的方法在两方面存在不足&#xff1a;首先&#xff0c;它们…

ELK 将数据流转换回常规索引

ELK 将数据流转换回常规索引 现象&#xff1a;创建索引模板是打开了数据流&#xff0c;导致不能创建常规索引&#xff0c;并且手动修改、删除索引模板失败 "reason" : "composable template [logs_template] with index patterns [new-pattern*], priority [2…

SAP中采购文档出现定价转换因子字段溢出是何原因?

近期处理了一笔用户反馈的主题问题。这个问题有意思的地方地于&#xff0c;多重错误的叠加&#xff0c;导致了问题在开始就暴露出来&#xff0c;可以将隐患消除在萌芽状态。 在公司的应用中&#xff0c;会由采购创建价格合同&#xff0c;物流参照价格合同创建计划协议。但采购…

聊聊JDK动态代理原理

1. 示例 首先&#xff0c;定义一个接口&#xff1a; public interface Staff {void work(); }然后&#xff0c;新增一个类并实现上面的接口&#xff1a; public class Coder implements Staff {Overridepublic void work() {System.out.println("认真写bug……");…

为什么说用C端产品的思维做B端产品就是死路一条?

经常听行业大佬说起&#xff1a;如果用C端产品的思维做B端产品就是死路一条&#xff0c;那原因究竟是什么呢&#xff1f; 首先&#xff0c;需要明确的是C端产品和B端产品的用户群体和需求存在很大差异。C端产品的用户主要是消费者&#xff0c;更多的是被情感驱动。而B端产品的…

Visual Studio 2022安装教程(英文版)

文章目录 1.下载安装 1.下载 官网地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/ 选择第一个社区版本&#xff1a;Community 2022 安装 1.将下载好的文件保存到桌面&#xff0c;双击点开 2.等待visual studio installer配置好 3.点击安装后会来到配件选…

消息队列(3) -封装数据库的操作

前言 上一篇博客我们写了, 关于交换机, 队列,绑定, 写入数据库的一些建库建表的操作 这一篇博客中,我们将建库建表操作,封装一下实现层一个类来供上层服务的调用 , 并在写完该类之后, 测试代码是否完整 实现封装 在写完上述的接口类 与 xml 后, 我们想要 创建一个类 ,来调用…

使用OpenCV进行目标提取详细教程(附python代码演练)

今天的文章将讨论并指导你识别图像中的对象&#xff0c;使用 OpenCV 对这些对象进行遮罩处理。让我们开始吧&#xff01; HSV 色标 请花一点时间观察下面的图片。每个图块似乎是不同的颜色&#xff0c;对吧&#xff1f;但是有一个有趣的地方&#xff1a;如果我们仔细思考&#…

B2B2C跨境独立站后台管理--支付系统开源搭建

要搭建一个B2B2C跨境独立站后台管理的支付系统&#xff0c;您可以按照以下步骤进行开发&#xff1a; 1. 确定需求和功能&#xff1a;首先&#xff0c;您需要明确支付系统的功能和需求&#xff0c;包括接入第三方支付平台、实现支付功能、订单管理、退款管理、对账功能等。 2.…

无涯教程-Perl - eval函数

描述 该函数在执行时判断EXPR,就好像EXPR是一个单独的Perl脚本一样。这使您可以在程序中使用单独的,也许是用户提供的Perl脚本。每次调用函数时,都会分别判断eval EXPR语句。 当解析脚本的其余部分时(执行之前),第二种形式判断BLOCK。 语法 以下是此函数的简单语法- eval …

Redis探索之旅

目录 今日良言&#xff1a;有志者自有千计万计&#xff0c;无志者只感千难万难 一、简介 二、Redis的安装 三、Redis的简单使用 四、Redis相关知识点 1.缓存分类 2.五大基本数据类型使用 3.持久化 4.常见面试题 今日良言&#xff1a;有志者自有千计万计&#xff0c;无…

【怎么提高性能和解决高并发】

怎么解决高并发 解决高并发的整体流程大概是&#xff1a; 先进行性能评估、再进行性能测试、然后找到程序可以承受的临界点、最后针对出问题的地方&#xff0c;进行优化。当然硬件设置对高并发的影响也很重要&#xff0c;如果达到硬件天花板&#xff0c;那么再怎么优化程序都…

如何实现网络数据传输

目录 前言 1.理解源IP地址和目的IP地址 2.理解端口号 2.1端口号与进程pid的关系 2.2源端口号和目的端口号 3.协议 3.1TCP协议 3.2认识UDP协议 4.网络字节序 5.socket编程接口 总结 前言 在上一篇文章网络框架中给大家对网络的整体进行了一个宏观的介绍&#xff0c;这…