类和对象的创建、
类的特性:
-
封装
-
继承
-
多态
类是对象的抽象化,对象是类的实例化
通俗就是类是一个模板,可以匹配大多数对象的一个模板。
类实例化会返回一个自己的对象
对象 就是类的具体实例
封装:
一个项目应该只存在一个main方法
其余的都是类
一般启动程序用Application(意思:应用程序)独自一个文档,并且创建程序唯一的main方法启动。其他的只是应用的类。也是类的封装。
类方法文件:
package com.ckw.oop.demo02;
public class Student {
//属性:字段
String name = "未知"; //赋值(非必须)
int age = 20;//赋值(非必须)
//方法
public void say(){ //定义一个类的方法
System.out.println("我叫"+this.name+",今年"+this.age+"岁");
}
}
类实例化启动:
package com.ckw.oop.demo02;
public class Application {
//
public static void main(String[] args) {
Student xiaoming =new Student();//实例化一个类
xiaoming.name = "小明";//形参数赋值
xiaoming.age =12;//形参数赋值
xiaoming.say();//引用类的方法
Student honghong =new Student();
honghong.say();//不同实例化之间,值是不会互相传递的,类似只是套用模板而已
}
}
面向对象的本质:
-
以类的方式组织代码,以对象的方式组织(封装)数据。
-
封装 相当于套用了类的模板。从而别人看不到我们的具体代码,俗称封装。
-
类是对象的模板
使用new关键字创建对象
使用new关键字的创建的时候,除了分配内存空间外,还会给对象进行默认的初始化,以及对类中构造器的调用。
构造器
类中的构造器 也叫 构造方法。是在进行创建对象的时候必须要要调用的。:就是类中在编译器默认生成的构造方法。
构造器注意点:
- 必须和类的名字相同
- 必须没有返回类型,也不能写void。
即使创建类后,里面什么都不写。编译后,编译器也会默认初始化生成一个构造器(构造方法)。
代码展示区别
原代码.java(什么都不写):
package com.ckw.oop.demo02;
public class Application {
}
编译器.class文件(默认生成了一个无参数构造器):
package com.ckw.oop.demo02;
public class Application {
public Application() {
}
}
构造器的作用:
- 实例化初始值。给为赋值的对象赋初始值。
- 使用new关键字的时候,本质是在调用构造器(最重要)。
两个注意点:
- 如果构造器不在。方法就会报错(一般默认生成)
- 如果存在有参数构造器,要调用无参数构造器时,就必须写出之前编译时会默认生成的构造器。或者必须实例化类的时候加上参数直接调用有参数构造器。
特殊情况
以下:存在两个构造器,并且是有参数构造器!(这种情况,要调用无参数构造器时,必须在文档写出那个无参数那个构造器,给new调用,或者,实例化的时候必须带参数,不然找不到构造器会报错。)
快捷键:ALT+insert(快速生成构造器)
package com.ckw.oop.demo02;
public class Application {
String name;
//1. 实例化初始值。给为赋值的对象赋初始值。
//2. 使用new关键字的时候,本质是在调用构造器。
public Application(){
this.name = "构造器的作用就是设置初始值";
}
/*如果存在有参数构造器,就必须写出之前编译时会默认生成的构造器。或者必须实例化类的时候加上参数。*/
public Application(String name) {
this.name = name;
}
}
构造器实例化的可能发生的情况:
-
如果构造器不存在,就报错。
-
如果只有有参数构造器,就实例化的时候必须带参数。
-
如果有多个构造器,会根据构造器的参数列表,自动选择类中不同的构造器运行。
构造器总结:
书写注意:
- 必须跟类名一致
- 没有返回值
作用:
- new 本质是在调用构造器
- 初始化对象的值
注意点:
如果定义了有参数构造器,还想要调用无参构造器,必须 定义一个无参的构造器。
this. 关键字
this主要是给方法调用类定义的属性使用的
this.oop=“hello”
package com.ckw.oop.demo02;
public class Student {
//属性:字段
String name = "未知"; //赋值(非必须)
int age = 20;//赋值(非必须)
//方法
public void say(){
System.out.println("我叫"+this.name+",今年"+this.age+"岁");
}
}