实训笔记-6.2

news2024/12/23 23:29:51

实训笔记

  • 6.2
    • 一、座右铭
    • 二、新学Java知识
      • 1、算法
        • 1.1 常见的排序算法
          • 1.1.1冒泡排序(Bubble Sort)
            • 1.1.1.1 思想
            • 1.1.1.2 代码
            • 1.1.1.3 算法空间复杂度和时间复杂度的计算
          • 1.1.2线性查找算法
            • 1.1.2.1 思想
            • 1.1.2.2 代码
            • 1.1.2.3 算法空间复杂度和时间复杂度的计算
          • 1.1.3二分查找算法
            • 1.1.3.1 思想
            • 1.1.3.2 代码
            • 1.1.3.3 算法空间复杂度和时间复杂度的计算
      • 2、面向对象思想
        • 2.1 概述
        • 2.2 举例
        • 2.3 区别
        • 2.4 特点
      • 3、面向对象的两大核心概念:类和对象
        • 3.1 类的声明语法
        • 3.2 类中属性的声明和使用
          • 3.2.1 属性的完整声明语法:
          • 3.2.2 属性的调用语法:
          • 3.2.3 代码示例
        • 3.3 类中的方法声明与使用
          • 3.3.1 定义
          • 3.3.2 方法的完整的声明语法
          • 3.3.3 代码
        • 3.3.4 返回值类型

6.2

一、座右铭

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

二、新学Java知识

1、算法

1.1 常见的排序算法

1.1.1冒泡排序(Bubble Sort)
1.1.1.1 思想

冒泡排序(Bubble Sort)是一种基础的排序算法,它的思想是对待排序序列从前向后,依次比较相邻元素的大小,若前面元素大于后面元素,则交换这两个元素,这样一趟过去后,最大的元素就会被“冒泡”到序列的末尾。然后再对剩下的元素进行相同的操作,直到整个序列有序。

在这里插入图片描述

1.1.1.2 代码
package study;
/**
 * int[] array = new int[] {20,12,32,15,18,25}
 * @author lenovo
 * 20,12,32,15,18,25
 * 第一次排序--选出第一个最大值     5次
 * 	1、12 20 32 15 18 25
 * 	2、12 20 32 15 18 25
 * 	3、12 20 15 32 18 25
 * 	4、12 20 15 18 32 25
 * 	5、12 20 15 18 25 32
 * 第二次排序--选出第二个最大值   4次
 * 	1、12 20 15 18 25 32
 * 	2、12 15 20 18 25 32
 * 	3、12 15 18 20 25 32
 * 	4、12 15 18 20 25 32
 *  第三次排序--选出第三个最大值 3次      第四次  2次    第五次   1次
 *  1、12 15 18 20 25 32
 *	 2、12 15 18 20 25 32
 *	 3、12 15 18 20 25 32
 *  
 */
public class Demo01 {
	public static void main(String[] args) {
		int[] array = new int[] {20,12,32,15,18,25};
		for (int i = 0; i < array.length-1; i++) {
			for (int j = 0; j < array.length-1-i; j++) {
				if (array[j] > array[j+1]) {
					int temp  = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i]+"\t");
		}
	}
}
//排序结果
12	15	18	20	25	32
1.1.1.3 算法空间复杂度和时间复杂度的计算
  • 时间复杂度O(n^2)

    冒泡排序算法的时间复杂度主要由内外两层循环的嵌套决定,外层循环执行n-1次,内层循环执行n-i次,因此总共的基本操作次数为 (n-1) * (n-1),即n2-2n+1次,所以算法的时间复杂度为O(n2)。

  • 空间复杂度O(1)

    在冒泡排序中,只需要使用几个基本变量来辅助排序,空间复杂度为O(1)。

1.1.2线性查找算法
1.1.2.1 思想

线性查找算法,也称为顺序查找算法,是最简单的一种查找算法。它的基本思想是遍历待查找的数据集合,从头至尾依次对每个元素进行比较,直到找到目标元素为止。

1.1.2.2 代码
package study;
/**
 * 直接查找
 * 二分查找    折半查找
 * @author lenovo
 *
 */
