一、类与对象的定义及使用:
所谓的类是共性的概念,而对象指的是一个具体事物。
1、定义与使用
通常来讲,一个类包含类名、属性、方法三部分,如果要使用类方法,则需实例化一个类对象去调用。
实例化对象的方法:类名称 对象名称 = new 类名称();
下面定义一个Student类,并且实例化一个对象:
public class Demo1 {
public static void main(String[] args) {
class Student{
//私有属性
private String name;
private int age;
//构造函数
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//成员方法
public void printInfo(){
System.out.println("姓名:"+this.name+" "+"年龄"+this.age);
}
}
//实例化一个Student对象
Student student = new Student("Hello",20);
//通过对象访问类方法
student.printInfo();
}
}
二、类与对象相关知识点总结:
1、对象的产生需要以下三步:
1)、加载类
2)、为对象开辟内存空间
3)、调用合适的构造方法 --->构造方法不止有一个
2、对象的初始化顺序:
静态代码块 --> 实例代码块 --> 构造方法
被static所修饰的代码块加载的时候就会执行, 对于多个被static修饰的代码块,谁在前面谁先执行。
3、对象属性的初始化方式:(3种方式)
1)、提供一系列的setter和getter方法
2)、通过构造函数的重载
3)、利用静态代码块和实例代码块(静态代码块和实例代码块,在构造函数之前被调用, 静态代码块只会被初始化一次。)
针对上述几点,我们来使用代码验证:
class Person {
//成员变量
private String name;
private int age;
public int data = 10;
public static int count = 0;
//方法一、提供setter和getter
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 Person(String name, int age) {
this.name = name;
this.age = age;
data++;
count++;
System.out.println("构造函数public Person1(String name, int age)");
}
//方法三、静态代码块和实例代码块
//静态代码块只初始化一次
static {
count = 55;
System.out.println("静态代码块static{}");
}
//实例代码块
{
data = 99;
count = 200;
System.out.println("实例代码块instance{}");
}
//成员方法
public void getPersonInfo(){
System.out.println("姓名:"+name+"年龄:"+age);
}
}
public class Demo{
public static void main(String[] args) {
Person person1 = new Person("Jack",20);
person1.getPersonInfo();
System.out.println(person1.data);
System.out.println(Person.count);
System.out.println("==========华丽的分割线============");
Person person2 = new Person("Marry",18);
person2.getPersonInfo();
}
}
结果如下:
可以看到,程序按照静态代码块 --> 实例代码块 --> 构造函数的顺序执行,且静态代码块确实只执行了一次。
4、如何理解this? ---> this代表对象的引用
使用: this.name 调属性
this.func() 调方法
this(string name,int age) 在一个构造函数中,可以调用另外的构造函数,必须写在第一行
5、面向对象三大特性;
1)、封装:把客观事物封装成抽象化的类,类里面的数据和方法对内部开放,对外隐藏并且提供访问的方法。
2)、继承:继承是指可以使用已有类所有的功能,并且在不改变原有类的情况下对这些功能进行扩展。
3)、多态:所谓多态就是指一个类实例的相同方法,在不同情形下有不同表现形式。
三、面向对象三大特性之封装
1、private实现封装:
封装简单来讲就是将类内部属性保护起来,可以使用private关键字实现简单封装。使用private实现的封装,只允许本类访问属性,而不允许外部类访问。
2、类的设计原则:
1)、类中的所有属性必须使用private封装。
2)、属性若要被外部访问,必须定义一系列setter和getter方法。
3、构造方法:
所谓构造方法,就是指使用关键字new实例化新对象时要调用的操作方法。
对于构造方法的定义,需要遵循以下原则:
1)、方法名必须与类名称相同
2)、构造方法没有返回值类型声明(编译器根据程序结构区分构造方法和普通方法,因此没有返回值)
3)、每一个类中至少存在一个构造方法(如果没有明确定义,系统会默认生成一个无参构造方法)
4、构造方法可以重载:
构造方法的调用和对象内存分配几乎是同步完成的。因此,我们可以利用构造方法的重载,为类中的属性进行初始化操作,从而避免多次setter调用。
5、static关键字
1)、static属性(类属性):
普通属性保存在堆内存中,且每个对象独享属性。
如描述共享属性,只需在属性前添加static关键字,此时属性保存在全局数据区内存中,不受对象实例化控制,所有对象都可以访问该数据区。
在定义类时,以非static属性为主,一般都不考虑static属性。
2)、static类方法:
以static定义的类方法不属于对象,直接通过类名去调用。
所有的static方法不允许调用非static定义的属性或方法,所有的非static方法允许访问static方法或属性。