java基础-第4章-面向对象(二)
一、static关键字
静态(static)可以修饰属性和方法。
称为静态属性(类属性)、静态方法(类方法)。
静态成员是全类所有对象共享的成员。
在全类中只有一份,不因创建多个对象而产生多份。
不必创建对象,可直接通过类名访问。
例子:
Person p1 = new Person();p1.name = "小明";p1.age = 23;//p1.city = "广州";Person p2 = new Person();p2.name = "晓东";p2.age = 28;//p2.city = "广州";//.......p1.print();p2.print();// Person.city = "深圳";//静态属性的访问:类名.属性名
//
// System.out.println("城市:"+Person.city);p1.city = "苏州";p1.printCity();p1.print();p2.print();//调用静态的方法:类名.方法名Person.printCity();
/*** 静态变量,属于类,和对象无关,*/
public class Person {String name;int age;static String city;//静态的,属于类,对象也可以访问,但是所有的对象共享着一份数据;static final double PI = 3.14;//表示静态的常量,运行的过程数据不能改变,同时属于类,可以用类名直接调用public void eat(){System.out.println("吃东西.....");}public static void test(){System.out.println("test()........");}/*** 静态的方法*/public static void printCity(){test();//System.out.println("name:"+name);
// eat();System.out.println("城市:"+Person.city);}public void print(){printCity();eat();System.out.println("name:"+this.name+",age:"+age+",city:"+city);}
}
静态属性
形成静态属性,不再属于对象。非静态属性(实例属性)属于对象,随着对象的创建而产生,每个对象的属性值都是独立的。
静态属性是属于类的,只有一份(节省内存)。应该由类来访问,但是对象也可以访问,所有的对象共享着一份数据。
非静态属性由对象访问:对象.属性–>赋值,取值
静态属性由类访问:类名.静态属性–>赋值,取值
静态属性可以和final搭配使用,形成静态常量。
静态方法
形成了静态方法。属于类而不再属于对象了,应该由类来访问,但是对象也可以访问。
普通的方法由对象调用。
静态方法中:只能访问属于类,不能访问属于对象。
A:访问静态属性
B:访问静态方法
C:不能直接访问非静态属性
D:不能直接访问非静态方法
非静态方法中:属于类,属于对象都可以访问
A:访问静态属性
B:访问静态方法
C:访问非静态属性
D:访问非静态方法
public void eat(){System.out.println(this.name+",吃东西啦。。。"); //非静态方法,可以访问非静态属性System.out.println("城市:"+Person.city); //非静态方法,可以访问静态属性this.showInfo(); // 非静态方法,可以调用非静态方法。Person.printCity(); //非静态方法,可以调用静态方法。
}public static void test1(){ //属于类的System.out.println(Person.city); //静态方法中,可以访问静态属性。Person.printCity();//静态方法中,可以访问静态方法。
// System.out.println(name); //静态方法中,不能访问非静态的属性
// this.showInfo(); //静态方法中,不能调用非静态的方法。}
静态代码块
代码块,就是一块代码。使用{}包裹起来的。
String name;int age;static{System.out.println("这是静态代码块。。。。");}/*构造代码块:需要调用构造函数才会执行*/{System.out.println("这是构造代码块");}public Demo2(){System.out.println("这是无参的构造函数");}public Demo2(String name,int age){}public static void main(String[] args) {{int k = 10;System.out.println(k);}Demo2 demo2 = new Demo2();Demo2 demo2_2= new Demo2();//System.out.println(k);//
// int i = 100;
// if(i>100){
// System.out.println(i);
//
// int j = 200;//局部变量,作用域只在代码块里面
// System.out.println(j);
// }//System.out.println(j);}
普通代码块:{}包裹起来一段代码。注意作用域。
构造代码块:写在类里,方法外的代码块,就叫构造代码块。当创建对象的时候,随着构造函数的调用而执行。而且优先于构造函数执行。构造函数被多次调用,那么构造代码块也被多次调用。
静态代码块:用static关键字修饰的代码块。在类第一次使用的时候执行,优先于main的执行。只执行一次。例如连接数据库的驱动等
同步代码块:多线程。
优先级别:静态代码块 > 构造代码块 >构造方法
二、继承
概念
生活中我们经常听到一些名词,譬如富二代,官二代,红二代,穷二代,农二代等等,它代表中人与人之间的一种关系。那么程序当中怎么表示这种关系呢?
概念:描述两个类的关系的。在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类(派生类,SubClass),现有类被称作父类(超类,SuperClass),子类会自动拥有父类所有非私有的属性和方法
意义:
A:避免重复的代码。(从子类的角度)
B:扩展类的功能。(从父类的角度)
继承性:子类,父类。存在继承关系。
子类对象,可以直接访问父类的非私有的属性和方法。(避免重复代码)
子类也可以新增自己的属性和方法。(扩展类的功能)
子类可以重新实现父类已有的方法。(扩展类的功能)
语法
父类:A类
子类:B类
语法结构:
class 父类{}class 子类 extends 父类{}
extends关键字:表示两个类是继承关系。
public class Person {String name;int age;public void eat(){System.out.println("吃东西。。。。。");}public void sleep(){System.out.println("睡觉");}
}* extends关键字:表示两个类是继承关系。**/
public class Student extends Person{String school;//@Override可以不加,但是如果加上,子类的重写的方法一定要和父类的那个方法名相同public void eat(){System.out.println("学生吃东西。。。。。");}public void study(){System.out.println("学习了。。。。。");}}//父类的创建Person p1 = new Person();p1.name = "乔布斯";p1.age = 55;p1.eat();p1.sleep();//p1.study();父类无法访问子类新增的方法和属性Student stu = new Student();stu.name = "小学生";stu.age = 34;stu.eat();stu.sleep();stu.school = "图灵";stu.study();//子类肯定可以访问新增的方法
继承中的构造方法
/*** 父类,动物类*/
public class Animal {String name;int age;public Animal(){System.out.println("父类的无参的构造方法。。");}//有参的构造方法public Animal(String name,int age){System.out.println("父类的有参的构造方法。。");this.name = name;this.age = age;}public void eat(){System.out.println("吃东西。。。。。");}}public class Cat extends Animal {String color;public Cat(){}public Cat(String name,int age,String color){//System.out.println("子类的有参构造");//super();//默认调用,隐含调用父类的无参的构造方法super(name,age);this();//争宠。。this.color = color;System.out.println("子类的无参的构造方法。。");}public void catchMouse(){System.out.println("抓老鼠......");}}
super关键字
子类对象的创建过程:
子类的构造方法中,默认先调用父类的无参构造方法。如果没有显示的调用,那么隐含着super()。
super关键字:
可以访问父类的属性
可以访问父类的方法
指代父类的构造方法, 如果有多个,靠参数来区分。要在第一行。
this关键字:
作为本类的对象,
访问本类的属性。如果在继承中,本类没有这个属性,那么再找父类中。
访问本类的方法
可以指代本类的构造方法:this()。要在第一行。
class A{int i=100;int j = 200;public void test(){System.out.println("i---->"+this.i);System.out.println("j---->"+this.j);System.out.println("------------test1-------------");}public void fun(){System.out.println("父类的fun()方法。。。");}}class B extends A{int i = 300;public void test2(){System.out.println("i------>"+super.i);//子类有的,就访问子类System.out.println("j------>"+j);//如果子类没有相应的属性,那么会默认去找父类的属性System.out.println("------------test2-----------------");this.fun();}// public void fun(){
// System.out.println("子类重写了父类的fun()方法。。。");
//
// }}
this和super的对比:
this,super关键字,不能出现在static方法中。
方法重写[重点]
重写:
关键字:override
概念:继承关系中,子类将父类已有的方法重新实现,叫做方法的重写。
public class Animal {String name;int age;public void eat(){System.out.println("动物吃东西。。。。");}
}public class Fish extends Animal {String color;@Overridepublic void eat() {System.out.println("鱼游海底。。。。吃东西。。。");}
}Animal a = new Animal();
a.eat();//父类对象,访问父类方法Fish fish = new Fish();
fish.eat();//子类对象,访问子类重写后的方法。。。
规则:
A:继承关系中。
B:子类重写的方法的声明,必须和父类一致。
方法的返回值(注意点:子类重写的方法的返回类型可以是父类方法返回类型的子类),参数列表,方法名。
C:子类重写方法的访问权限,不能比父类更加严格。
D:重写的方法,不能抛出比父类更大的异常。
重载:overload
概念:一个方法,因为参数不同,执行的具体的方法也不同。
规则:
A:同一个类中。
B:方法名必须一致。
C:参数列表必须不同:顺序,个数,类型。
三、访问修饰符
访问权限:对类,方法,变量,常量等访问位置的限定。通过访问权限修饰符来实现。
在Java中,可以在类、类的属性以及类的方法前面加上一个修饰符(modifier),来对类进行一些访问上的控制。
private:私有的,限制在本类中才能访问。
default:什么都不写,就是default。同类,同包。
protected:受保护的,同类,同包,不同包(限于子类访问)
public:公共的,同类,同包,不同包。
示例:
public class Test {private int age;//private 只能在本类中访问int i;//default:什么都不写,就是default。同类,同包。protected int j;//protected:受保护的,同类,同包,不同包(限于子类访问)public void print(){//public:公共的,同类,同包,不同包。System.out.println("age:"+age);}}
示例:
/*** 同一个包,不同的类*/
public class Demo6 {public static void main(String[] args) {Test test = new Test();//test.age //无法访问私有属性test.i = 100;//default修饰的可以在同一个包中访问System.out.println("i的值:"+test.i);test.j = 200;//protected修饰的,可以在同一个包中访问System.out.println("j的值:"+test.j);test.print();//同一个包中,可以访问}
}
/*** 同一个包中,子类*/
public class SubTest extends Test {public void test(){//System.out.println(""+this.age);无法访问私有属性System.out.println(""+this.j);//子类可以访问}
}
package com.tuling.access.sub;import com.qf.access.Test;/*** 不同的包,子类*/
public class SubTest2 extends Test {public void subTest(){System.out.println(""+this.j);//protected修饰的属性,在不同的包中,子类也可以访问}
}
package com.tuling.access.sub;import com.tuling.access.Test;/*** 不同的包,不同的类*/
public class Demo {public static void main(String[] args) {Test test =new Test();//test.i = 100;//在不同的包中,default修饰的属性无法访问//test.j = 200;//在不同的包中,protected修饰的属性无法访问,test.print();//不同的包中,可以访问}
}
对类的修饰:只能是default和public。protected不能修饰一个类。
最终结论:
private<default<protected<public
四、final关键字
词意:终结的,最终的,最后的。
final可修饰的内容:
类(最终类)
方法(最终方法)
变量(最终变量)
final修饰类:此类不能被继承。String、Math、System均为final修饰的类,不能被继承。
final修饰方法:此方法不能被覆盖。意为最终方法,不支持子类以覆盖的形式修改。
final修饰变量:此变量值不能被改变(常量)。所有final修饰的变量只能赋值一次,值不允许改变。
final修饰基本类型:值不可变
final修饰引用类型:地址不可变
静态常量不再提供默认值,必须手动赋予初始值。
示例:
package com.tuling.part4;//public final class Animal {//final修饰的类,是不能被继承的
public class Animal {// public final void eat(){//修饰的方法,不能被重写
// System.out.println("动物吃东西。。。。。。");
// }public void eat(){System.out.println("动物吃东西。。。。。。");}public int test1(){System.out.println("test1........");return 0;}
}
子类:
package com.tuling.part5;/***** 重写*/
public class Fish extends Animal {@Overridepublic void eat() {System.out.println("鱼吃什么。。。。。");}//@Override//加上这个标识,一定是重写:返回值要一样,方法名要一样,参数列表要一样public int test1(int a){System.out.println("wowowo");return 0;}}
相关文章:

java基础-第4章-面向对象(二)
一、static关键字 静态(static)可以修饰属性和方法。 称为静态属性(类属性)、静态方法(类方法)。 静态成员是全类所有对象共享的成员。 在全类中只有一份,不因创建多个对象而产生多份。 不必创…...
flex加 grid 布局笔记
<style> .flex-container { display: flex; height: 100%; /* 设置容器的高度 */ } .wide { display: flex; padding: 10px; border: 1px solid lightgray; text-align: center; justify-content: …...

最高评级!华为云CodeArts Board获信通院软件研发效能度量平台先进级认证
9月26日,华为云CodeArts Board获得了中国信通院《云上软件研发效能度量分级模型》的先进级最高级评估,达到了软件研发效能度量平台评估的通用效能度量能力、组织效能模型、项目效能模型、资源效能模型、个人效能模型、研发效能评价模型、项目管理域、开发…...

图像上传功能实现
一、后端 文件存放在images.path路径下 package com.like.common;import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annot…...

03_Node.js模块化开发
1 Node.js的基本使用 1.1 NPM nodejs安装完成后,会跟随着自动安装另外一个工具npm。 NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。 2020年3月17日&…...

Nginx支持SNI证书,已经ssl_server_name的使用
整理了一些网上的资料,这里记录一下,供大家参考 什么是SNI? 传统的应用场景中,一台服务器对应一个IP地址,一个域名,使用一张包含了域名信息的证书。随着云计算技术的普及,在云中的虚拟机有了一…...

Hive【Hive(六)窗口函数】
窗口函数(window functions) 概述 定义 窗口函数能够为每行数据划分 一个窗口,然后对窗口范围内的数据进行计算,最后将计算结果返回给该行数据。 语法 窗口函数的语法主要包括 窗口 和 函数 两个部分。其中窗口用于定义计算范围…...
Met no ‘TRANSLATIONS’ entry in project
这里写自定义目录标题 问题描述:解决方法: 问题描述: 多工程项目,执行完update Translation生成了.ts文件,也用翻译工具翻译完了,执行release时,报错“Met no ‘TRANSLATIONS’ entry in proje…...

Leetcode901-股票价格跨度
一、前言 本题基于leetcode901股票价格趋势这道题,说一下通过java解决的一些方法。并且解释一下笔者写这道题之前的想法和一些自己遇到的错误。需要注意的是,该题最多调用 next 方法 10^4 次,一般出现该提示说明需要注意时间复杂度。 二、解决思路 ①…...

“传统文化宣传片+虚拟人动捕设备”前景如何?
在数字化时代的发展下,动捕设备的加入,让传播传统文化的虚拟人更具生动表现,拉近人们与传统文化的距离,通过虚拟人动作捕捉动画宣传片,引起更多人对传统文化的关注与传承。 *图片源于网络 深圳文博会创意短片《嗨ICIF…...

节假日moc服务数据:解决用户99%的IT问题
Hi~ 伙伴们,这个国庆假期过得怎么样? 节后第一个工作日如期而至, 忙碌是消除倦怠的最佳良药。 回顾8天假日moc工程师的一组服务数据, 处理事件184起,工单23条。 其中,较为典型案例如下: 1、福建某附属医院…...

WOL唤醒配置(以太网、PHY、MAC)
目录 wol 以太网 MAC PHY RMII 通信配置 总结 wol Wake-on-LAN简称WOL,WOL(网络唤醒) 是一种标准网络协议,它的功效在于让已经进入休眠状态或关机状态的计算机,透过局域网(多半为以太网ÿ…...

MySQL复制,约束条件,查询与安全控制
MySQL之复制 复制表 我有一个表 mysql> show tables; ------------------ | Tables_in_school | ------------------ | student | ------------------mysql> select * from student; -------------------------------------------- | id | name | sec |…...
Java ES 滚动查询
滚动查询(Scroll Query)是 Elasticsearch 提供的一种机制,用于处理大量数据的查询。它允许你在多个请求之间保持“游标”,以便在后续请求中获取更多的结果。 以下是滚动查询的基本工作原理: 1 初始查询: 客户端发送一…...

机器学习算法基础--KNN算法分类
文章目录 1.KNN算法原理介绍2.KNN分类决策原则3.KNN度量距离介绍3.1.闵可夫斯基距离3.2.曼哈顿距离3.3.欧式距离 4.KNN分类算法实现5.KNN分类算法效果6.参考文章与致谢 1.KNN算法原理介绍 KNN(K-Nearest Neighbor)工作原理: 在一个存在标签的…...

深入探究 C++ 编程中的资源泄漏问题
目录 1、GDI对象泄漏 1.1、何为GDI资源泄漏? 1.2、使用GDIView工具排查GDI对象泄漏 1.3、有时可能需要结合其他方法去排查 1.4、如何保证没有GDI对象泄漏? 2、进程句柄泄漏 2.1、何为进程句柄泄漏? 2.2、创建线程时的线程句柄泄漏 …...

BLE协议栈1-物理层PHY
从应届生开始做ble开发也差不读四个月的时间了,一直在在做上层的应用,对蓝牙协议栈没有过多的时间去了解,对整体的大方向概念一直是模糊的状态,在开发时也因此遇到了许多问题,趁有空去收集了一下资料来完成了本次专栏&…...

光伏储能直流系统MATLAB仿真(PV光伏阵列+Boost DCDC变换器+负载+双向DCDC变换器+锂离子电池系统)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

C++三大特性——继承(上篇)
文章目录 目录 一、继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 一、继承的概念及定义 1.1继承的概念 继承(inherita…...

docker系列(9) - docker-compose
文章目录 9. compose编排9.1 介绍9.2 安装9.3 compose常用命令9.4 实战Springboot部署9.4.1 准备组件配置文件9.4.1.1 redis的配置文件9.4.1.2 MySQL的配置文件9.4.1.3 SpringBoot打包文件 9.4.2 准备docker-compose.yml9.4.3 启动服务9.4.4 测试验证 9.5 实战ElasticsearchKib…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...