public class Demo02 {
	public static void main(String[] args) {
		int[] array = new int[] {1,2,3,4,5,6,7,8,9};
		int num = 5;
		boolean flag = false;
		for (int i = 0; i < array.length; i++) {
			if (num == array[i]) {
				//System.out.println("找到了该元素,索引为"+i);
				flag = true;
				break;
			}
		}
		if (flag) {
			System.out.println("找到了");
		}else {
			System.out.println("没找到");
		}
	}
}
1.1.2.3 算法空间复杂度和时间复杂度的计算

由于该算法需要依次遍历整个数据集合,所以其时间复杂度为O(n),其中n为数据集合中元素数量。

1.1.3二分查找算法
1.1.3.1 思想

二分查找算法,也称为折半查找算法,是常见的一种查找算法。对于有序数据集合,可以使用二分查找算法以O(logn)的时间复杂度进行查找。

二分查找的基本思路是:将数据集合按照一定的方式进行分割,从而缩小查找的范围。具体的实现方式是:对于有序的数据集合,设定一个目标元素target以及两个指针left和right,其中left指向数据集合的第一个元素,right指向数据集合的最后一个元素。每次将中间位置mid更新为(left+right)/2的值,然后将目标元素和mid位置的元素进行比较。如果目标元素等于mid位置的元素,则返回mid;如果目标元素小于mid位置的元素,则更新right指针为mid-1;如果目标元素大于mid位置的元素,则更新left指针为mid+1。然后再次按照上述方式进行查找,直到找到目标元素或者确定目标元素不存在为止。

1.1.3.2 代码
package study;

import javafx.scene.control.TableRow;

/**
 * 折半查找:必须保证数组有序
 * 折半查找和核心思想就是每一次查找减少一半的元素比较
 * 三个变量:
 * 1、start
 * 2、end
 * 3、middle = (start+end)/2
 * 
 *  循环的终止条件  end < start
 * @author lenovo
 *
 */
public class Demo03 {
	public static void main(String[] args) {
		int[] array = new int[] {1,2,3,4,5,6,7,8,9};
		int num = 95;
		int start = 0;
		int end = array.length-1;
		boolean flag = false; 
		while (end >= start) {
			int middle = (end+start)/2;
			if (num == array [middle]) {
				//System.out.println("找到了");
				flag = true;
				break;
			}else if (num < array[middle]) {
				end = middle -1;
			}else {
				start = middle +1;
			}
		}
		
		if (flag) {
			System.out.println("找到了");
		}else {
			System.out.println("没找到");
		}
	}
}
1.1.3.3 算法空间复杂度和时间复杂度的计算

该算法的时间复杂度为O(logn),其中n为数据集合中元素数量,空间复杂度为O(1)。其优点是查找效率高。

2、面向对象思想

2.1 概述

Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。

2.2 举例

  • **面向过程:**把衣服脱下来–>找一个盆–>放点洗衣粉–>加点水–>浸泡10分钟–>揉一揉–>清洗衣服–>拧干–>晾起来
  • **面向对象:**把衣服脱下来–>打开全自动洗衣机–>扔衣服–>按钮–>晾起来

2.3 区别

  • **面向过程:**强调步骤
  • **面向对象:**强调对象,这里的对象就是洗衣机。

2.4 特点

面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。面向对象的语言中,包含了三大基本特征,即封装、继承和多态。

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

类是一类事务的模板,是一个抽象的概念;对象是一类事务真实存在的个体实列。

Java程序的核心就是使用类来组织代码,然后通过类的对象来调用类中声明的属性和方法。

3.1 类的声明语法

访问控制修饰符 class 类名(大驼峰命名法){
					类体-类的组成成分:
                        属性:声明类的特征的
                        方法:声明类的行为动作的
                        构造器:创建这个类的实例对象,只有有了实例对象我们才能去调用属性和方法
                        代码块:一段可以自己执行的代码区域,一般是在构造器之前执行的
                        内部类:类中声明另一个类,主要的目的是为了对当前类的一些内容做拓展的
}

3.2 类中属性的声明和使用

属性又名成员变量,属性就是一个变量,只不过是直接声明在类中的,因此我们叫做成员变量。成员变量一般是在堆区或者元数据区开启内存空间进行保存。

