java基础学习

java基础-day07总结

封装:
  1. 数据隐藏
  2. 将程序中的相同代码进行抽取封装成方法
  3. 将一些复杂的操作封装成较简单的操作
继承:
  1. is-a的关系,接口(like-a),组合(has-a):在另一个类中有其他对象
  2. 子父类:
  3. 方法的重写:
    0 .权限修饰符和异常可变:
    1 .权限需要大于等于父类中方法的权限;
    2 .异常要小于等于父类中方法抛出的异常
多态:
  1. 前提是要有继承和实现关系,重写了父类或父接口的方法。
  2. 一个对象具有多种形态【数据类型】;
  3. 成员变量:编译看左边,运行看左边。
  4. 成员方法:编译看左边。运行看右边。
    变量不存在重写,创建子类对象要先创建父类对象。
static关键字:
  1. static能修饰类(内部类),方法和变量
  2. static修饰的数据[方法和变量]被该类的所有对象所共享;
  3. static只能修饰全局变量不能让修饰局部变量;
    被static修饰的变量和方法叫做类变量和方法;
    全局变量(成员变量和类变量)和局部变量
  4. static修饰的数据(静态数据)可以直接访问静态数据;不能直接访问非静态数据,因为静态数据是随着类的加载而出现的。
  5. 在子父亲、类继承关系中,父类方法的静态方法不能被重写为非静态方法
    static修饰的方法不能被重写(重写的话不会报错,相当于覆盖父类的方法)
  6. 静态数据可以使用类名直接调用,虽然对象也可以调用但是不推荐。如果使用对象去掉用静态数据,实际上是该对象委托该类去调用。(就算对象是空类型,也可以调用)sysetem.out.println不能输出空对象;
  7. 静态代码块:伴随着类的加载儿执行,至少执行一次。主要用于对程序的静态资源显式初始化
    static{}
    构造代码块:伴随着构造器的执行而执行,并且优先于构造器执行。主要是对程序中的成员变量进行显示初始化。
    {}
  8. 静态导入
    import static java.lang.System.*;
    导入后 代码可直接写out.print
    .练习:
    A{
    static{syso(1)}
    {2}
    public A(){3}
    }
    B extends A{
    static{syso(4)}
    {5}
    public B(){6}
    }
    test{
    main(){
    new B;
    }
    }
    1,4,2,3,5,6
final关键字:
  1. 修饰类【不能被继承,String】,方法【不能被重写】,变量【修改值】
  2. final修饰的变量不能更改值所以称为常量。
  3. 当final修饰的是全局变量时,在定义该变量时必须初始化,当final修饰的是局部变量时可以不用显示初始化,但是在使用
    之前必须赋值,之后其值不能改变。
  4. final也可以修饰方法的形式参数。方法的形式参数相当于该方法的局部变量
访问控制符:
  1. public:任意类中都可以使用,能修饰类,方法,变量
  2. default(什么都不写):
  3. protected:受保护的,能修饰方法和变量
  4. private:私有的,只能在类访问:能修饰类(内部类)
    同包同类 同包不同类 同包子父类 不同包不同类 不同包子父类
    public √ √ √ √ √
    protected √ √ √ × √
    default √ √ √ × ×
    private √ × × × ×
抽象类和接口:
  • 抽象类:
    1. 在java语法中使用使用abstract修饰的类
    2. 抽象类中有构造器,也可以自定义构造器,单不能通过抽象类子的构造器直接创建抽象类的对象:抽象类不能被实例化;
    3. 抽象类的使用主要通过创建新的类,子类继承抽象类创建子类对象,重写父类的抽象方法,然后调用;也可以通过匿名
      内部类的形式访问抽象类中的数据。
    4. 创建的新的类继承了抽象类,但是不重写抽象方法。则该类必须定义成抽象类。
    5. 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类;
    6. 抽象类和抽象方法不能被private修饰。
    7. 抽象类中可以有普通方法。
  • 接口:
    1. 接口是对抽象类更高层次的抽象。
    2. 接口中的方法全部都是抽象方法:默认由public abstract修饰,但是在JDK1.9以上,接口也可以有普通方法;
    3. 接口中的只有成员变量,并且该变量是public static final修饰;
    4. 接口没有构造器,不能创建对象,只能通过接口的实现类【显示定义实现类,匿名类】的对象来使用接口。
    5. 如果定义的子类没有实现全部的抽象方法,则该子类也要被定义成抽象方法。
    6. 类只能单继承,接口可以单实现也可以多继承。5.内部类:
