Java-面向对象

1.设计对象并使用

类:使对象共同特征的描述

对象:是真实存在的具体的东西

如何定义类:

public class 类名{

        1.成员变量

        2.成员方法

        3.构造器

        4.代码块

        5.内部类

}

Javabean类:用来描述一类事物的类(在Javabean类中,是不写main方法的) 

🐖:

1.类名首字母建议大写,建议见名知意

2.一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名,实际开发中建议一个文件定义一个class类

3.成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;一般无需指定初始化值,存在默认值

例:demo1.java

public class demo1 {
    //属性
    String name;
    int age;
    String gender;
    //行为
    public void sleep(){
        System.out.println("睡觉");
    }
    public void eat(){
        System.out.println("吃饭");
    }
}

demo1_test.java

public class demo1_test {
    public static void main(String[] args){
        //创建对象
        demo1 d1=new demo1();
        d1.name="xcm";
        d1.age=20;
        d1.gender="famale";
        System.out.println(d1.name);
        System.out.println(d1.age);
        System.out.println(d1.gender);
        d1.sleep();
        d1.eat();
    }
}

2.封装

定义:封装就是把过程和数据包裹起来,对数据的访问只能通过已经定义的接口,面向对象计算始于这个基本概念,即现实世界已经被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象

作用:提高代码的安全性 

原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为

例:人关门

人:给门一个作用力

门:自己关起来

private关键字

修饰成员变量和成员方法,被private修饰的成员只能在本类中才能访问

提供“setXxx(参数)方法,用于给成员变量赋值,方法用public修饰

提供”getXxx(参数)方法,用于获取成员变量的值,方法用public修饰

package Object;

public class Girlfriend {
    //属性
    private String name;
    private int age;
    private String gender;

    public void setName(String n){
        name=n;
    }
    public String getName(){
        return name;
    }

    public void setAge(int a){
        if(a>=18&&a<=50){
            age=a;
        }
        else{
            System.out.println("非法参数");
        }
    }
    public int getAge(){
        return age;
    }

    public void setGender(String g){
        gender=g;
    }
    public String getGender() {
        return gender;
    }

    //行为
    public void sleep(){
        System.out.println(("睡觉"));
    }
    public void eat(){
        System.out.println(("吃饭"));
    }
}

package Object;

public class Girlfriend_test {
    public static  void main(String[] args){
        //创建对象
        Girlfriend gf1=new Girlfriend();
        //赋值
        gf1.setName("xcm");
        gf1.setAge(18);
        gf1.setGender("famale");
        System.out.println(gf1.getName());
        System.out.println(gf1.getAge());
        System.out.println(gf1.getGender());
        gf1.sleep();
        gf1.eat();
    }
}

3.this关键字

作用:区别成员变量和局部变量

就近原则:谁离我近,我就用谁

public class GirlFriend{
    private int age;
    public void method(){
        int age=10;
        System.out.println(age);
    }
}
public class GirlFriendTest {
    public static void main(String[] args){
        GirlFriend gf1=new GirlFriend();
        gf1.method();
    }
}

此时,age=10

public class GirlFriend{
    private int age;//age=0
    public void method(){
        int age=10;
        System.out.println(this.age);//使用成员变量中的age
    }
}
public class GirlFriendTest {
    public static void main(String[] args){
        GirlFriend gf1=new GirlFriend();
        gf1.method();
    }
}

age=0;

4.构造方法

格式:

public class Student{

        修饰符 类名(参数){

                方法体:

        }

}

特点:

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

2.没有返回值类型,连void也没有

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

执行时机:

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

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

作用:

创建对象的时候,由虚拟机自动调用,给成员变量进行初始化的

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

    //如果我们自己没有写任何的构造方法
    //那么虚拟机给我们加一个空参构造方法

    public Student(String name,int age){
        this.name = name;
        this.age = 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 class StudentTest {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student("zhangsan",23);
        System.out.println(s.getName());
        System.out.println(s.getAge());
    }
}

🐖:

①构造方法的定义

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

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

②构造方法的重载

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

③推荐的使用方式

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

5.标准JavaBean

①类名需要见名知意

②成员变量需要用private修饰

③提供至少两个构造方法——无参构造方法和带全部参数的构造方法

④成员方法

提供每一个成员变量对应的setXxx()/getXxx(),如果还有其他行为,也需要写上

快捷键构造方法:Alt+Insert-构造函数

快捷键构造setXxx()/getXxx()成员方法:Alt+Insert-Getter and Setter

或右键-Ptg To Javabean

package test4;

public class User {
    //属性
    private String username;
    private String password;
    private String email;
    private String gender;
    private int age;


    public User() {
    }

    public User(String username, String password, String email, String gender, int age) {
        this.username = username;
        this.password = password;
        this.email = email;
        this.gender = gender;
        this.age = age;
    }

    /**
     * 获取
     * @return username
     */
    public String getUsername() {
        return username;
    }

    /**
     * 设置
     * @param username
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * 获取
     * @return password
     */
    public String getPassword() {
        return password;
    }

    /**
     * 设置
     * @param password
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * 获取
     * @return email
     */
    public String getEmail() {
        return email;
    }

    /**
     * 设置
     * @param email
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * 获取
     * @return gender
     */
    public String getGender() {
        return gender;
    }

    /**
     * 设置
     * @param gender
     */
    public void setGender(String gender) {
        this.gender = gender;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "User{username = " + username + ", password = " + password + ", email = " + email + ", gender = " + gender + ", age = " + age + "}";
    }
}

6.对象内存图

jvm划分:栈、堆、方法区、寄存器、本地方法栈

  

 方法区:字节码文件加载时进入的内存

栈内存:方法运行时所进入的内存、变量

堆内存:new出来的东西会在这块内存中开辟空间并产生地址

🐖:

Java文件编译的过程

  1. 程序员编写的.java文件
  2. 由javac编译成字节码文件.class(为什么编译成class文件,因为JVM只认识.class文件)
  3. 在由JVM编译成电脑认识的文件

①一个对象的内存图

Student s = new Student();

1.加载class文件

2.申明局部变量

3.在堆内存中开辟一个空间

4.默认初始化

5.显示初始化

6.构造方法初始化

7.将堆内存中的地址值赋值给左边的局部变量

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值