3.2.1 属性的完整声明语法:

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

  • 【注意】:
  1. 被static修饰的属性,都会在类加载的时候在元数据区域声明出来并且赋值

  2. 没有被static修饰的属性,只会在构建该类的对象的时候才会在堆区开辟空间声明属性并且赋值

  3. 如果一个属性被static和final关键字同时修饰,那么属性名必须全大写并且使用_拼接,否则属性名必须全大写并且使用**“-”**

    拼接,否则属性名满足小驼峰命名法

  4. 属性虽然是变量,但是属性无需手动初始化,当我们构建对象时,如果属性没有初始值JVM内存会默认给属性赋予一个默认值,默认值根据数据类型的不同而不同

    类型默认值
    整型类型0
    浮点类型0.0
    booleanfalse
    char’‘
    引用数据类型null
3.2.2 属性的调用语法:
  1. 给属性赋值:对象名.属性名 = 值;
  2. 获取属性的值:对象名.属性值
  • 【注意点】
  1. 如果属性被static修饰了,除了可以使用对象名来调用,也可以直接使用类名来调用。
  2. 被static修饰的属性,都会在类加载的时候在元数据区域声明出来并且赋值,而且一个类只会加载一次
  3. 没有被static修饰的属性,只会在构建该类的对象的时候才会在堆区开辟空间声明属性并且赋值,一个对象会创建一个新的内容
  4. 一个类中的静态内容只会在内存中存在一份,但是非静态内容一个对象存在一份
3.2.3 代码示例

例一

package work1;
/**
 * 属性又名成员变量  本质上就是一个变量
 * 访问控制修饰符  [static]  [final]  数据类型  属性名  [= 值];
 * 
 * static是面向对象中一个比较特殊的关键字,修饰谁,谁就是静态的
 * 静态的内容有个规则,在类加载的时候,必须把每一个类中的静态内容在元数据区定义声明出来
 * 【注意】:
 * 1、被static修饰的属性,都会在类加载的时候在元数据区域声明出来并且赋值
 * 2、没有被static修饰的属性,只会在构建该类的对象的时候才会在堆区开辟空间声明属性并且赋值
 * 3、如果一个属性被static和final关键字同时修饰,那么属性名必须全大写并且使用_拼接,否则属性名必须全大写并且使用_拼接,
 * 否则属性名满足小驼峰命名法
 * 4、属性虽然是变量,但是属性无需手动初始化,当我们构建对象时,如果属性没有初始值
 * JVM内存会默认给属性赋予一个默认值,默认值根据数据类型的不同而不同
 * 	整数类型         0
 * 	浮点类型         0.0
 * 	boolean         false
 * 	char            ''
 * 	引用数据类型      null
 *
 * @author lenovo
 *
 */
public class FieldStudy {
	/*
	 * public static String name = "zs";
	 * public int age;
	 * public final String school = "中北大学";
	 * public static final int a = 1;
	 */
	
	public static String studentName ="zs";
	public int studentAge;
	public final String studentSchool ="中北大学";
	public static final int SCHOOL_NUMBER = 1;
	
	public static void main(String[] args) {
		//1、创建类的实例对象    类在Java中也是一种数据类型
		//实例对象说白了就是创建这个类的一个变量		类名		对象名  =  new  类名();
		FieldStudy fs = new FieldStudy();
		FieldStudy fs1 = new FieldStudy();
		String s = fs.studentName;
		System.out.println(s);
		System.out.println(fs.studentAge);
		System.out.println(FieldStudy.studentName);
		fs.studentName = "ww";
		System.out.println(fs1.studentName);
	}
	
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q7JRPTVm-1685721841306)(6.2.assets/%E7%B1%BB%E7%9A%84JVM.png)]

例二

package work1;

public class People {
    public String name;
    public int age;
    public String color ="黄色";
    public String sex="男";
    public static String gene ="xx、xy";
    
    public static void main(String[] args) {
        People dnn = new People();
        dnn.sex = "女";
        dnn.age = 500;
        People syp = new People();
        syp.color = "green";
        syp.gene = "xx、xy、xxx、xxy";
        System.out.println(dnn.gene);
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cHXoZirk-1685721841307)(6.2.assets/dnn.png)]

3.3 类中的方法声明与使用

3.3.1 定义

方法是一类事务的行为和动作

3.3.2 方法的完整的声明语法

访问控制修饰符 [static] [final] 返回值类型 方法名-小驼峰(形参列表) {

方法体;

}

