java-类与对象总结(上)

一、类与对象的定义及使用:

所谓的类是共性的概念,而对象指的是一个具体事物。

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方法或属性。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值