IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Week7 -> 正文阅读

[开发工具]Week7

1.Debug功能实践例6.4,6.5

class AddClass{
    public int x=0,y=0,z=0;
    AddClass(int x){
        this.x=x;
    }
    AddClass(int x,int y) {
        this(x);this.y=y;
    }
    AddClass(int x,int y,int z){
        this(x,y);this.z=z;
    }
    public int add(){
        return x+y+z;
    }
}
public class T extends AddClass{
    int a=0,b=0,c=0;
    T(int x){
        super(x);a=x+7;
    }
    T(int x,int y){
        super(x,y);a=x+5;b=y+5;
    }
    T(int x,int y,int z){
        super(x,y,z);a=x+4;b=y+4;c=z+4;
    }
    public int add() {
        System.out.println("super:x+y+z= "+super.add());
        return a+b+c;
    }

    public static void main(String[] args){
        T t1=new T(2,3,5);
        T t2=new T(10,20);
        T t3=new T(1);
        System.out.println("a+b+c= "+t1.add());
        System.out.println("a+b= "+t2.add());
        System.out.println("a= "+t3.add());
    }
}

?

使用idea如何进行调试

? ? ? ? ? ? ? ? 首先在代码行的左侧点击鼠标左键出现红色圆圈,并且当前行标记成红色后,证明该行被打上断点。

? ? ? ? ? ? ? ? 然后点击右上方小虫子一样的按钮,程序会以debug的方式运行。

图标解释:?

图标解释
断点标记断点标记
在这里插入图片描述debug方式运行
在这里插入图片描述执行下一行1(F8)
在这里插入图片描述进入方法内部2(F7)
在这里插入图片描述进入方法内部3(Alt+Shift+F7)
在这里插入图片描述跳出方法4(Shift+F8)
在这里插入图片描述跳转到光标所在行(Alt+F9)
在这里插入图片描述计算表达式(Alt+F8)
在这里插入图片描述放行(F9)

