Java学习笔记24(面向对象编程(高级))

1.面向对象编程(高级)

1.1 类变量和类方法

1.类变量

​ *类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量

​ *定义语法:

1.访问修饰符 static 数据类型 变量名;

2.static 访问修饰符 数据类型 变量名;

class A
{public static String name = "abc";static public int totalNum = 100;
}

​ *访问类变量

1.类名.类变量名

2.对象名.类变量名

//类变量的访问,也必须遵守相关的访问权限

class Child
{private String name;//定义一个变量count,是一个类变量(静态变量) static 静态//该变量最大的特点就是会被Child 类的所有对象共享//类变量可以通过类名直接使用 Child.countpublic static int count = 0;public Child(String name){this.name = name;}public void join(){System.out.println(name + "加入了游戏..");}
}main()
{Child child1 = new Child("Tom");Child child2 = new Child("Smith");child1.count++;child2.count++;
}
1.static变量

​ 1.static变量是同一个类所有对象共享

​ 2.static变量,在类加载的时候就生成了 //所以即使没有创建对象实例也可以访问

class A
{public static String name = "111";
}main()
{System.out.println(A.name);
}

2.类方法

​ *类方法也叫静态方法,静态方法只能访问静态属性

1.形式如下:

1.访问修饰符 static 数据返回类型 方法名(){ }

2.static 访问修饰符 数据返回类型 方法名()

2.类方法调用:

1.类名.类方法名

2.对象名.类方法名

3.使用注意事项和细节讨论

1.类方法和普通方法都是随着类的加载而加载,将信息存储在方法区

类方法中无this的参数

普通方法中隐含着this的参数

2.类方法可以通过类名调用,也可以通过对象名调用

3.普通方法和对象有关,需要通过对象名调用,比如对象名.方法名(参数),不能通过类名调用

4.类方法中不允许使用和对象有关的关键字,比如this和super。普通方法(成员方法)可以

5.类方法(静态方法)中 只能访问静态变量静态方法

6.普通成员方法,既可以访问普通变量(非静态成员),也可以访问静态变量(静态成员)

1.2 main方法

1.解释main方法的形式:

public static void main(String[] args){}

1.main方法是java虚拟机调用的

2.java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public

3.java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static

4.该方法接收String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数

5.java 执行的程序 参数1 参数2 参数3

public class A
{public static void main(String[] args){for(int i = 0 ;i<args.length;i++){System.out.println("第" + (i+1) "个参数为:" + args[i]);}}
}

在这里插入图片描述

2.特别提醒

1.在main()方法中,我们可以直接调用main方法所在类的静态方法或静态属性

2.但是,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员

1.3 代码块

