Java学习笔记5

先休息一下眼睛😁

面向对象

类和对象

类(设计图):是对象共同特征的描述

对象:是真实存在的具体实例

在Java中,必须先设计类,才能获得对象。

如何定义类

public class 类名{
	1.成员变量(代表属性,一般是名词)
	2.成员方法(代表行为,一般是动词)
	3.构造器
	4.代码块
	5.内部类
}
类名 对象名 = new 类名();

拿到对象可以干什么?

对象.成员变量;
对象.成员方法(...);

定义类的补充注意事项

用来描述一类事物的类,专业叫做:Javabean类。
Javabean类中,是不写main方法的。

在以前,编写main方法的类,叫做测试类。
我们可以在测试类中创建Javabean类的对象并进行赋值调用。

类名首字母建议大写,需要见名知义,驼峰模式。
一个Java文件中可以定义多个class类,且只能一个类是修饰public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件定义一个class类。
成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;一般无需指定初始化值,存在默认值。

默认初始化值

例子

public class GirlFrind {
    String name;
    double age;
    double weight;
    String address;
   public void sleep(){
       System.out.println("女朋友在睡觉");
   }
   public void eat(){
       System.out.println("女朋友在吃东西");
   }
}
public class GirlFrindTest {
    public static void main(String[] args) {
        GirlFrind gf1 = new GirlFrind();
        gf1.name = "美杜莎";
        gf1.age = 18;
        gf1.weight = 90;
        System.out.println(gf1.name);
        System.out.println(gf1.age);
        System.out.println(gf1.weight);
    }
}

快捷键:Alt+鼠标左键托/按住鼠标滚轮托

可以同时选中同一列的东西

封装

面向对象三大特征:封装,继承,多态。

封装:告诉我们,如何正确设计对象的属性和方法。对象代表什么,就得封装对应的数据,并提供数据对应的行为。

例如:画圆(园提供属性和画圆的方法,人调用了这个方法 )

关门(门提供属性和关门的方法,人调用了这个方法)

private关键字是一个权限修饰符
可以修饰成员(成员变量和成员方法)
被private修饰的成员只能在本类中才能访问
针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
提供"setXxx(参数)"方法,用于给成员变量赋值,方法用public修饰
提供"getXxx()"方法,用于获取成员变量的值,方法用public修饰

例如

public class GirlFrind {
    private String name;
    private int age;
    private double weight;

    //针对于每一个私有化的成员变量,都要提供get和set方法
    //set方法:给成员变量赋值
    //get方法:对外提供成员变量的值

    //作用:给成员变量name进行赋值的
    public void setName(String name){
        this.name = name;
    }
    //作用:对外提供name属性的
    public String getName() {
        return name;
    }

    public void setAge(int age) {
        if(age>=18 && age<=50){
            this.age = age;
        }else{
            System.out.println("非法内容");
        }
    }

    public int getAge() {
        return age;
    }

    public void setWeight(double weight) {
        this. weight = weight;
    }
    public double getWeight() {
        return weight;
    }
    public void sleep(){
       System.out.println("女朋友在睡觉");
   }
   public void eat(){
       System.out.println("女朋友在吃东西");
   }
}

public class GirlFrindTest {
    public static void main(String[] args) {
        GirlFrind gf1 = new GirlFrind();
        gf1.setName("美杜莎");
        gf1.setAge(18);
        gf1.setWeight(90);        System.out.println(gf1.getName());
System.out.println(gf1.getAge());      System.out.println(gf1.getWeight());
        gf1.eat();
        gf1.sleep();
    }
}

This关键字

1就近原则
System.out.println(age);
先去局部变量位置找,如果有直接用,否则去成员变量位置找
System.out.println(this.age);
直接去成员变量位置找
2this作用
可以区别成员变量和局部变量

成员变量和局部变量

public class GirlFrind {
    private String name;
    private int age;
    private double weight;

    //针对于每一个私有化的成员变量,都要提供get和set方法
    //set方法:给成员变量赋值
    //get方法:对外提供成员变量的值

    //作用:给成员变量name进行赋值的
    public void setName(String name){
        this.name = name;
    }
    //作用:对外提供name属性的
    public String getName() {
        return name;
    }

    public void setAge(int age) {
        if(age>=18 && age<=50){
            this.age = age;
        }else{
            System.out.println("非法内容");
        }
    }