转自 (Java断点调试 idea断点调试 debug教程_梦幻蓝雨的博客-CSDN博客

?按F7后进入

然后进入AddClass中?

2.实现两个对象之间互发消息

class FighterPlane{
    String name;
    int missileNum;
    public FighterPlane(String _name,int _missileNum){
        name=_name;
        missileNum=_missileNum;
    }
    public void fire(){
        if(missileNum>0){
            System.out.println("now fire a missile!");
            missileNum-=1;
        }
        else{
            System.out.println("No missile left!");
        }
    }
}
class A{
    FighterPlane fp;
    public  A(FighterPlane fpp){
        this.fp=fpp;
    }
    public void invoke(){
        //A对象发送消息给FighterPlane的对象
        System.out.println(fp.name);
    }
}
public class T {
    public static void main(String[] args){
        FighterPlane ftp=new FighterPlane("su35",10);
        A a=new A(ftp);
        //发送消息,产生调用关系
        a.invoke();
    }
}

在T中创建了ftp对象引用,然后创建了A对象,并将ftp引用作为参数传入,而且在创建A的对象中调用了A的构造函数,从而将fp指向了ftp引用指向的对象,下一行调用了A类的invoke函数,即在这个过程中给类A发送了消息,而invoke函数又调用了FighterPlane的函数,从而实现A类向FighterPlane发送消息。

能否发送消息取决于以下三个条件:
1.应用必须真实引用了特定的对象,否则会在运行时抛出NullPointerException异常。
2.被访问的对象必须定义了相应的属性和方法,否则编译不会通过。
3.被访问的属性和方法必须要有可访问的权限。

3.组合与继承的区别及其使用场景

组合是通过对象内部的属性引用来实现,使对象间的耦合性较为松散。?

继承是通过extends关键字实现,Java中的继承只能是单继承(一个类只允许有一个父类)。继承的好处是可以尽量让相同的属性或功能复用。

区别:组合现象是一个类的对象引用是另一个类的属性,对象引用可以指向其对应类的任何一个对象,具有低耦合性,但对象只能调用其规定好的方法,无法修改;继承是子类将父类的属性和方法全部继承下来,子类可以重载和覆盖父类的方法,继承具有类似一对一的属性,耦合性较高。
宜用组合的场景:一个类的对象与另一个类的对象具有一对多关系,一个类的方法对于另一个类来说永远不用改变。
宜用继承的场景:两个类的对象具有一对一的关系,一个类需要重载或覆盖另一个类的方法;抽象类。需要使用另外一个类的作用时但你不想被其他的类访问用继承。

4.Java的运行时多态,其作用

运行时多态是通过方法覆盖实现(子类覆盖父类方法)。使用父类引用指向子类对象,再调用某一父类中的方法时,不同子类会表现出不同结果。

class animal{
    public void bark(){
        System.out.println("animal");
    }
}
class dog extends animal{
    public void bark(){
        System.out.println("dog");
    }
}
class cat extends animal{
    public void bark(){
        System.out.println("cat");
    }
}
public class T {
    public static void main(String args[]){
       dog d=new dog();
       cat c=new cat();
       fp(d);
       fp(c);
    }
    static void fp(animal a){
        a.bark();
    }
}

??

5.接口改写例6.8

package com.test;

interface Shapes{
    public  abstract double getArea();
    public  abstract double getPerimeter();
}
class Rect implements Shapes{
    int x,y;
    double width,height;

    public Rect(int x,int y,double width,int height){
        this.x=x;
        this.y=y;
        this.width=width;
        this.height=height;
    }
    public double getArea() {
        return width*height;
    }
    public double getPerimeter() {
        return 2*(width+height);
    }
}
class Triangle implements Shapes {
    int baseA,baseB,baseC;
    double m;

    public Triangle(int x,int y,int z) {
        baseA=x;
        baseB=y;
        baseC=z;
        m=(baseA+baseB+baseC)/2.0;
    }
    public double getArea() {
        return (Math.sqrt(m*(m-baseA)*(m-baseB)*(m-baseC)));
    }

    public double getPerimeter() {
        return baseA+baseB+baseC;
    }
}
class Circle implements Shapes{
    int x,y;
    double d,r;
    public Circle(int x,int y,int width) {
        this.x=x;
        this.y=y;
        d=(double)width;
        r=width/2.0;
    }
    public double getArea() {
        return (r*r*Math.PI);
    }
    public double getPerimeter() {
        return (2*Math.PI*r);
    }
}

public class T {
    public static void main(String args[]){
        Rect rect=new Rect(5,15,25,25);
        Triangle tri=new Triangle(5,5,8);
        Circle cir=new Circle(13,90,25);

    }
}

6.覆写equals方法

class Test{
    public boolean equals(Object obj){
        if(this==obj) 
        {
            System.out.print("调用equals")
            return true;
        }
        return false;
    }
}

7.instanceof的使用场景

a为对象的引用,A为类

a instanceof A

如果a为A的实例或A子类的实例,则返回true(如果a为A父类的实例,返回的是false)?,如果a对象的实例与A没有任何关系,则不能通过编译

public interface A {}
 
public class B implements A{} 

public class C extends B{}

public class Test {
 
    public static void main(String[] args) {
 
        A a = new B();
        B b = new B();
        result = a instanceof A;
        System.out.println(result); // 结果:true 
        result = a instanceof B;
        System.out.println(result); // 结果:true 
        result = b instanceof A;
        System.out.println(result);// 结果:true 
        result = b instanceof B;
        System.out.println(result);// 结果:true 

        B b2 = new C();
        result = b2 instanceof A;
        System.out.println(result); // 结果:true 
        result = b2 instanceof B;
        System.out.println(result); // 结果:true 
        result = b2 instanceof C;
        System.out.println(result); // 结果:true 
}

8.抽象类和接口的异同及其使用场景

两者都有抽象方法,都不能实例化,都可以通过自己的声明去引用具体子类。

抽象类接口
属性可以有域变量只能是静态常量
成员方法可以有具体方法,而且具体方法可以调用抽象方法。全部是抽象方法
实现策略必须有子类继承所有方法必须有实在的方法体
扩展性

?

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:41:44  更:2021-10-20 12:41:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:25:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码