
本质:以类的方式组织代码,以对象的组织(封装)数据。
三大特性:
静态方法static: 直接调用
非静态方法: 将方法实例化 Student student = new Student(),new出来这个方法再用
静态方法不可以直接调用非静态方法
package LearnJava.OOP;
public class InstantAClass {
public static void main(String[] args) {
//实例化对象
Student harry = new Student();
harry.age=12;
harry.name="Harry Potter";
Student ron = new Student();
ron.name="Ronald Weasly";
ron.age=13;
System.out.println(harry.name+" is "+harry.age);
harry.study();
System.out.println(ron.name+" is "+ron.age);
ron.study();
}
}
package LearnJava.OOP;
public class Student {
String name;
int age;
public void study(){
System.out.println(this.name+" is studying");
}
}
//out
Harry Potter is 12
Harry Potter is studying
Ronald Weasly is 13
Ronald Weasly is studying
Process finished with exit code 0
5、构造器
package LearnJava.OOP.demo02;
public class ClassExtends {
public static void main(String[] args) {
Student student = new Student();
student.speak();
System.out.println(student.money);
System.out.println(student.getAllMoney());
}
}
//Peron为父类,但所有的类都会自动继承java的object类
public class Person {
public int money = 10000;
//private的是无法被继承的,只能通过get、set接口
private int allMoney = 10000000;
public int getAllMoney() {
return allMoney;
}
public void speak(){
System.out.println("I am speaking!");
}
}
//学生为子类,子类继承父类就会拥有父类的全部方法
public class Student extends Person {
}
//out
I am speaking!
10000
10000000
super
方法重写 :非静态的方法可以被重写。快捷键:alt+insert 的override
重写vs重载
为什么要重写? 父类方法太多子类并不都需要,或者父类功能不满足子类需求
package LearnJava.OOP.demo03;
public class ClassOverride {
public static void main(String[] args) {
Son son = new Son();
Father father = new Son();
//test1为静态方法,调用时只和等号左边有关
son.test1();
father.test1();
//test2为非静态方法,此时是子类重写了父类的方法,只有非静态方法是可以重写的
son.test2();
father.test2();
}
}
public class Father {
public static void test1(){
System.out.println("i am father!");
}
public void test2(){
System.out.println("i am father!");
}
}
public class Son extends Father {
public static void test1(){
System.out.println("i am son!");
}
@Override//重写
public void test2() {
System.out.println("i am son!");
}
}
//out
i am son!
i am father!
i am son!
i am son!
Process finished with exit code 0
8、多态
多态是方法的多态
要有父子类之间的关系,且方法要重写
一个对象的实际类型是确定的,如new Student
可以指向的引用类型是不确定的:可以父类引用指向子类,但不能执行子类独有的方法。
对象能执行哪些方法主要看左边的类型,和右边的关系不大。而执行哪个方法看左边。
instanceof关键字: X instanceof Y ,若X和Y之间有父子关系则编译通过,否则编译报错,而编译通过后若X的引用对象是Y引用对象的子类则为true否则false
类型之间转化,高转低强转加括号,低转高直接转就行
package LearnJava.OOP.demo04;
//接口必须用类来执行,这个类必须重写接口中的方法,接口可以多继承。
public class UserServiceImpl implements UserService,TimeService{
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
@Override
public void timer() {
}
}
//接口中只定义方法,并不写方法体
public interface UserService {
public void add(String name);
public void delete(String name);
public void update(String name);
public void query(String name);
}
public interface TimeService {
public void timer();
}
12、异常Exception
指程序运行中出现的各种不期而至的状况
分类:
java把异常当做对象来处理,java的api中定义了许多异常类
ERROR类对象有jvm生成并抛出,程序无法处理jvm会终止线程
Exception分支中有一个重要的子类RuntimeException(运行时异常),通常异常可以被程序处理,在编程时要尽量避免异常,并在出现异常时及时处理
五个关键字:trycatchfinallythrowthrows
异常捕获——try/catch,快捷键ctrl+alt+t
package LearnJava.OOP.demo05;
public class DealWithException {
public static void main(String[] args) {
int a = 1;
int b = 0;
try{ //try监控区域
System.out.println(a / b);
}catch (ArithmeticException e){ //catch捕获异常
System.out.println("程序出现异常,b不能为0");
}finally { //善后工作
System.out.println("finally");
}
}
}
//out
程序出现异常,b不能为0
finally
Process finished with exit code 0