类和接口

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

对象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 代码。毕业之后二战考研失利。 回过头来看,也很庆幸这次考研失利,因为这个时候对社会一…

外贸网站显示不安全警告怎么办?消除网站不安全警告超全指南

外贸网站显示不安全警告怎么办?当用户访问你的网站,而您的网站没有部署SSL证书实现HTTPS加密时,网站就会显示不安全警告,这种警告,不仅有可能阻止用户继续浏览网站,影响网站声誉,还有可能影响网…

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…

算法训练营Day30

#Java #回溯 开源学习资料 Feeling and experiences: 加油站:力扣题目链接 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 …

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虚拟机&…

<软考高项备考>《论文专题 - 39采购管理(3) 》

3 过程2-实施采购 3.1 问题 4W1H过程做什么获取卖方应答、选择卖方并授予合同的过程作用:选定合格卖方并签署关于货物或服务交付的法律协议。本过程的最后成果是签订的协议,包括正式合同。为什么做实际进行采购谁来做组织中的职能部门或项目经理什么时…

遭遇.360、.halo勒索病毒:应对.360、.halo勒索病毒的最佳方法

尊敬的读者: 在数字时代的今天,科技的飞速发展为我们的工作和生活带来了便捷,然而,与此同时,网络空间中的威胁也日益猖獗。其中之一的勒索病毒,如.360、.halo病毒,以其高度隐蔽和破坏性成为网络…

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…

一次降低进程IO延迟的性能优化实践——基于block层bfq调度器(下篇)

在上一篇《一次降低进程IO延迟的性能优化实践——基于block层bfq调度器》基础上&#xff0c;本文主要总结实现该IO性能优化过程遇到的 IO卡死、IO重复派发、内核crash等问题。 1&#xff1a;IO重复派发触发了crash 在初版代码编写完成后&#xff0c;启动fio测试cat读取文件&a…

简写英语单词

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

在Linux中进行ZooKeeper集群搭建

在公网IP为x.x.x.x、y.y.y.y和z.z.z.z并装有Alibaba Cloud Linux 3.2104 LTS 64位的服务器上进行zookeeper集群搭建&#xff0c;都安装server-jre-8u202-linux-x64和apache-zookeeper-3.9.1-bin。 环境准备&#xff08;三台服务器都一样&#xff09; 第一步&#xff0c;下载s…

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

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