类和接口

内容大部分来源于学习笔记,随手记录笔记内容以及个人笔记

对象Object

java是面向对象的语言,一个对象包含状态和行为

可以这样理解,我眼前的石头,手里水杯,这些具体到某一个个体,这就是对象;像手机,电脑这种,只能定义到一个范围,不能具体到是哪一个手机或电脑,就不是对象

在java中,可以通过对象来使用对象所在类的方法,或拿取对象自身的属性(值),java程序就是如此实现的

List a = new List();//创建对象,此时a就是对象
a.name;//获取这个对象的name的值
a.name = "a";//修改这个值
a.run();//调用这个方法,而且是a调用的

一个java文件可以有多个类/接口,但只能有一个public类/接口供外部访问

public修饰的类名和文件名相同,且只有一个

类Class

对象的类型,换种说法。我手上的华为Mate 60的类型是手机。类中包含变量和方法和构造方法(方法也叫函数)

public class dog{//变量,也叫属性String name;int age;public dog(){}//构造方法(函数)//方法void eat(){System.out.println("吃饭");}//块代码,初始化块{int a = 1;}//静态代码块static{int b = 0;}public class aa{private int c;}
}
  • 变量 String name; String前省略了访问权限修饰符(就是限制使用范围的)

    • 访问权限修饰符 public:允许所有访问

      protected:只允许本类或同一个包下使用 【default】:这个就是不写,默认的,表示允许本类和同个包下访问 private:只允许本类中使用

  • 方法 调用是执行的代码

  • 初始化块\代码块 创建对象前自动执行的代码 优先于构造函数

  • 内部类 定义在类中的类

  • 构造方法(函数) 创建对象时自动执行,没有构造函数java会自己生成一个无参的构造函数

final

  • 修饰属性(变量):只能赋值一次不可更改,此时也叫常亮

  • 修饰类:不可被继承

  • 修饰方法:不可重写,有中说法是private修饰的方法隐式地认为被final修饰过,其实private的方法只能在本类中使用,别的都不能调用

静态声明

static

  • 变量: 修饰变量,该变量由该类的所有对象共享,不需要对象也可以调用(直接类名调)。 同时不管何种方式修改这个变量,修改后再调用就是修改后的值,简单的说就是,普通的变量,通过对象A调用普通的变量,这个变量就已经贴上A的标签了,不会对这个变量,它的任何状态都是A的。别的对象B使用这个变量名调用时,就是一个新的,独属于B的变量

    有一个学生的类
    class 学生{现在有两个变量String 橡皮;static String 黑板;
    }
    学生A.橡皮  代表着学生A的橡皮
    学生B.橡皮  代表着学生B的橡皮
    学生A.橡皮 = 大; 学生A的橡皮是大的
    学生B.橡皮  在调用的时候就不会受到上面的影响
    这就是普遍变量
    ​
    学生A.黑板 = 龙的传入;  代表着在黑板上写着龙的传人
    学生B.黑板              代表学生B调用黑板的属性,发现黑板上写着龙的传人
    这说明静态变量不是独属于对象的,是该类对象共享的
  • 方法: 允许直接使用,就是可以通过类名调用,不用创建对象就可以调用(这一点很关键,有些for循环之类的要调用方法钱会一直创建对象,对性能有影响)

  • 代码块(初始化块): 就是用{}包起来的代码,会在创建第一个对象前执行(先执行静态代码块,后执行代码块内容),在一些业务逻辑有大用

  • 内部类:

    外部类对象共享,只能访问外部类的静态成员。

接口Interface

和类相似,带把class关键字换成了interface,类有具体的实现,而接口没有具体的实现

接口中的方法默认被static修饰,也就是说可以直接通过接口命名调方法

public class A{public void go(){方法的具体实现}
}
​
public interface B{public void run();
}

JDK 1.8 以前,接口中抽象方法必须且默认为 public,不允许实现任何方法。

JDK 1.8 以后,接口中抽象方法可以且默认为 default,且允许实现 static 和 default 方法。

JDK 1.9 以后,接口中抽象方法可以是 private。

不过日常中多时使用public

抽象声明

  • abstract方法:只有声明,没有方法的具体实现,和接口的写法差不多

  • abstract类:修饰类后,这个类就是抽象类了,不能实例化对象,必须其他类继承后才能通过子类构造对象

