写点什么

Surpass Day——IntelliJ IDEA 和 eclipse 的使用、super 关键字

作者:胖虎不秃头
  • 2022 年 10 月 09 日
    河南
  • 本文字数:6081 字

    阅读完需:约 20 分钟

Surpass Day——IntelliJ IDEA和eclipse的使用、super关键字

关于 super 关键字和 this 关键字

1、super 和 this 的共同特征

1)都能出现在实例方法和构造方法中


2)"super." "super()" "this." "this()"


3)不能使用在静态方法中


4)大多数情况下可以省略


5)只能出现在构造方法的第一行

2、super 和 this 不同的特征

2.1 关于 this 关键字


1)在区分局部变量和实例变量的时候不能省略;


public void setName(String name){    this.name = name;}
复制代码


点击并拖拽以移动


2)this()通过当前的构造方法去调用 "本类" 中的其他构造方法,目的是:代码复用


2.2 关于 super 关键字


1)super(实参列表)通过当前的构造方法去调用 "父类" 中的构造方法,目的是:创建子类对象的时候,先初始化父类型特征,实现代码复用


public class Super {    public static void main(String[] args) {        new B();    }}class  A{    public A() {        System.out.println("A类的构造方法!");    }}class B extends A{    public B(){        super();//子类构造方法的第一行无论写不写都会默认存在super(),但不与this()共存;        System.out.println("B类中的构造方法");    }}
复制代码


点击并拖拽以移动


2)重要结论: 当一个构造方法的第一行: 既没有 this()又没有 super()【this()和 super()不能共存】的话,默认会有一个 super(); 表示通过当前子类的构造方法调用父类的无参数构造方法,所以必须保证父类的无参构造方法是存在的;


public class Super {    public static void main(String[] args) {        new B();    }}class  A{    public A() {        System.out.println("A类的构造方法!");    }}class B extends A{    public B(){        this("zhangsan");//此处调用下面有参的构造方法,同时也会触发super()调用父类的构造方法        System.out.println("B类中的构造方法");    }    public B(String name){        super();//无论如何,构造方法中都会存在一个super()        System.out.println("B类中的有参数构造方法String");    }}
复制代码


点击并拖拽以移动



点击并拖拽以移动


​编辑


3)理解:super 的作用:模拟现实世界要想有儿子,必须把父亲造出来;它代表的是当前对象(this)的父类型特征;


4)无论怎么折腾,父类的构造方法都会先执行


不管创建什么对象,老祖宗的 object 类的无参构造方法一定会执行(object 类中的构造方法是处于"栈顶部",最后调用最先结束)


5)super 不是引用不保存内存地址也不指向任何对象,只是代表当前对象内部那一刻父类型的特征;


6)"super."后面不仅可以访问属性,还可以访问方法;


7)练习


public class Super {    public static void main(String[] args) {        new C();    }}/*class Object{    public Object(){    }}*/class  A /*extends Object*/{//Object这个是Sun公司写的    public A() {        //有super()        System.out.println("1");    }}class B extends A{    public B(){        //有super()        System.out.println("2");    }    public B(String name){        //有super()        System.out.println("3");    }}class C extends B{    public C(){        this("zhangsan");        System.out.println("4");    }    public C(String name){        this(name,20);        System.out.println("5");    }    public C(String name,int age){        super(name);        System.out.println("6");    }}
复制代码


点击并拖拽以移动


输出结果



点击并拖拽以移动


​编辑

3、何时使用,何时省略 super 关键字?

1)何时使用 super(实参列表) 当子类中构造方法访问父类 private 修饰的实例变量时,此时无法访问,必须通过 super(实参列表)调用父类的构造方法才可访问父类 private 修饰的实例变量;


2)初始化当前对象父类型的特征,并没有创新新的对象,实际上对象只创建一个;


3) "super."何时不能省略? 父中有,子中又有,如果想在在子中访问"父的特征"时不可以省略


public class Super {    public static void main(String[] args) {        Vip v = new Vip("zhangsan");        v.shopping();    }}class Customer{    String name;//相当于super.name    public Customer(){    }    public Customer(String name){        super();        this.name = name;    }}class Vip extends Customer{    String name;//相当于this.name  允许同名变量出现,此时的name为空,但super和this访问的name不同    public Vip(){    }    public Vip(String name){        super(name);    }    public void shopping() {        System.out.println(this.name + "正在购物!");//null        System.out.println(super.name + "正在购物!");//zhangsan        System.out.println(name + "正在购物!");//null    }}
复制代码


点击并拖拽以移动



点击并拖拽以移动


​编辑


1、关于 IDEA 工具的快捷键以及一些简单的设置

1)字体设置 File ---> setting ---> 输入 font --->设置字体样式以及字号大小;