内部类:
  1. 定义在一个类的内部的类。
  • 成员内部类:

在一个外部类的内部的成员位置【方法的外面】定义的类称为成员内部类
变量隐藏:
1.在局部位置有一个和成员位置同名非变量,此时如果直接访问变量,则会访问局部位置的变。
内部类访问内部类:x,this.x,coutClass。this.x
2.外部类访问内部类的资源需要先创建外部类对象,再创建内部类对象,然后通过该成员累不累对象访问,内部了地访问内部的资源则直接无条件访问
3.静态内部类
将成员内部类使用static修饰
1.静态内部类访问内外部类中的非静态数据需要先创建对象在访问,访问外部类中的静态数据则直接访问
2.在外部类中直接创建内部类对象访问内部类中的数据
3.在第三方类中访问静态内部类中的数据,通过new外部类。内部类()形式创建内部类对象,访问内部类中的数据new Outer.Inter().x。
4.局部内部类:定义在局部位置【除了成员位置的其他位置】的类称为局部内部类
1.在局部内部类中可以直接访问外部类中的数据
2.局部内部类里不能有static关键字
外部类中如果要访问局部类中的数据,先创建外部类的对象调用局部内部类所在的方法,然后在该方法中创建局部内部类对象,访问局部内部类的数据。
3.在jdk1.8以前版本,局部内部类所在的方法中的局部变量可以不用显示的用final修饰,1.8级以后,jvm会自动判断,当该变量在局部内部类使用了,则jvm认为该变量时final修饰的,如果该变量没有在局部内部类中使用,则jvm认为是普通的局部变量。
5.匿名内部类:
没有名字的内部类称之为内部类:匿名内部类一般不会单独出现,而是结合抽象类或接口作为方法的实际参数出现
1.匿名内部类一般不会单独出现
2.匿名内部类不能修改该类所处的方法中的局部变量的值
6.和equals方法:
1.都用于比较。–能比较任意类型的数据。equals只能比较引用类型的数据
2.当
比较的是基本数据类型时,比较的是基本数据的值。
3.equals属于object类的方法,二object是类java体系中的父类
4.默认情况下【不重写equals方法时】,在比较引用类型的数据时和equals方法的比较结果相同。
5.如果重写了equals方法,则安照重写之后的规则比较。
6.一般在比较基本数据类型使用
,比较引用类型用equals方法
7.包装器类
1.java是一门纯面向对象语言:
2.包装器类就是讲8大基本数据类型精心封装形成引用类型的类:
byte
short
int
long

float
double

char

boolean
3.自动装箱(自动调用valueOf,)和自动拆箱(intValue()) Long i=100不行,应为灭有这个方法。
1.自动装箱:jvm会自动将基本数据类型妆花成包装器类型
2.自动拆箱:自动装箱反着来
integer(所有整数)只会缓存-128~127的值,在其范围之内的数直接赋值。不在则进行创建新的对象。
4.集合中只能存储应用类行的数据:所以需要基本数据类型的包装器类型
7.String类和Object类
1.String类是final修饰的类
2.String类的所有对象的值都存储在常量池中。
String的赋值,如果赋值中右边有变量,则jvm会在堆内存开一个新的内存去缓存常量池的值,载内存指向堆。
3.Object类是所有类的父类

你可能感兴趣的:(java学习总结)