实训笔记6.12

news2024/9/20 6:28:29

实训笔记6.12

  • 6.12
    • 一、座右铭
    • 二、知识回顾
      • 2.1 面向对象的两大核心概念:类和对象
      • 2.2 面向对象的三大特征
        • 封装性
        • 继承性
        • 多态性-必须在继承之上
        • 抽象性
      • 2.3 面向对象的常用关键字
      • 2.4 Java设计模式中适配器模式
        • 2.4.1 接口适配器
        • 2.4.2 类适配器
        • 2.4.3 对象适配器
    • 三、Java常用类
      • 3.1 Object类
        • 3.1.1 类的概念
        • 3.1.2 Object类提供的方法
      • 3.2 Java中的String类、StringBuffer类、StringBuilder类
        • 3.2.1 String类
        • 3.2.2 String字符串的创建方式
        • 3.2.3 String字符串常用的一些方法
        • 3.3.4 StringBuffer和StringBuilder
    • 四、补充知识点
      • 4.1 Eclipse如何打jar包,如何运行jar包
      • 4.2 JavaDOC文档

6.12

一、座右铭

我的故事你说,我的文字我落,我值几两你定,我去何方我挑。

二、知识回顾

2.1 面向对象的两大核心概念:类和对象

类的声明

访问控制修饰符 [final|abstract] class ClassName extends FatherClass implements FatherInterface... {

类的组成:

1.属性:

访问控制修饰符 [static] [final] 数据类型 属性名 [=属性值];

​ 属性的默认值-属性的默认初始化问题

2.方法:

访问控制修饰符 [static] [final] [abstract] 返回值类型 方法名(形参列表) throws xxxException{

方法体

}

​ 方法重载:两同三不同

3.构造器

访问控制修饰符 类名(形参列表) {

构造体;

}

​ 构造器的作用是用来创建本类的某一个实例对象

​ 构造器的默认值问题

类名 对象名 = new 构造器名(实参列表);

4.代码块

[static] {}

​ 代码块是Java类中唯一的一块可以自动执行的代码块,代码块的调用时机:

​ 本类构造方法的“第一行“—this和super调用的构造器之后,”第二行“—构造体之前。

public Student(){
super();
this.name = “zs”;
}

5.内部类

访问控制修饰符 [static] [fianl] [abstract] class ClassName extends xxx implements xxxx{}

​ 匿名内部类:没有名字的类,用类的父类或者父接口当作类名去定义

}

2.2 面向对象的三大特征

封装性

访问控制修饰符的分类、访问控制修饰符的权限、访问控制修饰符可以声明的位置-可以修饰的内容

protected的权限虽然能被不同包下的子类使用,子类需要通过super关键字来进行调用使用。

继承性

子类和父类的关系:is a,

继承中的方法重写问题:不同类(父子类)当中、方法名和形参列表必须相同,返回值类型必须相同、子类的重写的方法的权限不能、子类的返回值类型必须是父类方法的返回值类型或者父类返回值的子类、子类方法的访问控制修饰符的权限必须大于等于父类方法的访问控制修饰符权限

子类的构造器的调用问题。

Java中超类问题

多态性-必须在继承之上

编译时类型和运行时类型、只有方法的多态、必须进行方法重写、向上转型和向下转型

抽象性

抽象类、抽象方法

抽象类有两种子类:抽象子类,非抽象子类

接口:has a

接口有三种子类:

  1. 子接口:继承

  2. 抽象子类:实现

  3. 非抽象子类:实现

2.3 面向对象的常用关键字

  1. static:属性、方法、代码块、内部类
  2. final:类别、属性、方法
  3. this 和 super:创建一个Java对象之后,堆区中每一个对象会多出两个属性
  4. package和import
  5. instanceof 判断某一个对象的运行时类是不是某个Java类的类型或者子类

对象名 instanceof 类名

  1. abstract

  2. enum

2.4 Java设计模式中适配器模式

适配器就是将原先无法直接使用的某个接口或者类通过适配器模式转换为可以使用的接口或者类。适配器模式的好处就是可以再不改变原有代码的基础之上也可以实现相关的功能。

