一、面向对象
1. 类、对象、变量
(1)所有的Java程序都已类class为组织单元;类由属性和方法两部分组成
(2)先创建对象,再使用对象
(3)成员变量:类中定义,自动定义初始值
局部变量:类方法中定义(两变量同名,局部变量有更高的优先级)
2. 构造方法
构造方法是定义在java类中的一个用来初始化对象的方法,与类同名且没有返回值。
public 构造方法名(){
}
其中构造方法名与类同名;当没有指定的构造方法时,系统会自动添加无参构造方法
3. Static使用
Static修饰的成员属于整个类,被类的所有对象共享。可通过使用类名直接访问静态成员,也可通过对象名
Static可以修饰变量、方法和代码块
(1)Static使用之静态方法
public class Helloworld {
public static void print() {
System.out.println("***");
}
public static void main(String[] args) {
Helloworld.print();
Helloworld demo = new Helloworld;
demo.print();
}
}
注意:静态方法中可以直接调用同类的静态成员,但不可以直接调用非静态成员;普通成员方法中可以直接访问同类的非静态变量和静态变量;静态方法中不能直接调用非静态成员方法
(2)Static使用之静态初始化块
静态初始化块在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通成员
public class Helloworld {
int num1;
int num2;
static int num3;
public Helloworld() {
num1 = 91;
System.out.println("构造方法为num1赋值");
num2 = 74;
System.out.println("初始化块为num2赋值");
num3 = 83;
System.out.println("静态初始化块为num3赋值");
}
public static void main(String[] args) {
Helloworld hello = new Helloworld();
System.out.println(hello.num1);
System.out.println(hello.num2);
System.out.println(num3);
Helloworld hello2 = new Helloworld();
}
}
运行结果:静态初始化块为num3赋值
初始化块为num2赋值
构造方法为num1赋值
91
74
83
初始化块为num2赋值
构造方法为num1赋值
二、java面向对象的特性
1. 封装性:将类的某些信息隐藏在内部,通过类的方法来实现操作访问
步骤:
1.1 修改属性可见性;
1.2 创建getter\setter方法;
1.3在方法中加入属性控制语句
(1)静态内部类:
public class SOuter {
private int a = 99;
static int b = 1;
public static class SInner {
int b = 2;
public void test() {
System.out.println("访问外部类b" + SOuter.b);
System.out.println("访问内部类b" + b);
}
}
public static void main(String[] args) {
//三行表示
SInner sInner;
sInner = new SInner();
sInner.test();
//两行表示
SInner si = new SInner();
si.test();
//一行表示
new SInner().test();
}
}
(2)成员内部类:访问外部类时使用this指针
(3)方法内部类:只能在该方法中使用,且不能使用访问控制符和Static修饰符
2. 继承性
(1)一般形式:class 子类 extends 父类
(2)方法重写:子类对继承的父类方法不满意可以重写,调用时优先调用子类方法
(3)继承的初始化顺序:先初始化父类,再到子类;先执行初始化对象中属性,再执行狗在方法中的初始化
(4)父类对象--属性初始化--构造方法--子类对象--属性初始化--构造方法
(5)注意:如果子类构造方法中没有显示调用父类的构造方法,默认调用父类无参构造方法,若此父类没用无参的构造方法,则编译出错
3. 多态性
引用多态:父类的引用可以指向本类的对象,也可指向子类的对象
方法多态:创建本类对象时,调用的方法为本类方法;创建子类对象时,调用的方法为子类的重写的方法或者继承的方法
(1)抽象类
用关键字abstract修饰:抽象类只用声明不需要实现;包含抽象方法的类为抽象类;抽象类不能直接创建,可以定义引用变量。
public abstract class Telphone{
public abstract void call(); //抽象方法没有方法体,以分号结束
}
(2)接口(一种特殊的类,有全局变量和公共抽象方法组成)
[修饰符] class 类名 extends 父类implemrnts 接口1,2……
{类体部分
}
注:接口经常与匿名内部类配合使用
public interface Iplay{
public void phone();
}
public class People implements Iplay{
public static void main(String[] args){
People test=new People();
test.phone();
}
public void phone(){
System.out.println("手机可以玩游戏");
}
}