Java学习笔记(八)

在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度。现在将跟着视频做的笔记进行整理。本篇博客是整理Java知识点的第八篇博客。

本篇博客介绍了Java中的类和对象,以及封装。

本系列博客所有Java代码都使用IntelliJ IDEA编译运行,版本为2022.1。所用JDK版本为JDK11

目录

类和对象

类的定义

手机类

对象的使用

学生类

多个对象

成员变量和局部变量

封装

private关键字

this关键字

封装


类和对象

类的定义

是Java程序的基本组成单位。类是对现实生活中一类具有共同属性和行为的事物的抽象。

类由属性行为组成。属性在类中通过成员变量体现(类中方法外的变量)。行为在类中通过成员方法来体现(去掉static修饰的方法)。

类的定义格式是:

public class 类名{

 变量1数据类型 变量1;

变量2数据类型 变量2;

变量3数据类型 变量3;

...

public 返回值类型 方法1(...){

...

}

public 返回值类型 方法2(...){

...

}

public 返回值类型 方法3(...){

...

}

...

}

手机类

下面代码创建了phone类。

public class phone {
    String brand;
    int price;

    public void call(){
        System.out.println("Call");
    }

    public void message(){
        System.out.println("Message");
    }
}

phone类中有String类型的brand和int类型的price两个变量,有无返回值的call方法和无返回值的message方法。

对象的使用

创建对象的格式是:

类名 对象名 = new 类名();

使用成员变量的格式是: 对象名.变量名

使用成员方法的格式是:对象名.方法名(参数)

public class usephone {
    public static void main(String[] args){
        phone ph = new phone();
        System.out.println("The brand is " + ph.brand);
        System.out.println("The price is " + ph.price);

        ph.brand = "Apple";
        ph.price = 3000;
        System.out.println("The brand is " + ph.brand);
        System.out.println("The price is " + ph.price);

        ph.call();
        ph.message();
    }
}

这段代码创建了上面的phone类的对象。并访问了对象的成员变量和成员方法。

程序的输出是:

The brand is null
The price is 0
The brand is Apple
The price is 3000
Call
Message

学生类

public class student {
    String name;
    int age;

    public void study(){
        System.out.println("I study very hard");
    }
    public void homework(){
        System.out.println("I do homework very careful");
    }
}

这段代码创建了student类,有一个String类型的成员name,和一个int类型成员age。student类中有两个没有返回值的方法:study和homework。

public class studenttest1 {
    public static void main(String[] args){
        student stu = new student();
        stu.name = "Li hua";
        stu.age = 18;
        System.out.println("The name is " + stu.name);
        System.out.println("The age is " + stu.age);

        stu.study();
        stu.homework();
    }
}

这段代码创建了一个student类对象stu,并访问了成员变量和成员方法。

程序的输出是:

The name is Li hua
The age is 18
I study very hard
I do homework very careful

多个对象

对象的成员变量位于堆内存,成员方法位于栈内存。

public class studenttest2 {
    public static void main(String[] args){
        student stu1 = new student();
        stu1.name = "Simon";
        stu1.age = 18;
        System.out.println("The name is " + stu1.name);
        System.out.println("The age is " + stu1.age);

        stu1.study();
        stu1.homework();

        student stu2 = new student();
        stu2.name = "Sam";
        stu2.age = 20;
        System.out.println("The name is " + stu2.name);
        System.out.println("The age is " + stu2.age);

        stu2.study();
        stu2.homework();
    }
}

此代码创建了两个student类的变量。(此类的定义见上方)

程序的输出是:

The name is Simon
The age is 18
I study very hard
I do homework very careful
The name is Sam
The age is 20
I study very hard
I do homework very careful

如果多个对象指向同一块内存,那么修改一个对象会影响其他对象。