2)快速生成 main 方法: psvm


3)快速生成 Sys.out.println(): sout


4)注意 IDEA 是自动保存,不需要 Ctrl + S


5)删除一行: Ctrl + Y


6)运行: 代码上右键--->run 点击代码左侧的绿色箭头 Ctrl + Shift + F10


7)左侧窗口的列表的展开和关闭: 左箭头关闭; 右箭头打开; 上下箭头移动;


8)退出任何窗口 Esc 键


9)任何新增/新建/添加的快捷键: Alt + Insert


10)窗口变大、变小: Ctrl + Shift + F12


11)切换 Java 程序 Alt + 左右箭头


12)切换窗口 Alt + 标号(打开、关闭)


13)提示方法的参数: Ctrl + P


14)复制光标当前行代码到下一行: Ctrl + D


15)定位方法/属性/变量 光标停到某个单词下面,按 Ctrl 键,出现下划线,点击

2、关于 eclipse 工具的快捷键以及一些简单设置

2.1. 文件相关的快捷键

1)新建一个工程、文件、文件夹等内容 Ctrl + N


2)在对话框中进行的快捷操作 Alt + 带下划线字母


3)窗口最大化/还原 Ctrl + M


4)打开被选中的工程、包、文件等的属性窗口 Alt + Enter


5)运行程序 Ctrl + F11


6)调试模式运行程序 F11


7)重命名工程名、文件名、方法名、变量名 右键 —> Refactor —> Rename Alt + Shift + R F2


8)重命名工程名、文件名 F2


9)打开编辑窗口查看目录 Ctrl + E


10)切换到当前编辑窗口的上一个窗口 Ctrl + Page Up


11)切换到当前编辑窗口的下一个窗口 Ctrl + Page Down

2.2 编写代码时常用的快捷键

1)向上(下)复制光标所在行内容或选中内容 Ctrl + Alt + 向上(下)键


2)向上(下)移动光标所在行内容或选中内容 Alt + 向上(下)键


3)删除当前行/光标所在行 Ctrl + D


3)在光标所在行下添加一个空格 Shift + Enter


4)错误给出解决方案 Ctrl + 1


5)自动提示 Alt + ?

3、Java 程序基础练习题

3.1 题目一:Vehicle Driving

要求:

请定义一个交通工具(Vehicle)的类,其中有属性:

1)速度(speed),

2)体积(size),

3)方法移动(move()),

4)设置速度(setspeed(int speed,) ),

5)加速 speedUp (),

6)减速 speedDown();

        最后在测试类 Vehicle 中的 main()中实例化一个交通工具对象并通过方法给它初始化 speed,size 的值并且打印出来,用加速减速的方法对速度进行改变;


public class HelloWorld {    public static void main(String[] args) {        //无参数构造方法创造对象        Vehicle v = new Vehicle();        //有参数构造方法创造对象        Vehicle v1 = new Vehicle(100.0,5.0);        //通过set方法赋值        v.setSpeed(100.0);        System.out.println("oldSpeed : " + v.getSpeed());        v.setSize(5.0);        //调用加速方法        v.speedUp(10.0);        System.out.println("addSpeed : " + v.getSpeed());        //调用减速方法        v.speedDown(5.0);        System.out.println("downSpeed : " + v.getSpeed());    }}
class Vehicle { private double speed; private double size; //无参构造方法 public Vehicle() { } //有参构造方法 public Vehicle(double speed, double size) { this.speed = speed; this.size = size; } public double getSpeed() { return speed; } //设置速度的方法 public void setSpeed(double speed) { this.speed = speed; } public double getSize() { return size; } public void setSize(double size) { this.size = size; } //交通工具的移动方法 public void move() { System.out.println("公共汽车起步行驶"); } //加速方法 public void speedUp(double addSpeed) { //在原来基础上加 //int oldSpeed = this.getSpeed() this.setSpeed(this.getSpeed() + addSpeed); } //减速方法 public void speedDown(double delSpeed) { //在原来基础上减 //int oldSpeed = this.getSpeed() this.setSpeed(this.getSpeed() - delSpeed); }}
复制代码


点击并拖拽以移动

3.2 题目二:Calculator

要求:

1)定义名为 Number 的类其中有两个整型数据成员 n1 和 n2 应声明为私有。

2)编写构造方法赋值 n1 和 n2 初始值;

3)为该类定义加 addition()、减 subration()、乘 multiplication()、除 division()公有实例方法;