3.3.3 代码
public class Demo01 {
    public String eat(String food) {
        return "";
    }
    public void tiangou(String grilGod) {
        
    }
    public String breath() {
        return "live";
    }
    public void haiwang() {
        
    } 
}

3.3.4 返回值类型

方法执行完毕给调用者返回的结果,返回值类型有三种情况:

  • 基本数据类型
  • 引用数据类型
  • void

如果返回值类型不是void,那么必须在方法的方法体中的逻辑上的最后一行使用return+该类型的值的方式把结果返回了。

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

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

相关文章

【paddlecls】多机多卡-linux(一:环境搭建)

1. 安装docker&#xff08;引擎&#xff09;&#xff1a; &#xff08;https://docs.docker.com/engine/install/ubuntu/&#xff09; Install Docker Engine on Ubuntu To get started with Docker Engine on Ubuntu, make sure you meet the prerequisites, and then follo…

Mysql:SQL性能分析

1 SQL执行频率 MySQL 客户端连接成功后&#xff0c;通过 show [session|global] status 命令可以提供服务器状态信息。通过如下指令&#xff0c;可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次&#xff1a; -- session 是查看当前会话 ; -- global 是查询全局…

03散点密度图(遥感反演数据精度验证)

本文是在模仿中精进数据分析与可视化系列的第三期——散点密度图&#xff0c;本文所用的数据和代码可在公众号GeodataAnalysis回复20230602下载。 一、简介 散点密度图&#xff08;Scatter Density Plot&#xff09;是一种用于可视化二维数据分布的图表。它将散点图和核密度估…

linux【网络编程】之HTTPS协议,一文了解HTTPS是保证通信安全的

linux【网络编程】之HTTPS协议 一、什么是HTTPS协议二、加密和解密2.1 什么是加密解密2.2 为什么需要加密2.3 常见的加密方式2.3.1 对称加密2.3.2 非对称加密2.3.3 数据摘要&#xff08;数据指纹&#xff09;2.3.4 数字签名 2.4 理智选择加密解密方式2.4.1 只使用对称加密✖️2…

OpenMMLab-AI实战营第二期——2.人体关键点检测与MMPose

文章目录 1. 人体姿态估计的介绍和应用2-1. 2D姿态估计概述2.1 任务描述2.2 基于回归2.3 基于热力图2.3.1 从数据标注生成热力图&#xff08;高斯函数&#xff09;2.3.2 使用热力图训练模型2.3.3 从热力图还原关键点 2.4 自顶向下2.5 自底向上2.6 单阶段方法 2-2. 2D姿态估计详…

搞什么飞机?快速排序算法都没搞懂,还敢说自己值20k?

引言 之前面试过一位求职者&#xff0c;其期望薪资是20k&#xff0c;面试时问到了排序算法&#xff0c;结果就是模棱两可&#xff0c;说这说那的… 所以&#xff0c;还是有必要学一些基础算法的 首先&#xff0c;搞明白学算法的重要性和为什么学算法 算法我认为是一种解决问题…

Midjourney摄影真人风,超高清图片一篇足够

欢迎小伙伴光临&#xff0c;本博主打的就是一个真实&#xff0c;关注点赞不迷路&#xff0c;毫无保留奉献&#xff0c;欢迎大家来探讨&#xff0c;以上图片均是万能咒语篇出品。 有些小伙伴感觉我的咒语水分很大&#xff0c;出不来效果&#xff0c;如果出不来效果的&#xff0c…

windows sql server 如何卸载干净?

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 windows sql server 怎么卸载干净&#xff1f; 前言一、windows sql server是什么&#xff1f;二、如何卸载干净 1、关闭sql server服务2、到控制面板&#xff0c;卸载sql …

深入Mybatis框架:解读数据源的实现,整合MyBatis框架,事务管理,集成JUnit测试

深入Mybatis框架 文章目录 深入Mybatis框架了解数据源解读Mybatis数据源实现非池化的数据源实现池化的数据源实现 整合Mybatis框架使用HikariCP连接池Mybatis事务管理使用Spring事务管理 集成JUnit测试 前面已经了解了JavaBean的创建和注入到IoC容器中&#xff0c;接下来深入My…

Nginx服务优化

配置nginx隐藏版本号 隐藏nginx版本号&#xff0c;避免安全漏洞泄漏 方法一&#xff1a;修改配置文件法 [rootwww conf]# vim /usr/local/nginx/confnginx.conf17 http { 18 include mime.types; 19 default_type application/octet-stream; 20 21 serve…