public abstract class Vehicle {// 声明变量String brand;// 声明并实现方法public void go(String loc){System.out.print("go to" + loc);}//声明方法但不实现public void run();
}

接口和抽象类的区别

  1. 接口不能实现普通方法,抽象类可以实现具体的方法、也可以不实现。

  2. 接口只能定义静态常量,抽象类可以定义非静态变量。

  3. 一个实体类可以实现多个接口,但只能继承一个抽象类。

更新声明

  • default方法:接口中用default修饰方法可以写实现

    • 可以直接在接口内实现,供没有定义的旧类直接使用。若类中实现了该方法则覆盖。

    • 如果类实现了多个接口且拥有同名 default 方法:

      • 两个接口若存在继承关系,调用时优先使用子类方法。

      • 否则,必须重写子类 default 方法,通过 super 关键字明确实现哪个接口

    public interface IntefercaeDemo {
    ​//具体方法default void showDefault(){System.out.println("this is showDefault method");}static void showStatic(){System.out.println("this is showStatic method");}//没有实现的抽象方法void sayHi();
    }

包Package

每一个文件,在最前面都会有自身的包的位置

同时该文件中如果用到其他位置的类或接口什么的,页会在文件首部记录这个文件的存储位置

这个位置是相对位置,都是从项目结构下的src.main.java开始说明

