淘先锋技术网

首页 1 2 3 4 5 6 7

类和对象笔记

 

1:类的概念

具有相同或者相似性质的对象的抽象

 

2:对象的概念

 

类的具体化

3: 如何创建对象?

 

类名 对象=new类名()

 

4: 变量的划分?

 

变量分为成员变量和局部变量

局部变量就是类体中,方法内的变量

成员变量是类体中,方法外的变量,又分为实例变量或者静态变量(由成为类变量)

5  实例变量与静态变量?

实例变量就是类体中,方法之外的变量,但是没有关键字static修饰,引用的时候,必须通过创建一个对象来进行访问

而静态变量也是在类体中,方法之外的成员变量,但是有关键字static修饰,引用的时候是通过类名来进行访问的

 

6:实例方法与静态方法?

实例方法就是没有关键字static修饰,而静态方法就是需要static修饰

静态方法里面访问成员变量的注意事项

 * 1:静态方法中不能出现this

 * 2:静态方法中如果需要访问实例变量或者实例方法,需要进行实例化才可以访问

 * 3:静态方法中可以直接访问静态变量(默认缺省类名点.)和静态方法

 

7:方法的传参?

   基本类型在方法传参时传递值,为一个具体的值

   引用类型在方法传参时传递地址

8: 方法的重载

方法的重载就是相同的方法名,但是参数类型和参数个数不同的方法,与返回值类型,修饰符等无关具体调用哪一个,有参数类型以及他的个数来确定,,,,不能使用方法的返回值类型作为区分方法重载的依据

 

9:this关键字

代表当前类的一个隐藏对象,会在运行期间指向调用该方法的对象

 

一般两种情形:

 

构造器中引用该构造器正在初始化的对象

在方法中引用调用该方法的对象

This可以代表任何对象,当this出现在某个方法时,它所代表的对象数不确定的,但是他的类型是确定的,他所代表的只能是当前类的实例,只有当这个方法调用时,他所代表的对象才能被确定下来,谁在调用这个方法,this就指谁

 

如果出现在实例当中,代表当前正在调用的对象

可以解决成员变量和局部变量重名的问题

This可以用来调用当前类中的构造方法

并且只能出现在第一行

注意:this不能够出现在静态方法之中,因为静态方法属于类,this代表的是当前类的一个隐藏对象,是对象

 

 

10:构造方法

又被称之为构造器,系统一般会默认分配,如若用户自己定义,系统则就不在自动加上,运行时候,是由系统自动调用,而非程序员调用,其也重载,

构造方法的作用 : 通常是用来初始化操作

11:对象数组

里面只能够存放变量,不能够存放方法

12;面向对象的三大特征

1>:封装,将对象的状态信息隐藏在对象内部,不允许外部程序直接访问内部信息,而是提供了公共的接口(方法)让外部程序进行操作和访问

封装的目的:

1:隐藏了类的实现细节

2:可以通过加入逻辑控制来操作和访问属性

3:可以进行数据检查,实现对属性的访问控制

为了实现封装,java中提供了四种访问权限

1:private

2:default

3:protected

4:public

 

 

2继承

好处:  可以获得父类的全部成员变量和方法

Java中允许创建分等级层次的类,既就是通过一个类继承另外一个类,那么该类可以直接使用被继承的类中的属性和方法(处私有外)

 

关键字:extends

 

继承的特征

1:

只允许单继承,既就是一个类只能继承一个类

2;

继承的关系是传递的

3:

继承提高了代码的复用性

 

方法的重写

发生在继承期间,子类拥有与父类相同的方法名,相同的参数类型和个数,返回值类可以一致也可以是其子类,访问权限不能缩小父类的访问权限,也叫方法覆盖

 

如果子类的属性和父类的属性同名了,那么子类的属性会覆盖父类的属性(但是内存仍然有两块)

 

Super: 在当前对象中访问直接父类中被隐藏(重名)的属性和方法

不能出现在静态方法中

 

子类继承父类,创建子类对象的时候构造方法将如何别调用??

总是先调用父类

 

1:子类构造没有super,则系统默认调用父类的无参构造

2:子类构造如果有super,则根据super显示调用父类的响应构造

3:子类构造如果有this,则先调用子类的其他构造,其他构造中如果没有super,则默认调用父类的无参构造,如果有super,则根据super显示调用父类的相应构造

4:父类中如果没有无参构造,而有有参构造,那么子类在继承期间,必须在子类构造方法中通过super显示调用父类的有参构造

 

初始化快:属于类的第四种成员(成员变量,成员方法,构造器),通常用于完成类中的一些初始化操作

初始化快可以划分为静态初始化块和非静态初始化块

静态初始化块:和对象无关,只要类被加载,就会执行类中的静态初始化