public class studenttest3 {
    public static void main(String[] args){
        student stu1 = new student();
        stu1.name = "Simon";
        stu1.age = 18;
        System.out.println("The name is " + stu1.name);
        System.out.println("The age is " + stu1.age);

        stu1.study();
        stu1.homework();

        student stu2 = stu1;
        stu2.name = "Sam";
        stu2.age = 20;
        System.out.println("The name is " + stu2.name);
        System.out.println("The age is " + stu2.age);

        stu2.study();
        stu2.homework();
        System.out.println("The name is " + stu1.name);
        System.out.println("The age is " + stu1.age);

        stu1.study();
        stu1.homework();
    }
}

程序的输出是

The name is Simon
The age is 18
I study very hard
I do homework very careful
The name is Sam
The age is 20
I study very hard
I do homework very careful
The name is Sam
The age is 20
I study very hard
I do homework very careful

stu1和stu2是指向同一块内存,通过stu2修改了stu1中的成员变量。

成员变量和局部变量

成员变量位于类中方法外,占用堆内存,随着对象的存在而存在,随着对象的消失而消失,有默认初始化值。

局部变量位于方法内或方法声明上,占用栈内存,随着方法的调用而存在,随着方法的结束而消失。局部变量没有默认的初始化值,必须定义,赋值,然后才能使用。

封装

private关键字

private是权限修饰符,可以修饰类的成员(可以是成员变量,也可以是成员方法)。private保护成员不被其他类使用,被private修饰的成员在本类中才能访问。

对于被private修饰的成员变量,如果需要被其他类使用,需要提供相应操作。

提供get变量名()方法,获取成员变量的值,方法用public修饰。

提供set变量名(参数)方法,设置成员变量的值,方法用public修饰。

public class privatestudent {
    String name;
    private int age;

    public int getage(){
        return age;
    }
    public void setage(int number){
        age = number;
    }
    public void show(){
        System.out.println("The name is " + name);
        System.out.println("The age is " + age);
    }
}

这段代码设计了一个privatestudent类,其中成员age被设置为private。该类提供了getage和setage方法来访问age变量,还有show方法用于输出信息。

public class privatestudenttest1 {
    public static void main(String[] args){
       privatestudent test = new privatestudent();

       test.name = "Student";
       test.setage(10);
       test.show();
    }
}

这段代码实例化了privatestudent类的对象,并进行了一些操作。

程序的输出是:

The name is Student
The age is 10

public class privatestudenttest2 {
    public static void main(String[] args){
        privatestudent test = new privatestudent();

        test.name = "Charley";
        test.setage(17);
        System.out.println("The student's name is " + test.name);
        System.out.println("The student's age is " + test.getage());
    }
}

这段代码实例化了privatestudent类的对象,并进行了一些操作。

程序的输出是:

The student's name is Charley
The student's age is 17

this关键字

this修饰的变量用于指代成员变量。

方法的形参如果与成员变量同名,那么不带this修饰的变量指的是形参,而不是成员变量。this可以解决局部变量名覆盖成员变量的问题。

this.成员变量名表示调用对象的成员变量。

public class studentthis {
    private String name;
    private int age;

    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 void show(){
        System.out.println("The student's name is " + name);
        System.out.println("The student's age is " + age);
    }
}

studentthis类有name和age两个private修饰的成员变量。并且在成员方法中用this区分成员变量和局部变量。

public class studentthistest {
    public static void main(String[] args){
        studentthis stu = new studentthis();
        stu.setname("John");
        stu.setage(15);
        stu.show();
    }
}

这段代码通过实例化一个对象进行测试。程序的输出是:

The student's name is John
The student's age is 15

封装

封装是面向对象编程的三大特征之一。另外两个是继承多态。封装是对客观世界的模拟,客观世界中成员变量是隐藏在对象内的,外界无法直接访问。

封装将类的某些信息隐藏在类内部,不允许被外部直接访问,而是通过该类提供的方法实现操作和访问。成员变量用private修饰,并提供对应的get和set方法。

封装通过方法控制成员变量的操作,提高了代码的安全性和复用性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值