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.rhkb.cn/news/300460.html

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

相关文章

【Easy云盘 | 第二篇】后端统一设计思想

文章目录 4.1后端统一设计思想4.1.1后端统一返回格式对象4.1.2后端统一响应状态码4.1.3后端统一异常处理类4.1.4StringUtils类4.1.5 RedisUtils类 4.1后端统一设计思想 4.1.1后端统一返回格式对象 com.easypan.entity.vo.ResponseVO Data public class ResponseVO<T> …

树莓派5使用体验

原文地址&#xff1a;树莓派5使用体验 - Pleasure的博客 下面是正文内容&#xff1a; 前言 好久没有关于教程方面的博文了&#xff0c;由于最近打算入门嵌入式系统&#xff0c;所以就去购入了树莓派5开发板 树莓派5是2023年10月23日正式发售的&#xff0c;过去的时间不算太远吧…

C# Solidworks二次开发:获取唯一ID的API详解

大家好&#xff0c;今天要介绍的是关于solidworks中可以获取对象唯一ID的几种API&#xff0c;获取唯一ID的API有如下几种&#xff1a; &#xff08;1&#xff09;第一种是GetID Method (IComponent2)&#xff0c;其含义为获取每个组件的唯一ID。 下面是API中的使用例子&#x…

【Web】2024红明谷CTF初赛个人wp(2/4)

目录 ezphp playground 时间原因只打了2个小时&#xff0c;出了2道&#xff0c;简单记录一下 ezphp 参考文章 PHP filter chains: file read from error-based oracle https://github.com/synacktiv/php_filter_chains_oracle_exploit 用上面的脚本爆出部分源码&#xff…

Trace链异常检测汇总

微服务应用与单块应用完全不同&#xff0c;一个微服务系统少则有几十个微服务组成&#xff0c;多则可能有上百个服务。比如BAT级别的互联网公司&#xff0c;一般都超过上百个服务&#xff0c;服务之间的依赖关系错综复杂&#xff0c;如果没有有效的监控手段&#xff0c;那么出现…

基于SpringBoot+Vue华强北商城二手手机管理系统(源码+部署说明+演示视频+源码介绍+lw)

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

PCL 点到三角形的距离(3D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 给定三角形ABC和点P,设Q为描述ABC上离P最近的点。求Q的一个方法:如果P在ABC内,那么P的正交投影点就是离P最近的点Q。如果P投影在ABC之外,最近的点则必须位于它的一条边上。在这种情况下,Q可以通过计算线段AB、…

vue项目初始化和部署

目录 1. 技术简介... 2 2. 安装Node.js. 3 3. 全局安装Vue CLI (脚手架工具) 5 4. 创建一个新的Vue项目... 6 5. 在阿里云虚拟机安装和配置Nginx. 9 6. 将Vue项目打包部署到Nginx下... 14 7. 访问部署的项目... 14 1. 技术简介 Vue.js&#xff08;通常简称为Vue&#x…

【亲测有效】微信公众号设置菜单栏显示,未开启自定义菜单,微信公众平台自定义菜单接口开发

微信公众平台自定义菜单接口开发 问题:运营人员在设置微信公众号设置菜单栏显示,未开启自定义菜单解决方案(微信公众平台自定义菜单接口开发):自定义菜单-创建接口请求链接完整代码第一步:在WeChat类里添加代码情况一:没有WeChat类情况,如果已有请看情况二情况二:已有…

以诚待人,用心做事,做到最好,追求更好

无数个日日夜夜&#xff0c;终于换来了这样一份努力的证明。 2023年&#xff0c;收获满满&#xff0c;前一阵子拿到了证书&#xff0c;忘记拍照了&#xff0c;今天抽空记录一下 收获&#xff01;又得到一份肯定&#xff0c;这份荣誉证书将伴随我一直为了进步而奋斗&#xff1a…

electron 打不同环境的包

我用的打包工具: electron-builder 1、在package.json 文件的同级下创建2个js文件 electron-builder-test.config.js electron-builder.config.js electron-builder-test.config.js const basejson require(./electron-builder.config.js); module.exports {extraMetada…

CSS面试题常用知识总结day03

大家好我是没钱的君子下流坯&#xff0c;用自己的话解释自己的知识 前端行业下坡路&#xff0c;甚至可说前端已死&#xff0c;我还想在前段行业在干下去&#xff0c;所以从新开始储备自己的知识。 从CSS——>Javascript——>VUE2——>Vuex、VueRouter、webpack——>…

基于Spring Boot的旅游管理系统设计与实现

基于Spring Boot的旅游管理系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 旅游方案&#xff0c;用户通过旅游方案可以查看方案编号…

python 04字典映射

1.创建字典 &#xff08;1&#xff09;通过自己的输入创建字典 字典用大括号&#xff0c;至此&#xff0c;小括号( )表示元组&#xff0c;中括号[ ]表示列表&#xff0c;大括号{ }表示字典&#xff0c;python中最常用的三种数据结构就全了 &#xff08;2&#xff09;通过其他…

书生·浦语大模型实战营 | 第2次学习笔记

前言 书生浦语大模型应用实战营 第二期正在开营&#xff0c;欢迎大家来学习。&#xff08;参与链接&#xff1a;课程升级&#xff0c;算力免费&#xff0c;书生浦语实战营第二期学员招募&#xff5c;活动预告https://mp.weixin.qq.com/s/YYSr3re6IduLJCAh-jgZqg&#xff09; …

git上传到本地仓库

摘要&#xff1a;本地初始化init仓库&#xff0c;进行pull和push&#xff1b;好处是便于利用存储设备进行git备份 git init --bare test.git 随便到一个空的目录下git clone 然后使用git上传 把git仓库删除之后再clone一次验证一下是否上传成功&#xff1a; 如果在ubantu上面没…

leetcode.707. 设计链表

题目 题意&#xff1a; 在链表类中实现这些功能&#xff1a; get(index)&#xff1a;获取链表中第 index 个节点的值。如果索引无效&#xff0c;则返回-1。 addAtHead(val)&#xff1a;在链表的第一个元素之前添加一个值为 val 的节点。插入后&#xff0c;新节点将成为链表的…

Redis安装说明2

Redis安装说明 1.3.2.指定配置启动 如果要让Redis以后台方式启动&#xff0c;则必须修改Redis配置文件&#xff0c;就在我们之前解压的redis安装包下&#xff08;/usr/local/src/redis-6.2.6&#xff09;&#xff0c;名字叫redis.conf&#xff1a; 我们先将这个配置文件备份一…

原创【matcap材质在ue4中的实现办法】

matcap材质在ue4中的实现办法 2023-08-29 15:34 https://www.bilibili.com/video/BV1GR4y1b76n/?spm_id_from333.337.search-card.all.click&vd_sourced76b773892c830a157c0ccc97ba78411 评论(0)

Sora是什么?Sora怎么使用?Sora最新案例视频以及常见问题答疑

Sora 是什么&#xff1f; 2024年2月16日&#xff0c;OpenAI 在其官网上面正式宣布推出文本生成视频的大模型Sora 这样说吧给你一段话&#xff0c; 让你写一篇800字的论文&#xff0c;你的理解很可能都有偏差&#xff0c;那么作为OpenAi要做文生视频到底有多难&#xff0c;下面…