适合有编程基础的人看的《韩顺平零基础30天学java》笔记(374~397)

2023-10-22 03:20

本文主要是介绍适合有编程基础的人看的《韩顺平零基础30天学java》笔记(374~397),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在最前边:

研究生一枚,为后端实习和未来工作打基础。无意间发现韩顺平老师的课程,细心细致,讲课和吴恩达老师一样,都是保姆式讲解,各种基础知识都会补充,爱了。
韩顺平老师课程地址:https://www.bilibili.com/video/BV1fh411y7R8?spm_id_from=333.999.0.0
阅读提醒:本笔试适合有编程语言基础的伙伴阅读,因为本兔兔是本专业的,有c、c++、python 、sql基础,笔记中特别的基础的内容就没有记录。完全零基础的小伙伴建议跟着韩老师的课程自己记录。

Java 基础

第二阶段 面向对象编程 (高级)在这里插入图片描述

一、类(静态)变量和类(静态)方法

1、需求

>在这里插入图片描述

1.1用以前的技术
设置 Child类,设置计数变量count。

在这里插入图片描述
在这里插入图片描述

缺点在这里插入图片描述
2、介绍
2.1 类变量和类方法,前边必须有static修饰,因此也叫静态变量、静态方法。

他们会被 同一类的 所有的 对象实例 所共享,在类加载的时候就生成了,即使没有创建任何对象实例也可以访问

2.2 定义
访问修饰符的权限范围 同普通变量的一样
访问修饰符  static  数据类型  变量名; //这个更好
static  访问修饰符  数据类型  变量名;
访问修饰符  static  数据返回类型  方法名(){}; //这个更好
static  访问修饰符 数据返回类型  方法名(){};
2.3 访问
类名.类变量名;//更推荐
对象名.类变量名;
类名.类方法;//更推荐
对象名.类方法;
3、 类变量
3.1 内存分析

在这里插入图片描述
在这里插入图片描述后边补充的蓝线,是即使不创建对象可以访问类变量的原因哦

图片细节:
静态变量在内存中存放的位置有两种说法

一个是堆中该类对应的class对象的最后
一个是方法区的静态域
根据JDK的版本不同而不同.jdk8以前在方法区,jdk8开始在堆

3.2类变量使用细节
特别强调,类变量(静态变量)是绝对不可以在构造器中的!为啥?因为所有static的东西都在类第一次加载的时候完成,且只加载一次。而构造器是创建对象的时候使用的,和static的东西不是一个阶段

在这里插入图片描述在这里插入图片描述

4、 类方法的使用场景:希望不创建实例对象也可以使用的一些方法,经常当做工具来使用的话,开发成static很合适。如Math.max()、Arrays.sort()

在这里插入图片描述

使用细节

在这里插入图片描述
在这里插入图片描述

特别的,如果非要在静态方法中使用 非静态 成员,那么只能在静态方法中,创建本类的对象,通过对象调用 非静态 成员。

二、main方法(static方法所以要遵循static方法的规则)

在这里插入图片描述

第5点举例说明为什么args字符串数组是在运行时传入的

在这里插入图片描述在这里插入图片描述

第5点举例IDEA中怎样实现main的动态传值

在这里插入图片描述
在这里插入图片描述

三、代码块(构造器的补充机制)

在这里插入图片描述

代码块的好处:在这里插入图片描述
代码块的用法:
1、普通代码块
优先于构造方法被执行,无论使用哪个构造器都会首先执行代码块的内容。
  • 每次创建对象,也会被调用
  • 创建子类对象实例,父类的普通代码块也会被加载。父类先做