适配器模式分为:类适配器、对象适配器、接口适配器。

2.4.1 接口适配器

接口中有很多的抽象方法,但是再使用接口的时候我们只关注其中某一个方法,其他方法我们不需要,但是因为接口的特性,如果我们要使用这个接口,必须重写接口中所有方法。

创建一个接口的适配器,接口的适配器是一个Java类,适配器需要将接口的所有抽象方法给重写了,但是重写之后只做空实现,后期如果使用接口,只需要继承适配器类。

Java中GUI中有很多接口适配器,MouseAdpter

2.4.2 类适配器

有一个电压220V实现手机充电的效果电源适配器将220V的电压转换成为可以充电的东西。

让适配器类继承被适配器

package com.sxuek.designmodel;

public class U {
	public void out() {
		System.out.println("220V");
	}
}
interface Chongdian{
	void chongdian();
}
class ChrageAapter extends U implements Chongdian{
	@Override
	public void chongdian(){
			out();
			//xxxxxxx
	}
}

2.4.3 对象适配器

让被适配的类称为适配器的一个属性。

三、Java常用类

3.1 Object类

3.1.1 类的概念

Object类是Java中超类,Java中的任何一个类最终都会直接或者间接的继承自Object类.

Object类当中定义了Java中所有类必须具有的公有方法。

3.1.2 Object类提供的方法

方法名返回值类型说明
getClass()Class获取某个对象的运行时类
toString()String打印对象时,对象会默认调用toString方法,返回这个返回的执行结果。
默认情况下Object类提供的方法返回的是对象的地址。这个方法我们一般是需要重写的。
equals(Object o)boolean比较两个引用数据类型的值是否相等的。
默认情况下,Object类提供的这个方法底层默认实现也是==
如果你定义的某个类你想比较两个对象的属性值相等
那么需要重写equals方法,重写分为以下几步:
如下图
hashCode()intJava中equals方法确实可以比较对象的值相等关系,但是equals再某些情况下有点繁琐
所有在Java当中某些情况下
判断两个对象的值相等的时候
可以使用hashCode来完成—Set集合、Map集合当中hashCode方法
返回的是一个int类型的值
值默认情况下返回的是对象在堆区的地址值
如果两个对象通过equals方法返回的是true
那么hashCode方法返回的值必须一致
所以如果我们要重写equals方法时必须重写hashCode方法
保证两者返回的效果是一致的
一般情况下 hashCode重写时,只需要把对象中属性值转为数字即可
【注意】如果两个对象通过equals方法返回true
那么他们的hashCode方法返回的值一定是一致的
如果两个对象的hashCode方法的值是一样的,他们的equals不一定为true

代码示例:

package com.sxuek.object;
import java.util.Objects;
public class Student {
	private String name;
	private int age;
	private String sex;
	@Override
	public int hashCode() {
		return Objects.hash(age, name, sex);
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		return age == other.age && Objects.equals(name, other.name) && Objects.equals(sex, other.sex);
	}
		
//	@Override
//	public boolean equals(Object obj) {
//		if(obj == null) {
//			return false;
//		}
//		
//		if(this == obj) {
//			return true;
//		}
//		
//		if(obj instanceof Student) {
//			Student student = (Student)obj;
//			if(this.name.equals(student.name) && this.age == student.age && this.sex.equals(student.sex)) {
//				return true;
//			}else {
//				return false;
//			}
//		}else {
//			return false;
//		}
//	}
//	
//	@Override
//	public int hashCode() {
//		return Objects.hash(name,age,sex);
//	}
}

流程图:

  1. 矩形楠圆-开始或者结束

  2. 矩形-正常的流程

  3. 菱形-分支流程

  4. 平行四边形-输入和输出

在这里插入图片描述

3.2 Java中的String类、StringBuffer类、StringBuilder类

3.2.1 String类

String类是Java中的一个最终类,被final修饰的一个类,表示一个字符串序列的。

String创建的字符串是不能更改的,字符串的值一旦被创建出来,在内存中是唯一的,如果给字符串拼接或者是修改了值,也只是在内存中开辟了一块新的空间赋予新的数据,而原有的字符串不受任何的影响。

