JAVA基础知识学习笔记——面向对象

1. private关键字以及get和set方法

private关键字
1. private是一个权限修饰符
2. 表示私有,被private修饰的成员只能在本类中访问。
3. private可以修饰成员变量,也可以修饰成员方法。
如果类中的属性使用private修饰了,那么该属性无法在外界使用了,这样也是不行的,我们要提供一些方式让外界 去使用这个变量。
我们可以提供一个方法,让外界给private修饰的属性赋值, 这个方法名叫做setXXX
我们还要提供一个方法,让外界获取private修饰的属性值, 这个方法名叫做getXXX加粗样式

/*
    学生类
    属性:
        姓名,年龄
    行为:
        show方法,展示自己的行为,调用show方法后,可以输出自己的姓名和年龄。

    目前因为可以直接访问到对象的属性,所以可以给对象的属性赋值成任何内容。
    如果我们不让外界直接访问到这个对象的属性,那么就可以进行限制了。

   
 */
public class Student {
    //姓名
    String name;//小波老师
    //年龄
    private int age;//18

    //定义方法,用来让外界获取age属性值
    public int getAge() {
        return age;
    }

    //定义方法,用来让外界给age属性赋值
    public void setAge(int a) {
        //使用if进行判断,如果传递过来的年龄是合法的年龄,再赋值
        if(a > 0 && a <= 200) {
            age = a;
        } else {
            System.out.println("年龄有误");
        }
    }
    //show方法,可以将自己的姓名和年龄输出
    public void show() {
        System.out.println("姓名:" + name + ",年龄:" + age);
    }
}

测试类:

/*
    学生类的测试类
 */
public class Demo01StudentTest {
    public static void main(String[] args) {
        //创建学生对象
        Student stu = new Student();
        //给学生对象的属性赋值
        stu.name = "小波老师";
        stu.setAge(18);

        //调用对象的show方法,输出姓名年龄
        stu.show();

        //单独获取stu的age属性值
        System.out.println(stu.getAge());
    }
}

2. 标准的private代码

/*
    学生类

    属性:
        姓名,年龄。 属性要加私有
    方法:
        get/set

    set方法没有返回值,有参数。
    get方法有返回值,没有参数。
 */
public class Student {
    //定义姓名和年龄属性
    private String name;
    private int age;

    //getName让外界获取name属性的值
    public String getName() {
        return name;
    }

    //setName 让外界给name属性赋值
    public void setName(String n) {
        name = n;
    }

    //getAge
    public int getAge() {
        return age;
    }

    //setAge
    public void setAge(int a) {
        age = a;
    }
}

/*
    测试类
 */
public class Demo01StudentTest {
    public static void main(String[] args) {
        //创建学生对象
        Student stu = new Student();
        //给属性赋值
        stu.setName("小泽老师");
        stu.setAge(24);
        //获取属性的值,然后输出
        System.out.println("姓名:" + stu.getName());
        System.out.println("年龄:" + stu.getAge());
    }
}

3. 封装的概述

封装是面向对象三大特征之一, 另外两个分别是继承和多态。
封装指的是隐藏具体的实现,然后提供公共的对外访问方式。

目前代码封装的体现:
使用private将属性私有(隐藏), 然后提供了get/set(访问方式)

封装的好处:
1. 提高代码的安全性。
2. 可以提高代码的复用性

4. this关键字的作用

如果在一个类中局部变量和成员变量同名,那么可以使用this去区分它们。
使用this表示的是成员变量,格式:
this.变量名
this可以解决的问题: 局部变量和成员变量同名的问题。
this的含义: this所在的方法是通过哪个对象调用的,this就表示哪个对象(this中真正存放的是对象的地址值,或者说对象的引用)

/*
    成员变量和局部变量允许重名。

    如果局部变量和成员变量同名,那么访问到时局部变量。

    
 */