package com.qf.controller   //第一条一般都是该文件的位置,不包括文件名
​
package com.qf.service.UserService  //从这里开始就是导入的文件位置了,而且直接指向文件,UserService的位置
​
public class UserController{public void get(){//调用UserService的getUSer方法User user = UserService.getUser();}
}

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

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

相关文章

非科班,培训出身,怎么进大厂?

今天分享一下我是怎么进大厂的经历,希望能给大家带来一点点启发! 阿七毕业于上海一所大学的管理学院,在读期间没写过一行 Java 代码。毕业之后二战考研失利。 回过头来看,也很庆幸这次考研失利,因为这个时候对社会一…

OpenOCD简介和下载安装(Ubuntu)

文章目录 OpenOCD简介OpenOCD软件模块OpenOCD源码下载OpenOCD安装 OpenOCD简介 OpenOCD(Open On-Chip Debugger)开放式片上调试器 OpenOCD官网 https://openocd.org/,进入官网点击 About 可以看到OpenOCD最初的设计是由国外一个叫Dominic Ra…

红队打靶练习:SAR: 1

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 小结 目录探测 1、gobuster 2、dirsearch WEB CMS 1、cms漏洞探索 2、RCE漏洞利用 提权 get user.txt 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface:…

写在2024年初,软件测试面试笔记总结与分享

大家好,最近有不少小伙伴在后台留言,得准备年后面试了,又不知道从何下手!为了帮大家节约时间,特意准备了一份面试相关的资料,内容非常的全面,真的可以好好补一补,希望大家在都能拿到…

LanceDB:在对抗数据复杂性战役中,您可信赖的坐骑

LanceDB 建立在 Lance(一种开源列式数据格式)之上,具有一些有趣的功能,使其对 AI/ML 具有吸引力。例如,LanceDB 支持显式和隐式矢量化,能够处理各种数据类型。LanceDB 与 PyTorch 和 TensorFlow 等领先的 M…

24届春招实习必备技能(一)之MyBatis Plus入门实践详解

MyBatis Plus入门实践详解 一、什么是MyBatis Plus? MyBatis Plus简称MP,是mybatis的增强工具,旨在增强,不做改变。MyBatis Plus内置了内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作&#xff0…

【LMM 003】生物医学领域的垂直类大型多模态模型 LLaVA-Med

论文标题:LLaVA-Med: Training a Large Language-and-Vision Assistant for Biomedicine in One Day 论文作者:Chunyuan Li∗, Cliff Wong∗, Sheng Zhang∗, Naoto Usuyama, Haotian Liu, Jianwei Yang Tristan Naumann, Hoifung Poon, Jianfeng Gao 作…

LeetCode二叉树路径和专题:最大路径和与路径总和计数的策略

目录 437. 路径总和 III 深度优先遍历 前缀和优化 124. 二叉树中的最大路径和 437. 路径总和 III 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始&#xf…

简单FTP客户端软件开发——VMware安装Linux虚拟机(命令行版)

VMware安装包和Linux系统镜像: 链接:https://pan.baidu.com/s/1UwF4DT8hNXp_cV0NpSfTww?pwdxnoh 提取码:xnoh 这个学期做计网课程设计【简单FTP客户端软件开发】需要在Linux上配置 ftp服务器,故此用VMware安装了Linux虚拟机&…

burpsuite模块介绍之compare

导语 Burp Comparer是Burp Suite中的一个工具,主要提供一个可视化的差异比对功能,可以用于分析比较两次数据之间的区别。它的应用场景包括但不限于: 枚举用户名过程中,对比分析登陆成功和失败时,服务器端反馈结果的区…

编程式导航传参

(通过js代码实现跳转) 按照path进行跳转 第一步&#xff1a; 在app.vue中(前提是规则已经配置好) <template><div id"app">App组件<button clicklogin>跳转</button><!--路由出口-将来匹配的组件渲染地方--><router-view>&l…

【嵌入式学习笔记-01】什么是UC,操作系统历史介绍,计算机系统分层,环境变量(PATH),错误

【嵌入式学习笔记】什么是UC&#xff0c;操作系统历史介绍&#xff0c;计算机系统分层&#xff0c;环境变量&#xff08;PATH&#xff09;&#xff0c;错误 文章目录 什么是UC?计算机系统分层什么是操作系统&#xff1f; 环境变量什么是环境变量&#xff1f;环境变量的添加&am…

简写英语单词

题目&#xff1a; 思路&#xff1a; 这段代码的主要思路是读取一个字符串&#xff0c;然后将其中每个单词的首字母大写输出。具体来说&#xff0c;程序首先使用 fgets 函数读取一个字符串&#xff0c;然后遍历该字符串中的每个字符。当程序遇到一个字母时&#xff0c;如果此时…

基于图论的图像分割 python + PyQt5

数据结构大作业&#xff0c;基于图论中的最小生成树的图像分割。一个很古老的算法&#xff0c;精度远远不如深度学习算法&#xff0c;但是对于代码能力是一个很好的锻炼。 课设要求&#xff1a; &#xff08; 1 &#xff09;输入&#xff1a;图像&#xff08;例如教室场景图&a…

47、激活函数 - sigmoid

今天在看一个比较常见的激活函数,叫作 sigmoid 激活函数,它的数学表达式为: 其中,x 为输入,画出图来看更直观一些。 Sigmoid 函数的图像看起来像一个 S 形曲线,我们先分析一下这个函数的特点。 Sigmoid 函数的输出范围在 (0, 1) 之间,并且不等于0或1。 Sigmoid 很明显是…

Codeforces Round 900 (Div. 3)(A-F)

比赛链接 : Dashboard - Codeforces Round 900 (Div. 3) - Codeforces A. How Much Does Daytona Cost? 题面 : 思路 : 在序列中只要找到k&#xff0c;就返回true ; 代码 : #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)…

spring 之 事务

1、JdbcTemplate Spring 框架对 JDBC 进行封装&#xff0c;使用 JdbcTemplate 方便实现对数据库操作 1.1 准备工作 ①搭建子模块 搭建子模块&#xff1a;spring-jdbc-tx ②加入依赖 <dependencies><!--spring jdbc Spring 持久化层支持jar包--><dependency&…

性能优化(CPU优化技术)-ARM Neon详细介绍

本文主要介绍ARM Neon技术&#xff0c;包括SIMD技术、SIMT、ARM Neon的指令、寄存器、意图为读者提供对ARM Neon的一个整体理解。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09…

2024年总结的前端学习路线分享(学习导读)

勤学如春起之苗&#xff0c;不见其增&#xff0c;日有所长 。辍学如磨刀之石&#xff0c;不见其损&#xff0c;日有所亏。 在写上一篇 2023年前端学习路线 的时候&#xff0c;时间还在2023年初停留&#xff0c;而如今不知不觉时间已经悄然来到了2024年&#xff0c;回顾往昔岁月…

三、Mysql安全性操作[用户创建、权限分配]

一、用户 1.创建用户 CREATE USER test1localhost identified BY test1;2.删除用户 DROP USER test2localhost;二、权限分配 1.查询用户权限 SHOW GRANTS FOR test1localhost;2.分配权限 # 分配用户所有权限在for_end_test库的test1表 GRANT ALL PRIVILEGES ON for_end_t…