语法:static{   }

非静态初始化块:和对象有关,在调用构造方法之前,由系统默认调用

语法: {   }

 

final:表示最终的意思,可以用来修饰类,修饰方法,修饰变量,修饰对象

 

final类:表示该类不可继承

final方法:表示该方法不可被重写

final变量:表示符号常量

final对象:表示该对象无法再指向其他实例

 

Object:java中所有的类的父类

 

常用方法如下

  1. equals用来比较两个对象的地址是否相同

同一种引用类型使用==比较地址

                        

  1. toString() 返回对象的符号地址

 

多态

Java程序中的引用变量有两种数据类型,一种是编译时类型,还有一种是运行时类型,编译时引用变量是由前面所声明的类型决定,而运行时类型是由程序在运行期间给引用变量赋的值来确定,既就是同一种引用类型指向不同的实例来完成不同的操作,就是多态 

 

向上转型:使用父类的引用指向子类的对象

 

 

 

为什么需要向下转型?

因为父类的引用需要访问子类中特有的方法

 

向下转型:(引用类型的强制转换),先向上转型,然后将父类应用强制类型转换为子类类型

语法:A(父类) B(子类)

A  a=new B()

B b =(B)  a

 

 

instanceof  判断一个对象是否属于某种类型,通常配合 if 使用   语法:

If(对象名 instanceof 引用类型){

 

}

作用:为了避免向下转型中出现的类型转换错误

 

抽象类:如果一个类中没有足够的信息来描述一个对象,就可以把该类定义为抽象类

特点:

1,抽象类中可以定义成员变量,成员方法,构造方法,初始化快,抽象方法

2:抽象类不能实例化,所以抽象类必须要被继承

3:抽象类中的抽象方法必须要被重写,而普通方法可以选择性的重写

 

抽象类和普通类的区别?

1:抽象类必须使用abstract来修饰

抽象类不可以创建一个实例,

必须得被继承

 

 

 

抽象方法和普通方法的区别?

抽象方法是在普通方法前面加上abstract修饰,并且把普通方法的方法体去掉

抽象方法必须被子类重写才有意义,普通方法选择性的重写

 

接口:在java中属于一种特殊的抽象类,接口体现的是一种规范,所有实现接口的类必须遵守该接口

关键字:interface,  语法:

public interface 接口名{

 

}

接口中所拥有的成员

1:静态常量 默认可以缺省public static final

2:抽象方法,默认可以缺省public abstract

从jdk1.8开始,接口中新增的两中成员

3,默认方法

4,类方法(静态方法)

5,接口可以继承接口

6,一个类可以同时实现多个接口

7.一个类可以继承另一个类,同时实现接口     先继承再实现

 

接口注意事项

1:接口不能实例化,必须要有实现类(实现关键字implements)

2:接口可以实现多态

3.访问接口的静态方法,接口名.静态方法名

4.访问接口的静态常量,接口名.静态常量

5,使用接口的简单工厂模式

 

抽象类和接口的区别

1:从语法角度:抽象内中可以定义抽象方法,成员变量,构造器,成员方法,初始化快等,而接口中只是公开的静态常量,抽象方法,静态方法,默认方法

2:从使用角度,抽象类注重的是继承关系,而接口体现的是规范和实现分离的设计思想

 

枚举类

 

String类的用法

 

正则表达式的熟练运用

 

包装类的自动拆箱与自动装箱

 

如果把一个-128~127之间的正数自动装箱成一个Integer实例时候,实际上是直接指向对应的数组元素,因此-128~127之间的同一个整数自动装箱成Integer实例时,永远都是引用cache数组的同一个元素,但是每次把一个不再-128~127范围内的整数自动装箱成Integer实例时,系统总是重新创建一个Integer实例,既就是new一个Interger 对象出来

public class TestInteger {

   public void fun(int i){

     

   }

   public void fun1(String s){

     

   }

   public static void main(String[] args) {

      TestInteger t = new TestInteger();

      //自动装箱:将基本类型转化为对象类型的过程

      int i=1;

      Integer it =i;

      //自动拆箱:将对象类型转化为基本类型的过程

      Integer d = 20;

      int h = d;

      String s = "200";

      //将字符串转化为int类型

      Integer.parseInt(s);

      t.fun(Integer.parseInt(s));

      //int转化为字符串

      int r =100;

      Integer.toString(r);

      t.fun1(Integer.toString(r));

     

   }

}

 

java的常量池:

1:静态常量池:也叫class常量池,class文件中除了有类,方法等结构信息,还有一个常量池,专门用于保存类中的字面量等信息

 

2:运行时常量池:jvm在完成类装载后,将class文件中的常量池内容载入到内存中,并保存在方法区。