04 面向对象(查漏补缺)

news/2024/11/25 21:59:38/

this的作用是什么?都有哪些用途?

表示初始化对象当前本身,内部存在地址,只有创建对象的时候才有this

1.调用成员变量,解决成员变量和局部变量的二义性

public Person(String name, int age) {this.name = name;
//[1] 这是给的创建的对象的字段,不是本类的this,对象创建好了才有这个this//创建对象之前根本就没有thisthis.age = age;}

2.调用其他成员方法,同一个类非static互相调用

public String getName() {
//[2]调用里面的其他非static方法//如果方法名前面没有对象,默认给的thisthis.getAge();//推荐使用return name;}

3.调用其他本类的构造方法(必须写在第一句)

//[3]调用本类的构造方法,需要传入参数
public Person(String nameo,int age,String address) {this("张三",20);//this.address = name;}

super的作用是什么?都有哪些用途?

作用:当子类需要使用父类的某一个功能的时候使用super

1.访问父类的非私有字段

2.访问父类的非私有方法

 public void eat(){System.out.println("吃东西");}
public void dowork() {System.out.println(super.name);super.eat();}

3.访问父类的构造方法

public Animal(String name){//有参构造器this.name = name;}
  public  Rabbit(String name,int age) {//注意写的是构造器,不是书写方法super(name);this.age = age;}

使用super关键字时构造方法必须写在第一句

jvm默认调用无参构造方法

用static修饰的成员和不用static修饰的成员的区别?

static所修饰的成员归类所有,所有的对象都可以访问,没有创建对象时就已经存在

没有被static修饰的成员归对象所有,随着对象的创建而存在

语法:

static 数据类型 成员变量 [=初始值]

修饰符 static 返回值类型 方法名(){}

访问方式:

类名.静态变量名

类名.静态方法名

示例

public class Car {//非静态变量属于对象对的public static int count;public  Car(){//创建对象时,计数器+1count++;}private String name;public static  int getCount(){//静态方法执行时,对象不存在,属于对象的成员也不能使用//静态方法中不能使用非静态的成员//System.out.println(name);里面报错return count;}
}
public class StaticDemo {public static void main(String[] args) {Car c1=new Car();Car c2=new Car();//对象名.静态变量名System.out.println(c1.count);//里面没有提示
//静态变量的访问的方式
//类名.静态变量名System.out.println(Car.count);//更加直观(推荐)//静态方法的访问方式//类名.静态方法()System.out.println(Car.getCount());//推荐//对象名.静态方法(),(浪费内存)System.out.println(c1.getCount());}
}

final能用在哪些地方,各自的作用是什么?

final修饰的类为最终类,可以修饰类,方法,局部变量,成员变量

保护自己的代码

1.修饰局部变量

修饰基本数据类型时:只能赋值初始化一次不可以重新赋值

修饰引用数据类型时:里面的值可以改变,地址不能变

2.修饰类

被final修饰的类不能被继承

3.修饰方法

被final修饰的方法在子类不能被重写

//final修饰的最终类不能被继承
public /*final*/ class Animal {//final修饰的变量叫常量final int age=20;//定义全局变量并初始化//初始化之后不能再次修改public final void dowork(){//里面的方法不能被子类重写System.out.println(age);final int sno;//可以先定义局部变量sno=20;//再初始化}public static void main(String[] args) {//引用类型的final变量,可以修改引用的对象中的数据,但是地址不能被修改final int[] num={1,2,3,5,674};//num=new int[]{22,33,66,55};已经修改了地址num[0]=111;}
}

说说你对静态代码块的理解

被static关键字修饰的代码块

静态代码块存在于类的内部,方法的外部

静态代码块只执行一次,并且在构造代码块和构造方法前面执行

示例:

public class CodeBlokDemo {{//构造代码块:每次创建对象时,先于构造器执行System.out.println("构造代码块");}public CodeBlokDemo(){System.out.println("构造器");}//将比较耗时间耗资源的代码块放在静态代码块里面,并且在当前类加载到内存中立即执行一次
static{System.out.println("静态代码块");
}public static void main(String[] args) {int num=1;System.out.println(num);{System.out.println(++num);}CodeBlokDemo demo=new CodeBlokDemo();}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-temjq3sM-1684759228494)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230304104128127.png)]

什么时候可以使用匿名内部类?语法是什么?

当一个类只是用一次的时候就将其申明成匿名内部类,匿名内部类必须要有实现存在

//在主板上安装打印机/*      Printer P=new Printer();//重新新建了一个类进行功能的实现,较繁琐mb.plugin(P);
*///如果打印机这个类只需要在这里使用一次,不需要重新新建一个类//创建了一个实现IUSB接口的实现类的对象IUSB P2=  new IUSB(){//接收方法用IUSB@Overridepublic void work() {System.out.println("匿名内部类");}};mb.plugin(P2);}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bFfCVZUi-1684759228496)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230304104756154.png)]

原理:

package cn.wolfcode.匿名内部类;public class inner {//匿名内部类只是用一次,并且作用只是用于实现接口public void print(){/*  class Inner implements Item{//内部类@Overridepublic void say() {System.out.println("匿名内部类");}}
Inner inner=new Inner();inner.say();
*///[1]
//将以上代码转化为匿名内部类new  Item(){//匿名内部类,中间相当于一个实现类,现在重新new并且调用里面的方法@Overridepublic void say() {System.out.println("匿名内部类");}}.say();
//[2]//快捷方式//接口名称 对象名=new 接口名();-->手动添加生成Item item=new Item() {@Overridepublic void say() {}};}
}

ic void say() {
System.out.println(“匿名内部类”);
}
}.say();
//[2]
//快捷方式
//接口名称 对象名=new 接口名();–>手动添加生成
Item item=new Item() {
@Override
public void say() {

        }};
}

}



http://www.ppmy.cn/news/75039.html

相关文章

电脑安装软件时,如何避免捆绑安装?

在网络上非正规网站下载安装软件时,经常会遇到捆绑安装的情况。你明明下载了一个软件,电脑上却多出好几个。那么我们在安装软件时,如何才能避免捆绑安装呢? 什么是捆绑安装? 捆绑安装是指用户安装一个软件时&#xff…

AC规则-2

基于RAM的远程接口 安全元件的访问规则可以通过远程应用程序管理 (RAM) 更新命令进行管理。 因此,ARA-M 和 ARA-C 各自提供一个远程接口,允许在 ARA 中存储或删除访问规则。 访问控制数据的任何远程管理都应仅通过 [GP 卡规范] 定义的安全通道协议来完成…

[VPX611]基于 6U VPX 总线架构的SATA3.0 高性能数据存储板

板卡概述 VPX611 是一款基于6UVPX 总线架构的高性能数据存储板,该板卡采用2 片XilinxKintex-7 系列FPGA 作为主控单元,FPGA 内嵌RAID 控制器,最大支持8 个mSATA 盘,最大存储容量可以达到8TByte,持续数据写入带宽可以达…

人工智能专栏第七讲——自然语言处理

自然语言处理(Natural Language Processing,NLP)是一种研究计算机如何处理和理解人类语言的学科。随着人工智能的发展,自然语言处理已经成为一个越来越重要的领域,涉及到自然语言理解、自然语言生成、语音识别、机器翻译等方面。 自然语言处理的主要挑战是语言的复杂性和…

Kuberntes云原生实战11 部署一个Deployment

大家好,从今天开始我们将正式部署实际应用。 上篇文章提到Kubenetes中有四大核心组件:Pod、Deployment、Service、ConfigMap,其中Pod是不会单独部署的,那接下来我会通过三篇文章带大家先熟悉如何部署这些基础组件,然后再通过真实项目进行部署。 今天我们先从部署Deploym…

2分钟快速上手工作流的创建与运行

前段时间,偶然发现一款低代码产品,工作流很突出,至少我觉得,设计颇有精妙之处。 可视化工作流是实现看板的第一步,要想业务人员也能了然其中的运行逻辑,这款产品可是做到了白痴也看得懂的程度!…

day06_Java中的流程控制语句

流程控制 简单来讲所谓流程就是完成一件事情的多个步骤组合起来就叫做一个流程。在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能…

从学校到职场

从学校到职场 目录 从学校到职场1、心态的转换2、沟通的重要性3、时间管理4、邮件规范 与在学校不同,在职场中,我们可能每天要和很多人打交道,同时负责着很多个不同的事情。本文主要是介绍职场上的一些合作沟通等技巧,以便于帮我们…