类和对象笔记
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中所有的类的父类
常用方法如下
- equals用来比较两个对象的地址是否相同
同一种引用类型使用==比较地址
- 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文件中的常量池内容载入到内存中,并保存在方法区。