JavaOO基础理论知识
注:本篇主要针对初学java者,对java各种实例样式,一些容易混淆的知识点做一个分析。
1、万物皆为对象,类是蓝图与模板。对象有属性与方法。
类实例:
package domain;
public class Person {
private String name;
private int age;
private char gender;
public Person() {
}
public Person(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public void running(String str){
System.out.println("女孩子跑步就是好看");
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", gender=" + gender
+ "]";
}
}
2、创建对象实例:
Person a = new Person(“王大锤”,“20”,“男”); (实例化对象是通过调用对象的构造函数完成的,这里调用就是上面类第二个构造器)
3、静态代码块实例:
public class Person {
static{
System.out.println("静态代码");
};
}
——静态代码格式:static{//code};
——特点;随着类的加载而执行,并且只会执行一次,并且还优先于主函数。作用;用于给类进行初始化函数。
——作用:可以用于初始化静态成员;
4、构造函数块实例:
public class Person {
{
System.out.println("构造函数块");
};
}
——格式:{//code};
——构造函数块是随着对象的创建而加载一次,实例初始化代码块中的语句在任何父类构造器调用之后,在子类构造器调用之前执行。
5、构造函数实例:
public class Person {
public Person(){}; //无参构造器
public Person(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = gender;//有参构造器
}
}
——格式:public 类名 (参数){//参数赋值code}
——构造器能被重载,所以一个类可以有多个构造器,当有有参构造器时默认无参构造器就会被覆盖,所以需要手动添加
6、静态代码块、父类构造器、构造函数块、子类构造器的加载顺序;
对象时加载次序:静态代码块(只加载一次)→→父类构造器→→ 构造函数块(类每次创建加载一次)→→子类构造器;
7、方法实例:
public void mothod(String str){
System.out.println("方法实例");
}
——方法格式:访问修饰符 返回参数类型 方法名(参数){//code}
——首先访问修饰符的类型有四种:public protected default private ;
——返回类型可以是:8种基本类型,引用类型,void;
——方法名:首字母小写,单词之间最好遵循驼峰标志;
——如果有返回值,方法内必须要有return 关键字和返回值。
——(强调一次,java中只有值传递,没有引用传递。)
8、抽象类实例:
public abstract class abstractName {
public abstract void mothod1();//抽象方法
};
——抽象类格式:访问修饰符 抽象关键字 class 抽象类名{//自定义抽象方法 }
——在抽象类可以有自己的属性,可以有自己的构造函数,可以写set和get方法,可以有具体方法的实现;但是不能被实例化;
——抽象类是拿来继承的;一般类能继承抽象类;
——抽象类能继承一般体类;抽象类继承抽象类;抽象类能实现接口;
9、接口实例:
public interface interfaceName {
void mothod1();//接口方法
void mothod2();//接口方法
};
——接口格式:访问修饰符 interface 接口名{};
——接口中只能定义静态的常量: 任何类型 final, static 字段。
——接口中定义的方法都默认是公开的,所以方法可以省略 public abstract 关键字
——接口没有构造函数,不能被实例化;
——接口是拿来实现的;一般类能实现接口,也能同时实现多个接口;
——接口只能继承接口;
10、抽象方法实例:
public abstract class abstractName {
public abstract void mothod1();//抽象方法
};
——抽象方法格式:public abstract 返回类型 mothodName (参数);
——只要有抽象方法的类,就必须写成抽象类。但是没有抽象方法的类也能声明成抽象类
11、继承类实例
public class Person{}
public class Girl extends Person{}
——继承类格式:访问修饰符 类名 继承关键字 继承类名 { }
——接口能继承接口,继承只能是单继承,java只支持单继承
12、实现接口实例:
public class Girl implements Person(){ };
——实现接口格式:访问修饰符 class 类名 实现关键字 被实现接口或抽象类;
——实现可以是多实现,多个被现实类之间用逗号分隔
13、数组创建格式
——List<> list = new ArrayList<>();
——int[] a=new int[o];
——rivate String[] name ={"","","",""};
14、重载与重写:
——重载是指在一个类里面,有多个同名方法,但是参数类型,参数个数,参数顺序的不同;调用者调用而选择不同方法;
——重写是指在有继承关系的两个类里面,子类对一个方法的重新实现,方法名,返回类型都得一样。
15、this与super
——this是对类对象本身的引用,this'还可以用于调用本类的构造器。
——super是指在子类或者重新实现功能的类里面,用super可以调用到父类的属性和方法。
16、内部类
——静态类部类,作为类的静态成员,存在于某个类的内部;
——成员内部类,作为类的成员,存在于某个类内部;要通过外部类创建内部类
——局部内部类,存在于某个方法内部的类;只能在方法体中使用,一旦方法执行完,内部类就会被回收;
——匿名内部类,存在于某个类的内部,但是无类名的类;new 接口或者一个类;
——.实例化的格式。就地实例化和匿名内部类。
17、面向对象的四大支柱;
——封装:隐藏一切能隐藏的,只向外界提供最简单的访问编程接口。
——继承:继承就是从已有的类得到信息创建新类的过程。
——多态:是指允许不同的子类型对象对同一消息做出不同的响应。多态又分为编译时多态和运行时多态;分别通过重载和重写来实现。
——抽象:是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。
18、javabean(标准Java类)
——必须有无参构造器
——必须为私有属性提供标准的set和get方法
——应该实现序列化
19、形参与实参
——行参是作为方法的参数传递,没有被赋值;
——实参,是指被赋值了的参数不能被改变;
20、get与set
——get访问器,是拿到。
——set修改器,是赋值。
21、多态:
.方法的重写与重载
.对象的多态性:上转型会自动完成(父类 父类对象=子类实例)下转型要强转(子类 子类对象=(子类)父类实例
.instanceof 判断左边的对象是不是右边的实例,如果是返回ture,如果不是返回false。
23、各种方法的调用:
.类调用自己的方法,直接方法名就行;
.调用其他非静态类的方法,需要先实例化对象,然后对象打点调用方法;
.调用静态类的静态方法,直接类名打点调用;(注意:静态方法不能直接调用非静态方法,需要进行对象实例化以后用对象打点调用。)
24、在一个类里调用构造函数要用this。调用父类的构造器要用super,而且要写在子类构造函数的第一行。
实例:public Girl(String dance) {
super();//继承父类构造器
this.dance = dance;
}
25、重写与重载的异同:@OverWrite与@OverLoaded
1.重写必须继承,重载不用(注解:重写发生子父类之间,重载需在当前类之中)
2.重写的方法名、参数类型、数目、参数顺序、返回类型需要一致,重载只需要方法名一致。
3.重写的访问修饰词的访问级别必须等于或大于原始方法,重载与访问修饰词无关。
4.重写不能比父类声明更多的异常,可以抛出运行时异常
26、抽象类与接口异同:
1.抽象类的成员可以据有访问级别,接口中的所有成员都是public。
2.抽象类中可以有自己的私有属性,接口中只能有公开的方法,如果有变量是也公开静态的成员变量(类变量)。
3.抽象类可以继承接口,接口不能继承抽象类。
4.抽象类可以有具体实现,而接口不行。
5.抽象类的子类可以选择性的实现一些方法(这种叫适配器模式),接口需要全部实现。
27、变量:
1.局部变量(作用域于方法内部)
2.方法参数(作用域整个方法体)
3.成员变量(作用域整个类和以及能访问他的子类等)
4.类变量(作用域整个类,访问类名打点直接访问)
28、foreach循环样式:
for(类型 变量:数组|集合){
//每一次循环会自动将数组内的内容设置给变量,foreach循环支持数组的直接访问,避免的了索引访问带来的麻烦。
}