public class Student {
    //定义姓名和年龄属性
    private String name;//"小泷老师"
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {//="小泷老师"
        System.out.println("this:" + this);
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  • 测试类
/*
    学生类的测试类
 */
public class Demo01StudentTest {
    public static void main(String[] args) {
        //创建Student对象
        Student stu = new Student();
        System.out.println("stu:" + stu);
        //给属性赋值。
        stu.setName("小泷老师");
        stu.setAge(30);
        //输出该属性的值
        System.out.println("姓名:" + stu.getName() + ", 年龄:" + stu.getAge());
    }
}

5. 构造方法的介绍

构造方法作用: 用来在创建对象的时候给属性赋值。
构造方法的格式:
public 构造方法名(参数列表) {
构造方法体;
}
1. 构造方法不需要写返回值类型,连void都不用写
2. 构造方法名必须和类名一致
3. 构造方法不能return任何东西,但是单独写一个return是可以的, return一般省略。
构造方法的调用:
构造方法是在创建对象的时候自动调用的。
new 数据类型(); 这个操作是在创建对象, 此时就会调用构造方法。
在创建对象的时候小括号中我们可以传递一些参数, 程序会根据传递的参数调用对应的构造方法。

构造方法的注意事项:
    1. 如果在一个类中我们没有给出构造方法,那么系统会帮我们提供一个空参数的构造方法。
    2. 如果在一个类中我们给出了构造方法,那么系统就不会帮我们提供这个空参数的构造方法了。
    3. 构造方法支持重载。

public class Student {
    //提供两个属性(姓名,年龄)
    private String name; //小明同学
    private int age; //20

    //提供show方法,用来输出学生对象的姓名和年龄。
    public void show() {
        System.out.println("name:" + name + ", age:" + age);
    }

    //提供构造方法,用来在创建对象的时候给属性赋值
    public Student(String name, int age) {//name="小明同学" age=20
        this.name = name;
        this.age = age;
    }

    //为了保证以最常用的方式也能创建对象,手动提供一个空参数的构造方法
    public Student() {

    }

}

  • 测试类
/*
    构造方法的调用
        构造方法是在创建对象的时候自动调用的。
        new 数据类型(参数)
 */
public class Demo01StudentTest {
    public static void main(String[] args) {
        //创建Student对象, 执行空参数的构造方法
        //因为创建对象的时候小括号中没有写任何东西,那么使用的就是空参数的构造方法。
        //Student s1 = new Student();

        //创建Student对象, 执行一个参数是字符串的构造方法
        //因为创建对象的时候小括号中写的是一个字符串,所以使用的就是一个参数是字符串的构造方法。
        //Student s2 = new Student("你好");

        //Student s3 = new Student();

        //调用一个参数是int的构造方法
        //Student s4 = new Student(100);

        //创建对象,在创建对象的时候直接给属性赋值
        Student stu = new Student("小明同学", 20);
        stu.show();


    }
}

6. 标准的学生类的定义

  • Student类
/*
    javabean就是Java编写类的规范, 只要一个类符合这些规范,那么这个类就可以称为是一个Javabean。

    Javabean规范
        1. 将属性私有。
        2. 提供get/set方法
        3. 提供空参数的构造方法(必须),提供有参数的构造方法(选做,现阶段建议做)

    定义一个学生类,提供姓名和年龄属性, 要求满足Javabean规范。
 */
public class Student {
    //给出姓名和年龄属性
    private String name;
    private int age;

    //提供空参数的构造方法
    public Student() {
    }
    //提供有参数的构造方法
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }


    //提供get/set方法
    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 class Demo01StudentTest {
    public static void main(String[] args) {
        //使用空参数构造方法创建Student对象
        Student stu = new Student();
        //给stu的属性赋值
        stu.setName("宝强同学");
        stu.setAge(25);
        //输出属性的值
        System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge());
        System.out.println("==========================");

        //使用有参数的构造方法创建Student对象,创建对象的时候直接给属性赋值
        Student stu2 = new Student("乃亮同学", 40);
        //stu2.setAge(41);
        System.out.println("姓名:" + stu2.getName() + ",年龄:" + stu2.getAge());

    }
}


7. 字符串的介绍

/*
    String类表示字符串, 字符串就是由一串字符组成的数据。
    字符串本质就是一个字符数组, 内部就是在使用一个字符数组保存数据。
    扩展:
        在JDK8以及之前的版本,字符串是在用char[]保存数据。
        在JDK9以及之后的版本,字符串是在用byte[]保存数组


    直接使用双引号写出来的字符串,都是字符串对象。 比如:"hello", "你好"
    字符串具有不变性, 他们的值在创建后不能更改。
    字符串是可以被共享的
        String str1 = "abc";
        String str2 = "abc";

    String所在的包是java.lang, lang包下的东西都是一些常用的东西,那么在使用的时候一个优化,是不需要导包的。
 */
public class Demo01String {
    public static void main(String[] args) {
        //定义一个字符串
        String str = "hello";
        str = "world";
        System.out.println("str:" + str);
    }
}

8. 字符串的构造方法

public class Demo02String {
    //数据类型 对象名 = new 数据类型(参数);
    public static void main(String[] args) {
        //String(): 空参数构造方法
        String s1 = new String(); //String s1 = "";
        System.out.println("s1:" + s1);

        //String(String original): 参数要传递字符串
        String s2 = new String("hello");
        System.out.println("s2:" + s2); //hello

        //String(char[] value):参数要传递char数组
        char[] cArr = {'a', 'b', 'c', 'd', 'e'};
        String s3 = new String(cArr); //字符数组中有什么内容,那么创建出来的字符串中就有什么内容。
        System.out.println("s3:" + s3);//abcde

        //String(byte[] bytes): 参数要传递byte数组
        byte[] bArr = {97, 98, 99};
        String s4 = new String(bArr);//如果根据byte数组创建字符串, 那么会先查询ASCII码表,把数字									    转成字符,然后根据这些字符创建字符串。
        System.out.println("s4:" + s4);//abc

        //直接赋值
        String s5 = "hello";
        System.out.println("s5:" + s5);//hello

    }
}

9. new的方式创建字符串和直接赋值创建字符串的区别

/*
    字符串new对象和直接赋值创建对象的区别。

    ==在比较基本类型和引用类型的时候是有区别的。
        如果==比较基本类型的数据,比较的是具体的值。
        如果==比较引用类型的数据,比较的是地址值。


    new的方式创建字符串和直接赋值创建字符串的区别
        new的方式创建字符串是由栈指向堆,再由堆指向常量池。
        直接赋值创建字符串是直接由栈指向常量池。
 */
public class Demo03String {
    public static void main(String[] args) {
        //创建字符串
        String s1 = new String("hello");
        String s2 = "hello";
        System.out.println("s1:" + s1); //hello
        System.out.println("s2:" + s2); //hello

        System.out.println("s1==s2:" + (s1 == s2)); //false
        //定义字符串
        String s3 = "hello";
        System.out.println("s1==s3:" + (s1 == s3)); //false
        System.out.println("s2==s3:" + (s2 == s3)); //true
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值