​ *代码化块又称为初始化块,属于类中的成员[即 是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过{}包围起来

​ *但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不能通过对象或类显示调用,而是加载类时,或创建对象时隐式调用

1.基本语法

[修饰符]{代码
};

​ *注意事项:

1.修饰符可选,要写的话,只能写static

2.代码块分为两类,使用static修饰的叫静态代码块,没有static修饰的,叫普通代码块/非静态代码块

3.逻辑语句可以为任何逻辑语句(输入、输出、方法调用、循环、判断)

4.“ ; ”号可以写上,也可以省略

class movie
{private String name;private double price;private String director;//不管调用哪个构造器,创建对象,都会先调用代码块的内容//代码块调用的顺序优先于构造器{System.out.println("电影开始");}public Movie(String name){System.out.println("Movie(String name) 被调用");this.name = name;}public Movie(String name ,double price){System.out.println("Movie(String name,double price) 被调用");this.name = name;this.price = price;}
}

2.使用细节

1.static代码块也叫静态代码块

作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象,就执行

class A
{static {System.out.println("aaa");}
}
2.类什么时候被加载

​ 1.创建对象实例时(new)

main()
{A a = new A();
}class A
{static {System.out.println("aaa");}
}

​ 2.创建子类对象实例,父类也会被加载

main()
{A a = new A();
}class B
{static{System.out.println("bbb");        }
}class A extends B
{static {System.out.println("aaa");}
}

​ 3.使用类的静态成员时(静态属性,静态方法)

3.普通的代码块

在创建对象实例时,会被隐式的调用。被创建一次,就会调用一次

如果只是使用类的静态成员时,普通代码块并不会执行

4.创建一个对象时,在一个类的调用顺序

​ 1.调用静态代码块和静态属性初始化(注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用)

​ 2.调用普通代码块和普通属性的初始化(注意:普通代码块和普通属性初始化调用的优先级一样,如果有多个普通代码块和多个普通属性初始化,则按定义顺序调用)

​ 3.调用构造方法

5.构造方法(构造器)

构造器的最前面其实隐含了super()和调用普通代码块,新写了一个类演示,静态相关的代码块,属性初始化,在类加载时,就执行完毕,因此是优先于构造器和普通代码块执行的

main()
{new B();//1.先调用A() 构造器//2.B的普通代码块被调用//3.B()构造器被调用
}class A
{public A(){//构造器//这里有隐藏的执行要求//(1)super();//(2)调用本类的普通代码块System.out.println("ok");}
}class B extends A
{{System.out.println("okB");}public B(){//super();//调用A()构造器//调用本类的普通代码块System.out.println("B()构造器被调用。。。")}
}
6.创建一个子类时

创建一个子类对象时(继承关系),他们的静态代码块,静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序如下:

​ 1.父类的静态代码块和静态属性(优先级一样,按定义顺序执行)

​ 2.子类的静态代码块和静态属性(优先级一样,按定义顺序执行)

​ 3.父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)

​ 4.父类的构造方法

​ 5.子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)

​ 6.子类的构造方法

7.静态代码块只能调用静态成员

静态代码块只能调用静态成员(静态属性和静态方法),普通代码块可以调用任意成员

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

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

相关文章

C语言数据结构(11)——归并排序

欢迎来到博主的专栏C语言数据结构 博主ID&#xff1a;代码小豪 文章目录 归并排序两个有序数组的合并归并归并排序 归并排序的代码 归并排序 两个有序数组的合并 当前有两个有序数组arr1和arr2&#xff0c;我们创建一个可以容纳arr1和arr2同等元素个数的新数组arr。 让一个…

探索数据结构:特殊的双向队列

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 双向队列的定义 **双向队列(double‑ended queue)**是一种特殊的队列…

js中使let关键字报错,改用var关键字解决

js中使let关键字报错,改用var关键字解决 项目场景&#xff1a;问题描述原因分析&#xff1a;解决方案&#xff1a;总结 项目场景&#xff1a; 使用 let 关键字报错&#xff0c;报错信息为&#xff1a; Uncaught ReferenceError: maxNum is not defined at getMaxNum (4-3.htm…

Open-GroundingDino和GroundingDino的推理流程实现

1、简单介绍 GroundingDino是一个多模态检测模型&#xff0c;可以输入文本提示输出视觉目标的位置&#xff0c;实现了文本和图像的匹配。相比较于一众的OVD算法&#xff0c;GroundingDino在文本处理上的灵活度高&#xff0c;因为大多OVD算法是采用clip文本编码器&#xff0c;这…

Stable Diffusion介绍

Stable Diffusion是一种前沿的开源深度学习模型框架&#xff0c;专门设计用于从文本描述生成高质量的图像。这种称为文本到图像生成的技术&#xff0c;利用了大规模变换器&#xff08;transformers&#xff09;和生成对抗网络&#xff08;GANs&#xff09;的力量&#xff0c;以…

2024-04-06 问AI: 介绍一下 ResNET 50 预训练模型

文心一言 ResNet50预训练模型是一种深度卷积神经网络&#xff08;CNN&#xff09;&#xff0c;它在图像处理和计算机视觉任务中取得了显著的效果。相比于传统的CNN模型&#xff0c;ResNet50具有更深的网络结构&#xff0c;通过引入残差连接&#xff08;residual connection&am…

7(8)-2-CSS 盒子模型

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 CSS 盒子模型1 盒子模型&#xff08;Box Model&#xff09;组成2 边框&#x…

软考程序员2024年5月报名流程及注意事项

2024年5月软考程序员报名入口&#xff1a; 中国计算机技术职业资格网&#xff08;http://www.ruankao.org.cn/&#xff09; 2024年软考报名时间暂未公布&#xff0c;考试时间上半年为5月25日到28日&#xff0c;下半年考试时间为11月9日到12日。不想错过考试最新消息的考友可以…

题目:学习使用register定义变量的方法。

题目&#xff1a;学习使用register定义变量的方法。 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated …

C语言-翁恺-PTA-81-120课后练习题-03

title: C语言-翁恺-PTA-81-120课后练习题-03 tags: PTAC语言 description: ’ ’ mathjax: true date: 2024-04-05 22:21:00 categories:PTA 7-84 连续因子 80-以后的题目感觉都不是很好做 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3567&#xff…

多线程4

死锁 想获取到第二把锁&#xff0c;就需要执行完第一层大括号&#xff0c;想要执行完第一层大括号&#xff0c;就要先获取到第二层的锁。 synchronized (counter2){ synchronized (counter2){} } 例子:t2先启动&#xff0c;t2进行加锁后一定成功&#xff0c;但是如果t2进行二…

c++ const关键词介绍

在C中&#xff0c;const 关键字用于定义常量或指定函数参数、成员函数、成员变量等为常量&#xff0c;表示其值在程序的执行过程中不能被修改。 //1. 定义常量&#xff1a; const int MAX_SIZE 100;//2. 常量指针&#xff1a; int x 10; const int* ptr &x; // 指向整型…

基于YOLOv8的木材缺陷检测系统说明

基于YOLOv8的木材缺陷检测系统说明 一、系统概述 基于YOLOv8的木材缺陷检测系统是一个利用深度学习技术进行木材表面缺陷自动检测的智能系统。该系统通过训练YOLOv8模型&#xff0c;实现对木材表面缺陷的快速、准确识别&#xff0c;从而提高木材加工的质量控制和生产效率。 …

图数据库技术:知识图谱的存储与查询

图数据库技术&#xff1a;知识图谱的存储与查询 一、引言 在探索知识的宇宙中&#xff0c;知识图谱是组织和理解海量信息的星系图。在这张图中&#xff0c;每一个概念、实体与事物不再是孤立的点&#xff0c;而是通过关系与边相互连接&#xff0c;形成一个复杂而有机的网络。图…

mysql利用延迟复制恢复误删的表

&#xff08;1&#xff09;在主库3306中创建测试数据 (rootlocalhost) [(none)] create database test; Query OK, 1 row affected (0.00 sec) (rootlocalhost) [(none)] use test ; Database changed (rootlocalhost) [test] create table t1(id int primary key); Query OK, …

计算机网络练习-计算机网络概述与性能指标

计算机网络概述 ----------------------------------------------------------------------------------------------------------------------------- 1. 计算机网络最据本的功能的是( )。 1,差错控制 Ⅱ.路由选择 Ⅲ,分布式处理 IV.传输控制 …

3.网络编程-TCP

目录 TCP 建立连接的过程是怎样的 TCP为什么是三次握手 TCP 断开连接的过程是怎样的 TCP挥手为什么需要四次 为什么TIME_WAIT等待的时间是2MSL TCP详解之滑动窗口 TCP 半连接队列和全连接队列是什么 TCP粘包&#xff0c;拆包是怎么发生的&#xff0c;如何解决 TCP是如何…

书生·浦语大模型实战营之茴香豆:搭建你的 RAG 智能助理

书生浦语大模型实战营之茴香豆&#xff1a;搭建你的 RAG 智能助理 RAG&#xff08;Retrieval Augmented Generation&#xff09;技术&#xff0c;通过检索与用户输入相关的信息&#xff0c;并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇…

高项-进度管理

成本管理就是要确保项目在批准的预算内完成。 成本的类型 成本的组成 项目成本管理储备成本基准&#xff08;需要经过批准才能进行变更&#xff09; 成本基准应急储备工作包成本&#xff08;在基准内的可以不经过批准变更&#xff09; 工作包成本活动成本活动应急储备&…

物联网实战--驱动篇之(三)LoRa(sx1278)

目录 一、LoRa简介 二、sx1278模块 三、硬件抽象层 四、SX1278初始化 五、发送时间计算 六、发送模式 七、接收模式 八、总结 一、LoRa简介 LoRa在物联网传输领域有着举足轻重的地位&#xff0c;平时大家可能比较少听说&#xff0c;因为它主要还是在行业应用&#xff0…