java面向对象部分

news2025/1/17 6:00:45

在学校时学的比较乱,趁暑假再系统的学一遍

访问权限控制

private:私有,只能被本身类访问

什么都不写:默认,只能被类本身和同包中的其他类访问

protected:受保护的,只能被类本身和同包中的其他类访问,也能被子类访问

public:公有的,允许在任何地方被访问

instanceof

判断某个对象是否是给定的类,是返回true,不是返回false

public class Person {
    String name;
    int age;
    String sex;
}
public class Worker extends Person{}
public class Student extends Person{}
public class Main {
    public static void main(String[] args) {
        Person person = new Student();
        if(person instanceof Student) { //true
            System.out.println("yes");
        }
    }
}

同时也能判断是否是它的子类。

public class Main {
    public static void main(String[] args) {
        Person person = new Student();
        if(person instanceof Person) { //true
            System.out.println("yes");
        }
    }
}

抽象类

抽象类包含抽象方法,抽象方法只有方法头而没有方法体,具体实现由它的子类实现。

抽象方法定义:

public abstract class Person {
   	···
    public abstract void test();
    ···
}

子类必须为抽象类或者实现父类的抽象方法。
请添加图片描述

public class Student extends Person{
	······
    @Override
    public void test() {
        System.out.println("我是学生");
    }
    ······
}

抽象类不能直接通过new来实例化,因为在抽象类中,行为(方法)没有具体实现。
请添加图片描述
可以定义一个抽象类的对象变量,但只能new它的非抽象子类,因为子类中实现了父类的抽象方法
请添加图片描述

抽象方法的访问范围无法设置为私有,因为抽象类中的抽象方法必须由子类实现,所以必须能够被外部访问
在这里插入图片描述

接口

比抽象类还抽象,另外接口也不是类。它描述类具有什么功能,但不给出具体实现(java8之前)。

接口的定义:

public interface Study {
    public abstract void exam();
}

接口中的方法默认为公共的抽象方法,所以public abstract可省略不写
在这里插入图片描述

同时,接口内的方法也不能够去实现
在这里插入图片描述

在接口中,也只能够定义常量,默认为public final,可省略不写。Java8之后,提供了具体实现接口中的方法,default与static

public interface Study {
    public final int a = 1;
    public abstract void exam();

    public static void doHomework() {
        //静态方法
    }

    public default void listen() {
        //默认方法
    }
}

枚举类

本质就是一个类,继承自enum,枚举类中的每一个实例实际上就是public static final类型的常量。

定义方式:

public enum Status {
    RUNNING, STUDYING, SLEEPING;
}

在Student类中定义好枚举类的对象与get和set方法。

private Status status;

public Status getStatus() {
    return status;
}

public void setStatus(Status status) {
    this.status = status;
}

接下来为Student对象给定需要的枚举值

Student student = new Student("xiaoMing", "male", 19);
student.setStatus(Status.RUNNING);

常用方法:

values();//取出枚举类中所有值

Status[] st = Status.values();

基本包装类

5c3a6a27-6370-4c60-9bbc-8039e11e752d

特殊包装类

BigInteger,可以表示非常大的数,并且没有限制
在这里插入图片描述
在这里插入图片描述


String类

String本身也是一个类。

创建方式:可以直接用双引号创建一个对象,当然 也可以象征性的new。

如果使用双引号创建对象,为了优化效率,始终同一个对象:

public static void main(String[] args) {
    String s = "hello world";
    String s1 = "hello world";
    System.out.println(s == s1);
}
// true

但如果通过new创建出的对象,即使内容相同,也是不同的对象。

在这里插入图片描述

因此,如果我们只是想比较字符串的内容相等,应该使用equals方法。
在这里插入图片描述

charAt方法

在cpp中,访问字符串中的字符可以直接像数组那样通过下标访问,但java不允许。

参数:charAt(int index)

public static void main(String[] args) {
    String s = "hello world";
    System.out.println(s.charAt(0)); // h
}

substring方法

参数:

substring(beginIndex)

substring(beginIndex, endIndex) ,注意为左闭右开。

    public static void main(String[] args) {
        String s = "hello world";
        String s1 = s.substring(0, 3);
        String s2 = s.substring(s.length() - 4);
        System.out.println(s1); // hel
        System.out.println(s2); // orld
    }

split方法

