OOP
面向对象的编程思想
- 面向对象的编程思想和面向过程的编程思想不同,面向过程会有清楚的步骤,例如"第一步,第二步,第三步…"。
- 面向对象的编程思想是一种分类的编程思想,在解决问题的时候会首先思考要用什么分类,然后单独运行这些分类,最后用这些分类一起完成一个问题。因此面向对象的编程思想非常适合处理需要多人协作的问题和情况。
- 对于描述复杂的事物,我们需要从宏观和整体上去考虑如何解决这个问题,这个时候就适合使用面向对象的编程思想;但一旦问题涉及到需要从微观的角度去思考的时候,我们一般会选择面向过程的思想去解决问题。
面向对象的一些性质
- 面向对象的本质:以类的方式组织代码,以对象的方式组织(封装)数据
- 其三大特性:封装、继承、多态
- 从认识的角度来说:先有对象后有类。对象可指具体的事物。类是抽象的,可指是对对象的抽象。
- 从代码的角度来说:先有类后有对象,而类是对象的模板。
类与对象的创建
基本语法
- 创建对象:
- 用new关键字来创建对象
例子:1.Person p= new Person();
2.new Person(); - p是Person类创建的一个引用变量
- 在new关键字创建的时候,除了会分配内存之外,还会给创建好的对象进行默认的初始化以及对类中的构造器进行调用
- 用new关键字来创建对象
- 创建类:
用class关键字来创建一个类
例子:class Person
Person被创建为一个类
构造器(也被称作构造方法)
- 构造器与类同名,但与类不同,它是一个方法
- 它是创建对象过程中必须调用的,一般来说,我们调用的person()是调用的类中无参的构造方法
- 其特点:
- 必须和类的名字相同
- 绝对没有返回类型,也不能写void
静态修饰符static
- static通常用于修饰一个变量或者方法
- 在变量和方法前面加上static后会被自动分配到**静态方法区,可直接被堆中其他的对象直接调用**
指向对象自己本身的引用this
- this通常用于区分构造器中的形参和实参之间的区别,表示指向的是这个类中的变量
- 例子:
public class Student{
int a;
public Student(){
}
public Student(int a){
this.a=a; //this指向的是上面这个类中的a,与参数中的a进行区分
}
}
public class Application {
public static void main(String[] args) {
Student p=new Student(3); //输入参数,让a获取值3
}
}
- this的另一个作用:当一个类重载了多个构造方法时,如果在某个构造方法的内部要调用另一个构造方法,此时**不能直接写另一个构造方法的名字**,而要使用this()
内存分析
栈,堆,方法区和静态方法区
- 下面为代码例子
public class Student{
public String name; //定义常量
public int age; //定义变量
public void behaviour1(){ //创建非静态区方法
System.out.println("小明在学习");
}
public void behaviour2(){ //创建非静态区方法
System.out.println("小刚在锻炼");
}
public static void behaviour3(int i){ //用修饰符static将其调入静态方法区
System.out.println(i+"个人都很努力");
}
}
public class Application {
public static void main(String[] args) {
Student XiaoMing=new Student();
Student XiaoGang=new Student();
XiaoMing.name="xiaoming";
XiaoGang.name="xiaogang";
XiaoMing.age=18;
XiaoGang.age=18; //对各个变量或常量进行初始化
System.out.println(XiaoMing.name);
System.out.println(XiaoMing.age);
System.out.println(XiaoGang.name);
System.out.println(XiaoGang.age); //用引用变量调用Student类中的变量或常量
XiaoMing.behaviour1();
XiaoGang.behaviour2(); //用引用变量调用Student类中的方法
Student.behaviour3(2); //static静态区直接调用方法
}
}
- 下图为个人做的一个简单的思维导图
包机制
- 为了更好地组织类,Java提供了包机制,用于区别类的命名空间
- 语法格式: package pk1[.pk2[.pk3…]];
- 一般来说,会使用**公司域名的倒称作为包的名字**
- 需要包中的程序时,只需在另一个程序中打import+上述语法+(class名或者*)即可导入包
- p.s:"*"指导入包的所有内容
域名的倒称作为包的名字**
- 需要包中的程序时,只需在另一个程序中打import+上述语法+(class名或者*)即可导入包
- p.s:"*"指导入包的所有内容