Generative AI 新世界 | 大型语言模型(LLMs)概述

在上一篇《Generative AI 新世界&#xff1a;文本生成领域论文解读》中&#xff0c;我带领大家一起梳理了文本生成领域&#xff08;Text Generation&#xff09;的主要几篇论文&#xff1a;InstructGPT&#xff0c;RLHF&#xff0c;PPO&#xff0c;GPT-3&#xff0c;以及 GPT-4…

jQuery的引入/jQuery筛选/菜单下拉案例/对类操作/封装的动画/自定义动画/获取元素属性

jQuery的使用与引入 点击链接后进入页面 复制整个页面,随后后新建文件,把复制的粘进去 jQuery入口函数 样式处理/隐式迭代 小案例 排他思想 淘宝服饰 链式编程 操作css方法 封装的动画 淡入淡出 自定义动画 获取元素固有属性值

添加程序到右键菜单打开项目文件夹

以Pycharm为例 第一部分&#xff1a; 添加程序到右键菜单。这里实验程序为pycharm&#xff0c;路径是形如D://pycharm/pycharm.exe。实际路径不是&#xff0c;这里是为了简便。 1、打开注册表&#xff0c;找到如下&#xff1a;HKEY_CLASSES_ROOT\Directory\Background\shell …

JVM学习(十四):垃圾收集器(万字介绍CMS、G1)

目录 一、垃圾收集器们 二、CMS(Concurrent-Mark-Sweep)&#xff1a;低延迟 2.1 什么是CMS 2.2 CMS工作流程 2.3 详细描述 2.4 CMS的优缺点 2.4.1 优点 2.4.2 弊端 2.5 CMS常用参数 三、G1&#xff08;Garbage First&#xff09;收集器&#xff1a;区域化分代…

【2023最新】C站最全的Python实战项目合集(附源码),练完即可就业,从入门到进阶,基础到框架,你想要的全都有

不管是从编程语言排行榜来说&#xff0c;还是流行程度来说&#xff0c;Python目前都算得上是最好的编程语言之一。由于入门简单对初学者友好&#xff0c;而被广泛使用。 部分中小学已将Python编入教材&#xff0c;浙江高考加入Python&#xff0c;计算机二级也加入Python&#…

Redis数据结构简介

对redis来说&#xff0c;所有的key&#xff08;键&#xff09;都是字符串。 1.String 字符串类型 是redis中最基本的数据类型&#xff0c;一个key对应一个value。 String类型是二进制安全的&#xff0c;意思是 redis 的 string 可以包含任何数据。如数字&#xff0c;字符串&am…

【数据库从0到1】-入门基础篇

【数据库从0到1】-入门基础篇 &#x1f53b;一、数据库产生背景&#x1f53b;二、数据库有关概述&#x1f53b;三、数据库访问接口&#x1f53b;四、数据库种类&#x1f53b;五、数据库有关术语&#x1f53b;六、常见DBMS排名&#x1f53b;七、常见数据库介绍7.1 RDS(关系型数据…

前端gulp的安装和使用,你或许用得到

gulp安装 1.npm install --global gulp-cli全局安装&#xff08;只需要执行成功一次&#xff0c;之后就不需要再全局安装了&#xff09; 2.npx mkdirp my-project创建项目并进入 3.cd my-project进入目录 4.npm init在项目目录下创建 package.json 文件 5.npm install --sav…

分享24个强大的HTML属性,建议每位前端工程师都应该掌握!

HTML属性非常多&#xff0c;除了一些基础属性外&#xff0c;还有许多有用的特别强大的属性 本文将介绍24个强大的HTML属性&#xff0c;可以使您的网站更具有动态性和交互性&#xff0c;让用户感到更加舒适和愉悦。 让我们一起来探索这24个强大的HTML属性吧&#xff01; 1、Ac…

tqdm.notebook显示进度条

需要安装hbox插件 如图是无法正常显示进度条插件的 要在Jupyter Notebook中使用HBox&#xff08;即水平盒子&#xff09;布局插件&#xff0c;您需要执行以下步骤&#xff1a; 确认您已经安装了Jupyter Notebook和ipywidgets。如果没有安装&#xff0c;您可以使用如下命令进行…