    public int getAge() {
        return age;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }
    public double getWeight() {
        return weight;
    }
    public void sleep(){
       System.out.println("女朋友在睡觉");
   }
   public void eat(){
       System.out.println("女朋友在吃东西");
   }
}

构造方法

构造方法也叫构造器,构造函数。

作用:在创建对象的时候给成员变量进行初始化的。

构造方法格式
public class Student{
	修饰符 类名(参数){
		方法体;
	}
}
特点:

1方法名要与类名相同,大小写也要一致

2没有返回值类型,连void都没有

3没有具体的返回值(不能由return带回结果数据)



执行时机:

1创建对象的时候由虚拟机调用,不能手动调用构造方法

2每创建一次对象,就会调用一次构造方法

例如

public class Student{
	private String name;
	private int age;
	public Student(){
		...   //空参构造
	}
	public Student(Student name,int age){
		...   //带参构造
	}
}

举例:有参构造

public class GirlFrind {
    private int age;
    private String name;
    private char gender;
    //无参构造
    public GirlFrind(){}
    //有参构造
    public GirlFrind(String name,int age,char gender){
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    public void setName(String name) {
         this.name = name ;
    }
    public String getName(){
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public char getGender() {
        return gender;
    }
}

有参构造

public class GirlFrindTest {
    public static void main(String[] args) {
        GirlFrind gf1 = new GirlFrind("美杜莎",23,'女');

        System.out.println(gf1.getName());
        System.out.println(gf1.getAge());
        System.out.println(gf1.getGender());
    }
}

构造方法注意事项

构造方法的定义

1如果没有定义构造方法,系统将给出一个默认的无参数构造方法

2如果定义了构造方法,系统将不再提供默认的构造方法

构造方法的重载

1带参构造方法,和无参构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载

推荐的使用方式

1无论是否使用,都手动书写无参数构造方法,和带全部参数的构造方法

构造方法

标准的JavaBean类

类名需要见名知意
成员变量使用private修饰
提供至少两个构造方法:无参构造方法,带全部参数构造方法
成员方法:
提供每一个成员变量对应的setXxx()/getXxx()
如果还有其他行为,也需要写上

例题:写一个有用户名,密码,邮箱,性别,年龄的方法。

public class GirlFrind {
    //属性
    private String userName;
    private String password;
    private String email;
    private char gender;
    private int age;

    //无参构造
    public GirlFrind(){}
    //有参构造
    public  GirlFrind(String userName,String password,String email,char gender,int age) {
        this.userName = userName;
        this.password = password;
        this.email = email;
        this.gender = gender;
        this.age = age;
    }
    //get/set
    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
public class GirlFrindTest {
    public static void main(String[] args) {
        GirlFrind f = new GirlFrind("美杜莎","123","zyu7832@gmail.com",'女',18);
        System.out.println(f.getUserName());
        System.out.println(f.getPassword());
        System.out.println(f.getEmail());
        System.out.println(f.getGender());
        System.out.println(f.getAge());

    }
}

快捷键:Alt+insert或者Alt+Fn+insert

快速生成有参,无参构造,get/set

对象内存图

内存

一个对象的内存图

Student s = new Student();
  1. 加载class文件
  2. 声明局部变量
  3. 在堆内存中开辟一个空间
  4. 默认初始化
  5. 显示初始化
  6. 构造方法初始化
  7. 将堆内存中的地址值赋值给左边的局部变量

基本数据类型和引用数据类型

基本数据类型 引用数据类型
整数类型 除左边的其他类型
浮点数类型
布尔类型
字符类型

基本数据类型:数据值是存储在自己的空间中

特点:赋值给其他变量,也是赋的真实的值

引用数据类型:数据值是存储在其他空间中,自己空间中存储的是地址值

特点:赋值给其他变量,赋的地址值

成员变量和局部变量

区别 成员变量 局部变量
类中位置不同 类中,方法外 方法内,方法声明上
初始化值不同 有默认初始化值 没有,使用之前需要完成赋值
内存位置不同 堆内存 栈内存
生命周期不同 随着对象的创建而存在,随着对象的消失而消失 随着方法的调用而存在,随着方法的运行结束而消失
作用域 整个类中有效 当前方法中有效
posted @   张彧520  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示