3.2.2 String字符串的创建方式

  1. 直接创建字符串

String s = "zs";

  1. 使用String类中的构造器进行创建—构造器创建的字符串是在堆区,然后再指向字符串常量池中。

String s = new String("zs");

String s = new String(char[]);

3.2.3 String字符串常用的一些方法

序号方法名返回值类型说明
1length()int获取字符串的长度
2isEmpty()boolean判断字符串是否为空字符串
注意判断引用数据类型是不是nu11值使用==判断
3toCharArray()char[]将字符串转换为字符数组
4charAt(int index)char获取字符串的某个索引位置的字符
5getBytes(String charsetName)byte[]将字符串以指定的编码集转换为字节数组
6toUpperCase()String将所有字符全部大写
7toLowerCase()String将所有字符全部小写
8trim()String去除字符串两端的空格
9split(String splitstring)String[]以指定的分隔符将字符串切割得到一个字符数组
10substring(int,int)String对字符串进行截取返回一个新的字符串
如果传递两个值,第一个代表起始索引,
第二个值代表终止索引,
左闭右开
11equals(Object s)boolean判断两个字符串值相等
12equalsIgnoreCase
(String s)
boolean判断两个字符串是否相等,略大小写
13startWith(String s)boolean判断字符串是否是以指定的字符串作开头的
14intern()String返回当前字符串在堆区字符串常量池中的值
字符串中有一个规则:
一旦字符串在进行拼接的时候,
拼接两端只要出现一个变量,
字符串拼接的结果指向的地址都是堆区的地址,
而非字符串常量池中的地址。

3.3.4 StringBuffer和StringBuilder

String类底层是一个不可变的字符序列,每一次对字符串的值进行操作修改都会给我们返回一个新的字符串对象,原有的字符串不受任何的影响的。为了避免堆区的浪费,Java提供了两个可变的字符序列。

StringBuffer和StringBuilder底层都维护了一个可变的字符数组,每一次对字符串的值进行更改,都会对原有的字符数组进行更改。

StringBuffer和StringBuilder只能通过构造器进行创建。

声明语法说明
new xxxx()底层创建一个长度为16的字符数组
new xxxx(int capacity)底层创建一个长度为capacity的字符数组
new xxx(String str)底层会创建一个str.length+16的字符数组

StringBuffer和StringBuilder添加数据需要通过append方法来追加字符串数据,而且两者的动态扩容也是在append方法中声明的

代码示例:

package com.sxuek.string;
public class Demo02 {
	public static void main(String[] args) {
		/**
		 * 创建一个长度为16的字符数组
		 */
//		StringBuffer sb = new StringBuffer();
		/**
		 * StringBuffer正常底层扩容的时候,扩容原先长度的2倍+2
		 * 如果扩容之后还放不下字符串,那么扩容称为所需要的长度
		 * 如果所需要的长度<0 或者是所需要的长度大于了MAX_ARRAY_SIZE=Integer.MAX_VALUE-8,那么执行hugeCapacity方法确定数组的长度
		 * StringBuffer和StringBuilder最多可以存放Integer.MAX_VALUE个字符。
		 */
//		for (long i = 0; i<= Math.pow(2, 32);i++) {
//			sb.append("a");
//		}
		
//		StringBuilder sb1 = new StringBuilder();
//		sb1.append("a");
		test();
		
	}
	
	static void test() {
		test();
	}
}

四、补充知识点

4.1 Eclipse如何打jar包,如何运行jar包

Java当中编写的Java代码,Java类、方法、接口这些东西就是项目中相关内容,到时候我们需要把代码提供给甲方、或者是我们需要运行我们编写的代码,我们总不能给甲方安装一个Eclipse开发环境,然后在开发环境中运行。我们一般是将编写好的Java代码
打包称为一个jar包(是Java中一种特殊的压缩包,压缩包中存放的是Java中所有class二进制字节码文件以及项目中一些静态资源),把jar包给了甲方或者我们直接运行jar包就ok了。

打包方式:项目名-→export→java-→jar file

运行方式:在命令行执行命令运行

