首页 > 编程语言 >重识Java第五天打卡----面向对象进阶1【static关键字、单例、继承】

重识Java第五天打卡----面向对象进阶1【static关键字、单例、继承】

时间:2022-10-08 14:37:48浏览次数:41  
标签:重识 Java 静态 子类 成员 static 打卡 父类 方法


一、static关键字

1.定义及用法

(1)定义[相关概念]

  • static是静态的意思,可以用来修饰成员变量、成员方法。
  • static修饰成员变量之后称为静态成员变量(or类变量),修饰方法之后称为静态方法(类方法)。
  • static修饰后的成员变量,可以被类的所有对象共享(访问、修改)。

(2)用法

static修饰成员变量时,被称为静态成员变量。
其特点是:属于类、加载一次,内存中只有一份
其访问格式为:①类名.静态成员变量(推荐)②对象名.静态成员变量(不推荐)

static修饰成员方法时,被称为静态成员方法
特点,格式均与静态成员变量相同;需要注意的是静态成员方法只能访问静态成员变量,且不可以出现this关键字

2.具体代码

public class Student
private String name;
∥1.实例方法:无static修饰的,属于对象的
public void study(){
System.out.println(name+"在好好学习~~~");
}
∥2.静态方法:有static修饰,属于类和对象共享的
public static int getMax(int a int b){
return a>b?a:b;
}
public static void main(String[]args){
∥1.类名.静态成员方法
System.out.println(Student.getMax(10,2));
川注意:同一个类中访问静态成员类名可以不写
System.out.println(getMax(2,10));
∥2.对象.实例成员方法
∥study();∥会报错
Student s new Student();
s.name="猪八戒";
s.study();
∥3.对象静态成员方法。(不推荐)
System.out.println(s.getMax(20,10));

3.static基础应用知识

(1)工具类

Q:什么是工具类?

A:类中都是一些静态方法,每个方法都是以完成一个共用的功能为目的,这个类用来给系统开发人员共同使用的。这样的类就是工具类

Q:工具类有什么用?

A:①调用方便(直接用类名.静态方法名即可);②提高了代码复用

Q:工具类有什么要求?

A:

  • 建议工具类的构造器尽量私有化处理
  • 工具类不需要创建对象

(2)代码块

Q:什么是代码块?

A:代码块是类的5大成分之一(成员变量、构造器,方法,代码块,内部类),定义在类中方法外。

重识Java第五天打卡----面向对象进阶1【static关键字、单例、继承】_java

(3)单例设计模式

① 设计模式的定义:开发中经常遇到一些问题,一个问题通常有n种解法的,但其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。

② 单例设计模式的作用:可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象

③两种常见的单例设计模式:

  • 饿汉设计模式 – 怕饿着,所以先创建好备着
    具体指:在用类获取对象的之前,提前创建好对象。
/**a、定义一个单例类*/
public class SingleInstance{
/**a.定义一个静态变量存储一个对象即可:属于类,与类一起加载一次*/
public static SingleInstance instance new SingleInstance ();

/**b.单例必须私有构造器*/
private SingleInstance ();
System.out.println("创建了一个对象");
}
  • 懒汉设计模式 – 懒得提前创建,要用了才创建
    具体指:在真正需要该对象的时候,才去创建一个对象(延迟加载对象)。
/**定义一个单例类*/
class SingleInstance{
/**定义一个静态变量存情一个村象即可:属于类,与类一起加载一次*/
public static SingleInstance instance //null
/**单例必须私有构造器*/
private SingleInstance(){}
/**必须提供一个方法返回一个单例对象*/
public static SingleInstance getInstance(){
instance = new SingleInstance();
return instance;

注意!使用单例设计模式的类若后续需要获取和修改参数,则一定要提供对外的接口,比如getxxx()方法和setxxx()方法。

二、面向对象三大特性之二 ---- 继承

1.基本概念

什么是继承?

继承是java允许我们用extends关键字,让一个类和另一个类建立起一种父子关系。

继承的好处

提高代码复用性,减少代码冗余,增强类的功能扩展性。

继承的特点

①子类可以继承父类的属性和行为,但是子类不能继承父类的构造器
②Java是单继承模式:一个类只能继承一个直接父类。【但是接口可以有多个父级接口】
③Java不支持多继承、但是支持多层继承。
④Java中所有的类都是Object类的子类。

2.易错点

(1)一些特殊的变量能否继承

①父类的私有成员变量/方法 – 可以继承,但是不可以直接访问,可以使用super.xx访问
②父类的静态成员 --子类可以直接共享访问,但不应理解为继承(尚有争议)

(2)在子类中访问成员遵循 就近原则

重识Java第五天打卡----面向对象进阶1【static关键字、单例、继承】_jvm_02

(3)构造器问题

子类中所有的构造器默认都会先访问父类中无参的构造器,再执行自己。

3.方法重写

定义:在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法

注意点:

  1. 最好在重写的方法之上都加上@override重写注解(加上该注解后如果重写错误,编译阶段会出现错误提示。)
  2. 重写方法的名称、形参列表必须与被重写方法的名称和参数列表一致。
  3. 私有方法不能被重写。
  4. 子类重写父类方法时,访问权限必须大于或者等于父类 (缺省 < protected < public)
  5. 子类不能重写父类的静态方法,若重写则会报错。


标签:重识,Java,静态,子类,成员,static,打卡,父类,方法
From: https://blog.51cto.com/u_15818359/5737606

相关文章

  • 重识Java第七天打卡----面向对象进阶3【内部类、静态内部类、匿名内部类】
    一、内部类(InnerClass)注:有些地方把内部类叫做NestedClass,这一般是C++的叫法;在Java中常见的是称之为InnerClass1.什么是内部类?内部类:即定义在类中的类,可以理解为是外部类......
  • 重识Java第十天打卡----JavaSwing遇到的一些问题
    一、中文乱码问题1.组件乱码描述说明有可能使用错了组件,比如今天用列表框时,我就用了awt的LIst组件,结果,标题上的中文能正常显示,按钮上的中文却是方框,出现乱码。如右所示:原因......
  • 【重识Java】你这 数组 挺能藏啊?
    本文主要介绍一些关于Java数组的易错易忘的知识点,并不系统完善,如有在意,还请见谅。一、数组初始化......
  • 【重识Java】一文弄清Java字符串易混易错点
    本文主要介绍一些关于Java字符串的易错易忘的知识点,并非系统完整介绍,如有在意,还请见谅。一、字符串的概念1.字符串到底是什么......
  • Java小白自学笔记——线程
    一、线程的相关概念1.程序:是为完成特定任务,用某种语言编写的一组指令的集合。简单地说:就是我们写的代码2.进程:(1)进程是指运行中的程序,启动了一个进程,操作系统就......
  • Java自学小白——Set系列集合、Map集合体系
      一、Set系列集合Set系列集合特点无序:存取顺序不一致不重复:可以去除重复无索引:没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取元素Set集合......
  • bug:Handler dispatch failed; nested exception is java.lang.StackOverflowError
    【异常】Handlerdispatchfailed;nestedexceptionisjava.lang.StackOverflowError【分析】可能存在递归函数导致的栈溢出错误【原因】str.matches("\d+(,\d+)*"st......
  • Java设计模式 —— 桥接模式
    8桥接模式8.1桥接模式概述BridgePattern:将抽象部分与它的实现部分解耦,使得两者都能够独立变化。桥接模式是一种很实用的结构型模式,如果系统中某个类存在两个独......
  • Java_多线程
    Java_多线程1.实现多线程1.1进程和线程【理解】进程:是正在运行的程序是系统进行资源分配和调用的独立单位每一个进程都有它自己的内存空间和系统资源线程:是进程......
  • Java_网络编程
    Java_网络编程1.网络编程入门1.1网络编程概述【理解】计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网......