zoukankan      html  css  js  c++  java
  • JAVA入门第二季学习补充

    JAVA入门第二季学习补充

    1、对象的属性:对象具有的各种特征,每个对象的每个属性都有特定值。

    2、类时抽象的,对象是具体的。

    3、所有的JAVA程序都以类为组织单元。

    4、实例化:new 类名();

    ​ 把类实例化,变成对象来操作。称属性为实例变量。

    5、JAVA中的成员变量和局部变量:

    ​ 成员变量:在类中定义,用来描述对象将要有什么。可以被本类的方法和其它类的方法使用。其作用域在整个类内部都是可见的。Java中会给初始值。

    ​ 局部变量:在类的方法中定义,在方法中临时保存数据。只能在当前的方法使用。其课作用域仅限于定义它的方法。Java不会给局部变量赋予初始值。

    注意:在同一个方法中,不允许有同名局部变量,在不同的方法中允许有同名局部变量。

    两类变量同名时,局部变量具有更高的优先级。

    6、new+构造方法 创建一个新的对象;构造方法是定义在Java类中的一个用来初始化对象的方法,名称与类名相同且没有返回值。

    有参的构造器可以给成员变量赋初值;

    当没有指定构造方法时,系统会自动添加无参构造器;

    当有指定的构造方法时,无论有参无参都不会自动添加无参的构造方法;

    构造方法也可以重载;

    构造方法可以给对象的属性赋一个合理的值;

    7、基于一个类可以创建多个该类的对象,每个对象都拥有自己的成员,互相独立。Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。使用 static 可以修饰变量、方法和代码块。

    8、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员

    img

    如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如:

    img

    在普通成员方法中,则可以直接访问同类的非静态变量和静态变量

    img

    静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法

    img

    练习:

    在编辑器中分别定义了两个静态变量 score1 和 score2 ,用于保存成绩信息。定义了一个静态方法 sum ,用于计算成绩总分,在 main 方法中通过调用静态方法输出成绩总分

    public class HelloWorld {
    // 定义静态变量score1
    static int score1 = 86;
    // 定义静态变量score2
      static   int score2 = 92; 
    
    // 定义静态方法sum,计算成绩总分,并返回总分
    public  static   int sum() { 
       int n=0;
       n=score1+score2;
       return n;
      
    }
    
    public static void main(String[] args) {
        
        // 调用静态方法sum并接收返回值
    	int allScore = HelloWorld.sum();
        
    	System.out.println("总分:" + allScore);
    }
    }
    

    9、Java 中可以通过初始化块进行数据赋值。如:

    http://img.mukewang.com/5392da9600010e5503680168.jpg

    在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

    需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量

    10、封装:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

    封装的实现步骤:

    修改属性的可见性:private

    创建get/set方法:用于属性的读写(用其他普通的方法也可以给属性赋值,只是不标准而已)

    在get/set方法中加入属性控制语句:对属性值的合法性进行判断。

    11、使用包管理Java的类

    管理Java文件;解决同名文件冲突。。

    使用package关键字定义一个包,比喻放在Java源程序的第一行;包名使用“.”间隔。

    导包使用import关键字。

    包的命名规范是是用小写。

    12、Java中的访问修饰符:可以修饰属性和方法的访问范围。第二行是默认

    13、this关键字(常用于封装对象属性时)

    this代表当前对象。this.属性 操作当前对象的属性;this.方法 操作当前对象的方法。

    14、内部类:

    内部类的主要作用如下:

    1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

    2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

    3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

    问:内部类有几种呢?

    答:内部类可分为以下几种:

    • 成员内部类:

      定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

      第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class

      1、 外部类是不能直接使用内部类的成员和方法滴

      2、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。

    • 静态内部类

      1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

      2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

      3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

    • 方法内部类

      方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

      由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

    • 匿名内部类

      练习:

      下列关于内部类说法中不正确的是( )

      A内部类不能有自己的成员方法和成员变量

      B内部类可用 static 修饰符定义为静态内部类

      C内部类可作为其他类的成员,而且可访问它所在类的成员

      D内部类可以被实例化

      正确答案是A

      15、继承:

      实现代码复用,除了private修饰的父类变量和方法都可以继承到。

      16、重写:子类可以重写父类方法,调用时也会有先调用子类的方法。

      重写:返回值类型、方法名、参数类型和个数都必须相同。

      17、Java中的继承初始化顺序: 先初始化父类在初始化子类;先执行初始化对象中属性,再执行构造方法中的初始化。

      18、final 不可修改不可变化:

      final修饰类,该类不能被继承;

      final修饰方法,该方法不能被子类重写;

      final修饰属性,该属性不能隐式初始化,必须有值,或者在构造方法中赋值;

      final修饰变量,变量的值只能赋一次值,即变成常量。

      19、super关键字:代表父类对象,可以调用父类属性和方法。

      20、Object类

      1、toString()方法:在object类中定义tostring()方法返回对象的哈希code码(对象地址字符串)

      如果直接输出一个对象,会输出该对象的内存地址 javademo.GOT7@85ede7b 可以通过重写toString()来表示对象属性。

      2、equals()方法:返回值为布尔型。比较的是对象的引用是否指向同一块内存地址。new一个对象的时候其实new了它的地址。是一种引用。

      ​ Dog dog=new Dog();

      一般情况下比较两个对象的值是否相同。所以要进行重写equals。

    @Override
    public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof GOT7)) return false;//判断o对象是否是GOT7的实例
    GOT7 got7 = (GOT7) o;
    return age == got7.age;
    }

    
    21、多态:对象的多种形态【必须有继承关系】
    
    ​     引用多态:父类的引用可以指向本类的对象,也可以指向子类的对象。  (子类引用不能指向父类)               
    
    
      GOT7 got7=new GOT7();
      GOT7 got71=new Rapper();
    
    
    ​     方法多态:创建本类对象,调用方法为本类方法;创建子类对象,调用方法为子类重写的或者继承的方法。
    
    

    public class Oop01 {
    public static void main(String[] args) {
    GOT7 got7=new GOT7();
    GOT7 got71=new Rapper();
    got7.sing();
    got71.sing();//子类已经重写了sing()方法
    }
    }
    //输出结果:
    GOT7 is singing
    GOT7's rapper is singing

    
    注意:  `GOT7 got71=new Rapper();`当Rapper中有GOT7父类中没有的方法时,got71是无法调用该方法的。
    
    22、多态中的引用类型的转换:
    
       向上类型转换(隐式/自动类型转换)小类型到大类型转换。无风险。
    
       向下类型转换(强制类型转换)大类型到小类型。有风险:可以使用instanceof运算符来解决引用对象类型转换带来的安全性问题。
    
    

    public static void main(String[] args) {
    Rapper rapper=new Rapper();
    GOT7 got7=rapper;//自动类型转换
    Rapper rapper1=(Rapper) got7;//强制转换
    }

    
    

    if(got7 instanceof Vocal){//判断某个引用是否是某个类型的子类型
    Vocal vocal=(Vocal) got7;
    }else {
    System.out.println("can not");
    }

    
    23、抽象类(abstract):某个父类只是知道子类应该包含什么样的方法,但是不知道具体方法的实现。
    
    抽象类和抽象方法都需要添加关键字 abstract,且顺序为 abstract class
    
    24、接口(interface)全局常量(public static  fina)和公共抽象(public abstract)方法组成
    
    不能使用private 和protected来修饰接口
    
    继承父类实现接口的语法:
    
    class 类名 extends 父类 implements 接口1,接口2…
    
    **如果要继承父类,继承符类必须在实现接口之前。**
    
    接口必须要有实现类;接口中方法不能有方法体{},同时方法的访问修饰符不能是 private 和 protected
    
    25、UML(统一建模语言)
    
      三种常用的UML图:
    
       1用例图:表达系统如何满足业务规则和特定的用户需求信息(角色和功能)
    ![](https://img2020.cnblogs.com/blog/1057470/202011/1057470-20201106112143991-2025752700.png)
    
    
    
    
    ​    2序列图:按照交互发生的一些列顺序。(角色和内存对象的关系)
    ![](https://img2020.cnblogs.com/blog/1057470/202011/1057470-20201106112207871-1427193185.png)
    
    
    
    
    ​    3类图:业务逻辑(类和类的关系以及方法)
    
    ![](https://img2020.cnblogs.com/blog/1057470/202011/1057470-20201106112231588-1170496186.png)
    
    
    
    常用的建模工具:Visio、 RationalRose、PowerDesigner 
    
    26、综合练习:
    ![](https://img2020.cnblogs.com/blog/1057470/202011/1057470-20201106112432153-660932055.png)
  • 相关阅读:
    条款04:确定对象在使用前已经被初始化
    条款06:若不想使用编译器自动生成的函数,就应该明确拒绝
    计算机操作系统之死锁的原因和必要条件
    条款10:令operator=返回一个reference to *this
    条款02:尽量以const,enum,inline代替#define
    条款11:在operator=处理自我赋值
    计算机操作系统之进程与线程
    堆排序
    NodeJS For Windows
    我常用的linux命令
  • 原文地址:https://www.cnblogs.com/yunxiaoqian/p/13911714.html
Copyright © 2011-2022 走看看