命令说明
java -jar xxx.jar包的路径需要我们在打jar包时指定main-class文件
java -cp xxx.jar包的路径全限定类名

4.2 JavaDOC文档

在编写项目的时候,我们自己定义很多的java类、方法、接口等等,编写的代码在很多情况下可不是我们自己看的,我们需要给甲方、或者是后来者查看,但是如果直接给他们看源代码的话,有点复杂了,源代码里面的东西说白了,挺乱的。因此Java给我们提供了一种注释语法:文档注释/***/,可以通过文档注释生成项目中的API文档,这样的话用户就不要看源码中注释了,只需要看API文档,就可以掌握项目中所有代码的含义。

Java文档注释中可以加一些注解去详细描述Java类和方法:

注解说明
@author 作者作者
@since 版本从哪个版本开始有的
@see 全限定类名这个类和see中的类是有关系的
@param 参数名 参数注释方法中形参的含义和注释
@return 注释方法的返回值的注释

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

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

相关文章

Linux基础知识3

Linux基础知识 适合有Linux基础的人群进行复习。 禁止转载&#xff01; 用户与用户组管理 Linux系统下的3类用户和功能&#xff1b; 答&#xff1a; root用户&#xff08;或称根用户、超级用户&#xff09;&#xff1a;Linux的内置用户&#xff0c;权限最高&#xff0c;具有…

wps安装提示nsis error

1.安装时弹出「NSIS error」错误框&#xff0c;无法安装。 此问题为一般为安装包损坏导致&#xff0c;可重新下载安装包尝试安装。 我遇到的提示也是这个。文件损坏。但是换了绿色U盘&#xff08;格式是FAT32&#xff09;复制过去就能安装。 之前用白色U盘&#xff08;格式是N…

一学就会-----链表的回文结构

文章目录 题目描述思路代码示例 题目描述 对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构。 给定一个链表的头指针A&#xff0c;请返回一个bool值&#xff0c;代表其是否为回文结构。保证链表长度小于等于90…

1.1 搭建Scala开发环境

一、Windows上安装Scala &#xff08;一&#xff09;到Scala官网下载Scala Scala2.13.10下载网址&#xff1a;https://www.scala-lang.org/download/2.13.10.html 单击【scala-2.13.10.msi】超链接&#xff0c;将scala安装程序下载到本地 &#xff08;二&#xff09;安装…

Atcoder Beginner Contest 305

A - Water Station AC代码&#xff1a; #include<iostream> #include<algorithm> #include<cstring> using namespace std; int main() {int n;cin>>n;int a,b;for(int in;;i){if(i%50){ai;break;}}for(int in;;i--){if(i%50){bi;break;}}if(a-n<…

【Linux学习】多线程——线程池 | 单例模式

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 线程池 | 单例模式 一、 线程池1.1 Thread.hpp1.2 ThreadPool.hpp1.3 main.cpp1.4 RAII方式加锁 …

苹果的Safari私人浏览现在会自动删除URL中的跟踪参数

苹果将对Safari私人浏览器进行重大更新&#xff0c;为用户提供更好的保护&#xff0c;防止他们在浏览网页时被第三方跟踪。 苹果公司表示:“先进的追踪和指纹保护功能可以进一步防止网站利用最新技术追踪或识别用户的设备。” “隐私浏览现在在不使用时锁定&#xff0c;允许用…

百收网SEO问卷调查赚钱项目介绍

百收网SEO问卷调查赚钱项目介绍 大家好&#xff0c;我是百收网SEO 给面子的 也可以叫狂潮哥 哈哈哈哈 认识我比较久的朋友都知道我们做问卷调查项目3年多了这个生意基本没有在朋友圈发过 原因是靠我们自己做 单人一个月就可以产值1到4W 根本没想去收学员 直到看到同行在收学…

基于postman进行接口测试实战

一&#xff1a;接口测试前准备 接口测试是基于协议的功能黑盒测试&#xff0c;在进行接口测试之前&#xff0c;我们要了解接口的信息&#xff0c;然后才知道怎么来测试一个接口&#xff0c;如何完整的校验接口的响应值。 那么问题来了&#xff0c;那接口信息从哪里获取呢&…