普通代码块的用法举例:在这里插入图片描述上图中两个构造器包含相同的语句在这里插入图片描述上图,把重复的语句提炼出来放入代码块,完美!
2、static代码块
作用是对类进行初始化随着类的加载而执行,并且只会执行一次
2.1类什么时候被加载(静态代码块什么时候执行)
  • 第一次创建某类的对象实例时new(一个类,在第一次new时才执行静态代码块,以后再新建对象便不再执行静态代码块)

  • 创建子类对象实例,父类也会被加载

  • 使用类的静态成员时(静态代码块特有的
    特别注意,使用子类的静态方法,也会调用父类的静态代码块


小结
1、static代码块随着类的加载而被调用。
只能直接调用静态成员变量、静态成员方法。
2、 普通代码块随着 构造器的使用 而调用。什么操作会调用构造器,同时就会执行普通代码块。可以调用任何属性和方法
所以构造器中,最前边隐含了
① super()
② 调用本类普通代码块和本类普通属性初始化。(按照代码位置的顺序)

3、一些需要牢记的执行顺序重要
注:同一优先级的由定义的位置决定执行顺序
3.1 本类中 代码块、属性、构造器的优先级
静态属性 = 静态代码块 > 普通属性 = 普通代码块 > 构造器
3.1 父类和子类构造器、普通代码块的执行顺序是:
父类普通代码块 > 父类构造器 > 子类普通代码块 > 子类构造器在这里插入图片描述
3.3 继承关系中 代码块、成员变量、构造器的优先级重要
  父类 静态属性 = 父类 静态代码块
>  子类 静态属性 = 子类 静态代码块
>  父类 普通属性初始化 = 父类 普通代码块
>  父类 构造器
>  子类 普通属性初始化 = 子类 普通代码块
>  子类 构造器
总的来说呢。就是 :
静态高于一切(因为首先进行父类子类的 类加载,类加载的时候静态信息随之创建
普通遵循“父高子低”,大于构造器
但普通总会带着构造器这个"小兄弟",没有普通时构造器“占山为王”

四、单例设计模式

在这里插入图片描述

什么是单例模式?
1、整个软件系统中,某个类只能存在一个对象实例,且该类只提供一个取得其对象实例的方法。
2、单例模式有两种方法:1)饿汉式 2)懒汉式
1、饿汉式

在这里插入图片描述
在这里插入图片描述

在类加载时,实例就已经创建好了。

缺点如果在程序中没有使用甚至很少使用,显然会造成资源的浪费。因为一般使用单例模式的对象都是重量级的哦。
优点不存在线程安全问题
举例java.lang.Runtime

2、懒汉式

在这里插入图片描述

当用户第一次使用静态方法getInstance的时候,才会创建Cat实例,后续再使用getInstance只会返回之前创建过的实例对象。

缺点存在线程安全问题
优点不会有资源浪费的现象

五、final关键字

使用场景:主要就是两类:不希望被继承的类、不希望被修改的各种值和方法

这里注意哦方法的参数列表里的参数也可以定义为final(见下图)
在这里插入图片描述
在这里插入图片描述

使用细节
  • 1、final修饰的属性就是 常量 ,命名方式是XX_XX_XXX
  • 2、final修饰的属性必须赋初值,赋初值的地方有三种:
如果既有final修饰又有static修饰,那么还是遵循static高于一切,这个成员变量就不能在构造器中、普通代码块中使用。可以在static代码块中赋值
  • 3、4、5、6在这里插入图片描述
    在这里插入图片描述
  • 7、已知静态变量(类变量),每次被调用都会造成类重新加载。那么java的底层实现了,final static一起修饰一个类变量,那么使用它时就不会造成类加载
  • 8、
    在这里插入图片描述

这篇关于适合有编程基础的人看的《韩顺平零基础30天学java》笔记(374~397)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/feifeide123/article/details/127172587
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/258779

相关文章

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

SpringCloud中的@FeignClient注解使用详解

《SpringCloud中的@FeignClient注解使用详解》在SpringCloud中使用Feign进行服务间的调用时,通常会使用@FeignClient注解来标记Feign客户端接口,这篇文章... 在Spring Cloud中使用Feign进行服务间的调用时,通常会使用@FeignClient注解

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

Java如何从Redis中批量读取数据

《Java如何从Redis中批量读取数据》:本文主要介绍Java如何从Redis中批量读取数据的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一.背景概述二.分析与实现三.发现问题与屡次改进3.1.QPS过高而且波动很大3.2.程序中断,抛异常3.3.内存消

SpringBoot使用ffmpeg实现视频压缩

《SpringBoot使用ffmpeg实现视频压缩》FFmpeg是一个开源的跨平台多媒体处理工具集,用于录制,转换,编辑和流式传输音频和视频,本文将使用ffmpeg实现视频压缩功能,有需要的可以参考... 目录核心功能1.格式转换2.编解码3.音视频处理4.流媒体支持5.滤镜(Filter)安装配置linu

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结