4)分别对两个成员变量执行加、减、乘、除的运算;


public class JiSuanQi {    public static void main(String[] args) {        Number n1 = new Number();        Number n2 = new Number(5,41);        Number n3 = new Number(82,6);        Number n4 = new Number(24,6);        n1.addition();        n2.subration();        n3.multiplication();        n4.division();    }}class Number {    private int n1;    private int n2;
public Number(int n1, int n2) { this.n1 = n1; this.n2 = n2; }
public Number() { this(10,20); }
public void setN1(int n1) { this.n1 = n1; }
public void setN2(int n2) { this.n2 = n2; }
public int getN1() { return n1; }
public int getN2() { return n2; }
public void addition(){ System.out.println(n1 + "+" + n2 + "=" + (n1+n2)); System.out.println(this.getN1() + "+" + this.getN2() + "=" + (this.getN1() + this.getN2())); }
public void subration(){ System.out.println(n1 + "-" + n2 + "=" + (n1-n2)); System.out.println(this.n1 + "-" + this.getN2() + "=" + (this.getN1() - this.getN2())); }
public void multiplication(){ System.out.println(n1 + "*" + n2 + "=" + (n1*n2)); System.out.println(n1 + "*" + n2 + "=" + (getN1() * getN2())); }
public void division(){ System.out.println(n1 + "/" + n2 + "=" + (n1/n2)); }}
复制代码


点击并拖拽以移动

3.3 题目三:People Message

要求:

1)定义一个人类 People 该类中应该有两个私有属性姓名 name 和年龄 age;

2)定义构造方法用来初始化数据成员;

3)定义显示 display 方法将姓名和年龄打印出来;

4)在 main 方法中创建人类对象的实例然后将信息显示;


public class People {    public static void main(String[] args) {        Peason p = new Peason("Sam",18);        p.display();        Peason p2 = new Peason();        p2.setName("张三");        p2.display();    }}class Peason{    private String name;    private int age;
public void display(){ System.out.println("name:" + this.getName() + "," + "age:" + this.age); }

public Peason() { }
public Peason(String name, int age) { this.name = name; this.age = age; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public void setAge(int age) { this.age = age; }
public int getAge() { return age; }}
复制代码


点击并拖拽以移动

3.4 题目四:Add Time

要求:

1)定义为 MyTime 的类其中应有三个整形成员时 hour 分 minute 秒 second;

2)为了保证数据的安全性这三个成员变量应声明为私有;

3)为 MyTime 类定义构造方法以方便创建对象时初始化成员变量;

4)再定义 display 方法用于将时间信息打印出来;

5)为 MyTime 类添加一下方法:

        addSecond(int sec)

        addMinute(int min)

        addHour(int hou)

        subSecond(int sec)

        subMinute(int min)

        subHour(int hou)


public class Time {    public static void main(String[] args) {        MyTime t1 = new MyTime(13,20,15);        t1.display();        t1.addSecond(121);        t1.display();    }}class MyTime{    private int hour;    private int minute;    private int second;
public void addSecond(int sec){ int oldSec = this.getSecond(); int newSec = oldSec +sec; if(newSec < 60){ this.setSecond(newSec); }else if(newSec == 60){ this.addMinute(1); this.setSecond(0); }else{ this.addMinute(newSec / 60); this.setSecond(newSec % 60); } } public void addMinute(int min) { this.setMinute(this.getMinute() + min); }//由于下列方法类似,不再赘述解决数学问题 //还可以采用秒处理的方法对此类题进行处理 public void addHour(int hou){
} public void subSecond(int sec){
} public void subMinute(int min){
} public void subHour(int hou){
}
public void display(){ System.out.println(this.getHour() + "时" + this.getMinute() + "分" + this.getSecond() + "秒"); }
public void setHour(int hour) { this.hour = hour; }
public void setMinute(int minute) { this.minute = minute; }
public void setSecond(int second) { this.second = second; }
public int getHour() { return hour; }
public int getMinute() { return minute; }
public int getSecond() { return second; }
public MyTime() { }
public MyTime(int hour, int minute, int second) { this.hour = hour; this.minute = minute; this.second = second; }}
复制代码


点击并拖拽以移动


\



发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022.07.29 加入

还未添加个人简介

评论

发布
暂无评论
Surpass Day——IntelliJ IDEA和eclipse的使用、super关键字_Java_胖虎不秃头_InfoQ写作社区