加速数字化转型,通过零代码ETL工具实现吉客云数据自动化同步

一、吉客云系统介绍 吉客云是一家SaaS企业服务提供商&#xff0c;主要提供企业级应用服务。吉客云的服务范围涵盖了企业级推广、企业级智能客服、企业级销售管理、企业级客户关系管理、企业级电子商务等方面的服务&#xff0c;并且提供了基于AI技术的解决方案。其目标是通过数…

Maven教程--下(包括手动实现)

Maven教程–下&#xff08;包括手动实现&#xff09; 前言 注意本篇是需要一定的maven基础的 如果没有请移步Maven教程–上 手动创建Maven 项目- 理解Maven 底层机制 需求说明/图解 用手工的方式&#xff0c;创建maven 项目&#xff0c; 深刻理解Maven 工作机制 完成功能…

【Map集合的获取功能】

Map集合的获取功能 V get(Object Key)&#xff1a;根据键获取值 package com.gather.map; //Map集合的获取功能 import java.util.HashMap; import java.util.Map; public class MapDemo03 {public static void main(String[] args) {Map<String,String> mapnew HashMap&…

一步步搭建基于 ts + express + prisma + mongodb + zod 后端服务

环境&#xff1a; windows11、node 18.16.0 、pnpm 1、在合适位置&#xff0c;代开 vscode , 终端执行 mkdir miaooo-backend && cd miaooo-backend && npm init -y 。 创建一个名为一个 miaooo-backend 的项目&#xff0c;并且进入项目 执行 npm 默认初始化。…

【SpringCloud——Seata分布式事务管理框架】

一、分布式事务存在的问题 在分布式系统下&#xff0c;一个业务跨越多个服务或数据源&#xff0c;每个服务都是一个分支事务&#xff0c;要保证所有分支事务最终状态一致&#xff0c;这样的事务就是分布式事务。 分布式事务和传统形式的事务区别有什么&#xff1f;众所周知&a…

【GIS教程】使用高程数据在UE5中创建真实山脉模型

在数字孪生项目中&#xff0c;我们经常需要使用真实的山脉地形作为城市模型展示的基础。然而&#xff0c;UE5的默认地形系统过于复杂&#xff0c;无法像3D模型那样进行实时修改。因此&#xff0c;本教程将指导您如何将高程山脉作为模型导入到UE5引擎中&#xff0c;而不是使用UE…

【微服务】SpringBoot 插件化开发模式详细总结

目录 一、前言 1.1 使用插件的好处 1.1.1 模块解耦 1.1.2 提升扩展性和开放性 1.1.3 方便第三方接入 1.2 插件化常用实现思路 二、Java常用插件实现方案 2.1 serviceloader方式 2.1.1 java spi 2.1.2 java spi 简单案例 2.2 自定义配置约定方式 2.2.1 添加配置文件…

36.SpringBoot实用篇—运维

目录 一、实用篇—运维。 &#xff08;1&#xff09;程序打包与运行&#xff08;Windows版&#xff09;。 &#xff08;2&#xff09;spring-boot-maven-plugin插件作用。 &#xff08;3&#xff09;程序打包与运行&#xff08;Linux版&#xff09;。 &#xff08;4&#…

syntax error: unexpected end of file

运行工程报错误&#xff1a;liporepo.sh: line 2: command not found liporepo.sh: line 19: syntax error: unexpected end of file Command PhaseScriptExecution failed with a nonzero exit code 由于.sh文件的格式为dos格式。而linux只能执行格式为unix格式的脚本。因为在…

【svopro】代码梳理

SVO2系列之深度滤波DepthFiltersvo_noteSVO&#xff08;SVO: fast semi-direct monocular visual odometry&#xff09;SVO 半直接视觉里程计【DepthFilter】深度滤波器【svopro】代码梳理 svo processFrame代码梳理 1.0 processFrame主流程1.1 sparseImageAlignment1.1.1 核心…

100天精通Golang(基础入门篇)——第6天: 深入解析Go语言中的运算符

&#x1f337; 博主 libin9iOak带您 Go to Golang Language.✨ &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &#x1f30a; 《I…