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.count
    public 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.静态代码块只能调用静态成员

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

31.2k star, 免费开源的白板绘图工具 tldraw

31.2k star, 免费开源的白板绘图工具 tldraw 分类 开源分享 项目名: tldraw -- 无限画布白板 Github 开源地址&#xff1a; https://github.com/tldraw/tldraw 在线测试地址&#xff1a; tldraw 文档地址&#xff1a; tldraw SDK tldraw 是一款开源免费的无限画布白板&…

网络规划(homework 静态路由 and Rip路由表更新)

1、写出下图路由器1和路由器3中的路由表&#xff08;按直接交付、特定主机交付、特定网络交付、 默认交付的顺序放置路由项&#xff09; 2、写出Ri更新后的路由表&#xff08;rip路由协议&#xff09; 1、将Rj广播的路由消息全部1 2、直接对照着更新Ri中的路由表

基于java实现的二手车交易网站

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea…

【可能是全网最丝滑的LangChain教程】六、快速入门Agent

系列文章地址 【可能是全网最丝滑的LangChain教程】一、LangChain介绍-CSDN博客 【可能是全网最丝滑的LangChain教程】二、LangChain安装-CSDN博客 【可能是全网最丝滑的LangChain教程】三、快速入门LLM Chain-CSDN博客 【可能是全网最丝滑的LangChain教程】四、快速入门Re…

[深度学习] 无人车环境准备

1. 安装过程基本遵循以下步骤 电脑端环境配置 - OriginBot智能机器人开源套件 需要注意以下两点&#xff1a; 1> 由于深度学习需要的包和镜像体积都比较大&#xff0c;所以虚拟机硬盘大小建议120GB 2> 虚拟机的网络适配器应该设置为桥接模式&#xff0c;如果使用NAT模…

Windows系统C盘空间优化进阶:磁盘清理与Docker日志管理

Windows系统C盘空间优化进阶&#xff1a;磁盘清理与Docker日志管理 文章目录 Windows系统C盘空间优化进阶&#xff1a;磁盘清理与Docker日志管理磁盘清理工具 使用“运行”命令访问磁盘清理利用存储感知自动管理空间清理WinSxS文件夹结合手动清理策略 小结删除临时文件总结&…

git入门教程

Git 1. Git历史 同生活中的许多伟大事件一样&#xff0c;Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上&#xff08;1991&#xff0d;2002年间&#xff09;。到 2002…

vitepress系列-06-部署篇

部署篇 上传代码库 选择腾讯旗下的CONDING 有手就行 构建 采用CONDING自带的CICD: 注意&#xff1a;这边持续集成中的构建计划已经满足不了vitepress了&#xff0c;会把默认流水线拉挂了&#xff0c;但是如果你是vuepress依旧可以 采用云原生进行构建&#xff1a; 步骤一&a…

本地生活抖音同城商家流量推广运营解决方案

【干货资料持续更新&#xff0c;以防走丢】 本地生活抖音同城商家流量推广运营解决方案 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音运营资料合集&#xff08;完整资料包含以下内容&#xff09; 目录 抖音本地生活运营方案&#xff0c;帮助本地生活服务…

金融企业区域集中库的设计构想和测试验证

导读 本文探讨了金融企业区域集中库的设计构想和测试验证&#xff0c;包括架构设想、数据库整合场景测试及优势和使用设想。作者提出利用 TiDB 数据库产品集中建设区域集中库&#xff0c;解决 MySQL 存量节点的整合问题&#xff0c;实现部署的标准化、按需扩展和统一运维管理。…

linux:du和df区别

文章目录 1. 概述2. du 命令2. df 命令3. 区别总结 1. 概述 du 和 df 都是 Linux 系统中用于查看磁盘空间使用情况的命令&#xff0c;但它们的功能和用法有所不同。 2. du 命令 du 是 “disk usage” 的缩写&#xff0c;用于显示文件或目录的磁盘使用情况。du 命令用于查看指…

基于SSM框架实现的在线心理评测与咨询系统(技术栈 spring+springmvc+mybatis+jsp+jquery+css)

一、项目简介 本项目是一套基于SSM框架实现的在线心理评测与咨询系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&am…

二、企业级架构之Nginx

一、Nginx的重装与升级 1、为什么需要重装与升级&#xff1a; 在实际业务场景中&#xff0c;需要使用软件新版本的功能、特性&#xff0c;就需要对原有软件进行升级或者重装操作。 Nginx&#xff1a;1.12版本 → 1.16版本 2、Nginx重装&#xff1a; 第一步&#xff1a;停止…

武汉星起航:打造亚马逊一站式孵化平台引领电商新风潮

2020年正式成立后&#xff0c;武汉星起航持续深耕亚马逊自营店铺运营&#xff0c;不断拓展跨境电商业务。公司凭借专业运营团队和多年经验为合作伙伴提供深入合作模式&#xff0c;迅速崭露头角。推出亚马逊一站式孵化平台&#xff0c;为卖家提供全方位支持&#xff0c;彰显了公…

(已解决)引入本地bootstrap无效,bootstrap和jquery的引入

问题&#xff1a; 首先我是跟着张天宇老师下载的bootstrap文件&#xff0c;新建了一个css文件夹&#xff0c;但是这样子<link rel"stylesheet" type"text/css" src"./css/bootstrap.css">在index.html引入没有用。 解决办法: 1.把建立的…

免费在线搜索人名、电话号码、个人信息、定位、联系信息以及地址的开源网站

免费在线搜索人名、电话号码、个人信息、定位、联系信息以及地址的开源网站。 为大家推荐开源搜索电话号码及地址的网页。这些网站不仅提供了免费查找人员、电话号码、地址、区号、邮政编码和邮政编码的功能&#xff0c;还允许进行反向搜索&#xff0c;即通过输入电话号码找到…

蓝桥杯第十三届省赛C++B组(未完)

目录 刷题统计 修剪灌木 X进制减法 【前缀和双指针】统计子矩阵 【DP】积木画 【图DFS】扫雷 李白打酒加强版 DFS (通过64%&#xff0c;ACwing 3/11&#xff09;; DFS(AC) DP&#xff08;AC&#xff09; 砍竹子(X) 刷题统计 题目描述 小明决定从下周一开始努力刷题准…

【优选算法专栏】专题十六:BFS解决最短路问题(一)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

《QT实用小工具·十八》高亮发光按钮控件

1、概述 源码放在文章末尾 该项目实现了高亮发光按钮控件 可设置文本&#xff0c;居中显示。可设置文本颜色。可设置外边框渐变颜色。可设置里边框渐变颜色。可设置背景色。可直接调用内置的设置 绿色、红色、黄色、黑色、蓝色 等公有槽函数。可设置是否在容器中可移动&#…

MongoDB初探:安装与图形化界面保姆级使用指南

文章目录 前言一、MongoDB下载安装下载解压配置环境变量打开mongoDB 二、配置本地MongoDB服务创建文件下载服务测试服务 三、图形化界面Compass GUINavicat GUI 总结 前言 MongoDB是一种流行的开源、面向文档的NoSQL数据库程序。与传统的关系型数据库不同&#xff0c;MongoDB将…