分割字符串,通过指定字符进行字符串分割。

    public static void main(String[] args) {
        String s = "hello world";
        String[] str = s.split(" "); // 以空格为分割
        for(String i : str) {
            System.out.println(i);
        }
    }

StringBuilder类

String类的对象本身不能修改,String s = "hello", s只是对象的引用,并不是对象本身。对象存放在内存中,当重新创建一个字符串对象 "world",让 s = “world”,只是将s指向了这个对象,原来的对象"hello"还在内存中并没有改变。这是一种断开-再连接的操作,所以当要进行大量字符串修改时,应该避免使用String,这样会降低性能

一般用StringBuilder,专门用来构造字符串的,可对字符串进行拼接,裁剪等操作。

append方法

    public static void main(String[] args) {
        String s = "hello world";
        StringBuilder builder = new StringBuilder();
        builder.append(s).append(" are you ok?");
        System.out.println(builder.toString()); // hello world are you ok?
    }

成员内部类

在类的内部定义成员内部类,既然是类,那内部类同样有成员变量,方法等。

我们知道,要使用成员变量或方法时,需要通过对象来调用,同样的,要想创建内部类的对象,我们需要通过对象来调用。

public class Test {
    public class Inner {
        public void test() {
            System.out.println("成员内部类");
        }
    }
}
public class Main {
    public static void main(String[] args) {
        Test test = new Test();
        Test.Inner inner = test.new Inner();
        inner.test();
    }
}

外部无法直接访问成员内部类的成员变量:

很好理解,内部类Inner都没创建对象,外部无法直接引用它的字段。
在这里插入图片描述

当成员内部类定义了同名的变量,我们通过加上该内部类依附的外部类名称来区别

public class Test {
    String name = "123";
    
    public class Inner {
        String name = "abc";
        public void test() {
            System.out.println("就近?" + name); // abc
            System.out.println("成员内部类:" + this.name); // abc
            System.out.println("外部name:" + Test.this.name); // 123
        }
    }
}

2023.6.23


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

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

相关文章

计算物理专题:实对称矩阵特征值的求解问题

我们需要求出一个实对称阵的全部特征值与特征向量实对称矩阵特征值的求解是计算量子力学的基础之一(算符是厄米的)同时,实对称矩阵的求解也是使用有限差分法解本征方程的重要方法之一 雅克比方法 我知道这个推导过程非常的复杂,所…

计算物理专题:双向打靶法解决本征值问题

计算物理专题:双向打靶法解决本征值问题 双向打靶法全部代码 EigenMethods.py import numpy as np import matplotlib.pyplot as plt from SchrodingerTools import *#type-ode1: ## y(x)f(x)y(x) g(x) ##tips: ##lambda eigen,x:f(eigen,x)def replace_eigen(ei…

365天深度学习训练营-第T3周:天气识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:TensorFlow入门实战|第3周:天气识别🍖 原作者:K同学啊|接辅导、项目定制 我的环境: 语言环境&#xff1a…

Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影

目录 CSS盒子模型 概念 弹性盒模型(flex box) 内容 父元素上的属性 display属性 flex-direction属性 justify-content属性 align-items属性 子元素上的属性 flex 文档流(标准流) 浮动 定义 浮动的原理 清除浮动 …

Java开发 - 负载均衡你了解多少?

前言 前面很多篇博客都有涉及到负载均衡,而负载均衡也并不是某一个框架的专利,从博主接触Java以来,使用的很多框架都自带了负载均衡的特点。今天,我们就来一探究竟,了解下负载均衡是什么,该怎么在项目中使…

Python 函数:理解并使用 return 语句

你好,我是悦创。 函数在 Python 编程中起着至关重要的作用。他们封装了一段代码,并给它一个名字,这样我们可以在程序的任何地方,通过这个名字来调用这段代码。return 是函数的一个重要组成部分,它可以使函数输出一个值…

差分方程转化为Z变换方程

