java是一门面向对象的程序设计语言。其中类和对象时面向对象的核心。
类?对象?实例化?方法?成员变量......等等等等,这些都是啥东东哟~
我之前一定用过 String str = "abc",String str = new String(“ABC”);这样的东东,对的,没有错,String 就是一个类,只不过是人家写好了给你用,现在是要你自己写而已,就是这样,喵~。
类的定义:
【修饰符】 class 类名 {
【修饰符】构造器名(形参列表);
【修饰符】变量类型 变量名;
【修饰符】返回值类型 方法名 (形参列表)
。。。。。
}
修饰符:
修饰符主要是对这个类进行说明和权限的控制,它有,public protected default private final abstract static..等等,修饰符是可以省略的,但是 class 和类名不能省略。
有必要说明的是,static 修饰的成员不能访问没有static修饰的成员,这主要是因为他们的生命周期不一样,static 修饰的成员会随着程序的运行而产生,没有static 成员随着进栈的需要而创建,弹栈而消失。
对于成员方法而言,用static 修饰,意味着他将不属于该类实例化出来的对象,而是属于这个类本身,通常称为类变量或者类方法;
构造器:
构造器是一个类创建对象的根本途径,如果自己没有写构造器则系统会赠送有一个默认构造器(无参),一旦自己写了构造器,系统将不再赠送。
修饰符可以省略,构造器的名称必须和类的名称一样。
构造器是隐式返回该类本身的对象。构造器中无需写return。,
构造器总是在 通过new 创建类对象时被调用,通常用于对象的初始化。
本类之间构造器的调用时被允许的,调用构造器就必须要有实例化对象,可以通过重新new 上本类来调用,但是这不太合理,所以提供了this关键字, this指代的是本类的实例化对象,也就是将来要创建的实例化类对象,
this关键字:
java提供一个this关键字,this关键字总是指向调用该方法的对象,this出现在某个方法体中的时候他指代的是谁,这是不确定的,但是他的类型时可以确定的(它指代的对象只能是当前类),只有通过实例化对象调用该方法时,才能被确定,、
最大的作用就是让一个类的方法访问该类的另一个方法或者成员变量。
方法的所属性:
java语言中 方法不能独立定义,方法只能在类体里定义;
从逻辑意义上来看,方法要么属于类本身,要么属于该类的一个对象;
永远不能独立执行方法,执行方法必须通过类、对象作为调用者调用;
局部变量:
局部变量作用用于声明起始处到该代码块的结束处。
局部变量必须进行赋值才能访问;
方法的参数传递方式:
值传递:所谓值传递,就是将实际参数的数值的副本传入方法中,而参数本身的值不改变。
可变参数:
jdk1.5以后java支持传递可变参数。
具体形式 : public static void method(String ... list){for (String li : list){System.out.println(li);}}
传入的多个可变参数会被当成数组处理。
主要是简洁
递归:
一句话就是自己调用自己。
类的继承:
类的继承是将多个类的共性提取出来作为一个父类,让子类去继承他,从而获得父类的实例变量。
class 子类 extend 父类{ }
子类在本类里想调用父类的资源就要通过关键字super,super.age super.method() 等,也可以通过super关键字调用父类的指定构造方法,super(列表参数)
要说明的是 父类中private修饰的成员子类不能访问,
重写:
重写的意思就是直面的意思,就是对父类方法的完完全全的覆盖(方法名,返回值,参数列表),当然可以在重写的时候调用父类方法,通过super。
重载:
重载不一定要发生在字父类之间,构造器、同类的方法都可以进行重载,重载就是写同样的方法名,只要是参数列表不一样就是重载,对返回值等不做要求。重载十分常见,print函数就是,为什么他可以接收 int,double,char 等类型,就是因为重载,通过传入的参数的不同,而调用不同的方法,这就是重载,无参构造,全参构造,等也是这样实现的。
多态:
编译期类型 变量 = new 运行期类型;
编译期类型 和运行期类型不一样是就产生了多态,我们在写代码是,变量调用的方法只能是编译期类型 所有的方法,不能调用运行期所有的方法,如果一定要调用就必须对变量的类型进行向下转型, 为了增强代码的健康,在向下转型之前要先进行 instanceof 看看能不能转。instanceof 的左右两边必须是统一编译期类型,左边 是 右边的对象,子类实现类、
初始化代码块:
【static】{ } 只能有static修饰,可省略。
初始化代码块总是在构造器执行之前执行。 所以可以处理代码对所有初始化完全相同,无需参数的,就可以从多个构造器中提取出来,使代码更简洁,提高代码复用。
但是,实际上初始化代码块是一种假象,在经过javac编译之后都会把初始化代码块放到构造函数的最前位置。
java 创建一个对象时,系统先为该对象的所实例变量分配内存没接着程序开始对这些变量实例化执行初始化,顺序是:先执行代码块或 声明实例变量是指定的初始值(具体看代码的先后顺序)
普通初始化代码块负责对象执行初始化,静态代码块负责对类进行初始化
静态代码块,也就是static修饰的代码块,是类相关的。系统在对类初始化阶段执行静态代码块。,所以静态代码块总是比普通代码块先执行。静态代码块同样也是类的静态成员,非静态不能访问。