差分方程是描述离散时间系统动态行为的数学工具,而Z变换则是将离散时间信号从时间域转换到复频域的工具。因此,将差分方程转换为Z变换方程可以方便我们在复频域分析离散时间系统的动态行为。 假设我们有一个差分方程: a n x [ n ] a n − 1 x [ n − 1…

rabbitmq第二课-RabbitMQ核心编程模型以及消息应用场景详解

一、回顾RabbitMQ基础概念 二、RabbitMQ基础编程模型 使用RabbitMQ提供的原生客户端API进行交互。这是使用RabbitMQ的基础。 1.1、maven依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version&g…

C语言:使用指针使字符串逆序

题目&#xff1a; 链接&#xff1a;字符逆序__牛客网 来源&#xff1a;牛客网 将一个字符串str的内容颠倒过来&#xff0c;并输出。 输入描述: 输入一个字符串&#xff0c;可以有空格 输出描述: 输出逆序的字符串 示例1 输入 I am a student 输出 tneduts a ma I …

VUE 2X 生命周期 ⑩①

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs初见生面周期分析生命周期生命周期总结总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ ⡖⠒⠒⠒⠤⢄…

《算法设计与分析》学习笔记

目录 算法基本概念 算法的定义 算法复杂度分析 渐近记号 ①渐近上界记号O ②渐近下界记号Ω ③渐近紧确界记号 Θ ④非渐近紧确上界记号o ⑤非渐近紧确下界记号ω 渐进记号极限定义 分治 分治步骤 递归树 ​编辑代入法 主方法 改变变量 二叉树 堆 建堆 堆排…

【promptulate专栏】使用GPT和XMind快速构建思维导图

本文节选自笔者博客&#xff1a;https://www.blog.zeeland.cn/archives/ao302950h3j &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是Zeeland&#xff0c;全栈领域优质创作者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 我的博客&#…

【Java】缓存常见问题及解决方式

文章目录 一、缓存常见问题二、数据不一致2.1、一致性问题2.2、解决方案 三、缓存穿透3.1、问题3.2、解决方案布隆过滤器使用布隆过滤器解决缓存穿透 四、缓存击穿4.1、问题4.2、解决方案 五、缓存雪崩5.1、问题5.2、解决方案 六、大key及热点key6.1、问题6.2、解决方案大key热…

【Leetcode刷题】字符串匹配

本篇文章为LeetCode 字符串匹配模块的刷题笔记&#xff0c;仅供参考。 目录 Leetcode28.找出字符串中第一个匹配项的下标Leetcode214.最短回文串Leetcode459.重复的子字符串Leetcode686.重复叠加字符串匹配Leetcode1023.驼峰式匹配Leetcode1392.最长快乐前缀Leetcode1668.最大重…

【SpringBoot】一、SpringBoot3改变新特性

前言 本文适合具有springboot的基础的同学。 SpringBoot3改变&新特性 一、前置条件二、自动配置包位置变化1、Springboot2.X2、Springboot3.X 三、jakata api迁移1、Springboot2.X2、Springboot3.X3、SpringBoot3使用druid有问题&#xff0c;因为它引用的是旧的包 四 新特…

App Crawler

Google官方出了一款App遍历工具App Crawler。 文档&#xff1a;应用抓取工具 | Android 开发者 | Android Developers App Crawler工具是Android Jetpack的一部分&#xff0c;它可自动的运行你的App&#xff0c;不需要编写或维护任何代码。 通过App Crawler运行App&…

实训四:索引与视图 - 索引(teachingdb数据库)

索引与数据库完整性 第1关&#xff1a;索引任务描述相关知识索引是什么索引的分类索引的创建和删除查询表中索引 编程要求参考代码 第2关&#xff1a;删除索引-练习任务描述相关知识编程要求测试说明参考代码 第1关&#xff1a;索引 任务描述 本关任务&#xff1a;为 student…

【Leetcode60天带刷】day21二叉树——530.二叉搜索树的最小绝对差 ,501.二叉搜索树中的众数 ,236. 二叉树的最近公共祖先

题目&#xff1a; 530. 二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1…

chatgpt赋能python:Python与电影评分

Python与电影评分 近年来&#xff0c;越来越多的人选择通过网络来观看电影。然而&#xff0c;在选择一部电影时&#xff0c;看到的只是电影名称和海报。这时就需要借助电影评分来给自己做出更明智的选择。Python作为一门流行的编程语言&#xff0c;它的应用程序提供了许多有用…

图形视图体系结构(Graphics View)

Graphics View框架结构的主要特点 Graphics View框架结构的主要特点如下。 &#xff08;1&#xff09;在Graphics View框架结构中&#xff0c;系统可以利用Qt绘图系统的反锯齿、OpenGL工具来改善绘图性能。 &#xff08;2&#xff09;Graphics View支持事件传播体系结构&…