一、面向对象vs面向过程(了解)
    -不管是面向对象还是面向过程,都是程序的设计思路。
    -面向过程:以函数为基本单位,适合解决简单问题
    -面向对象:以类为基本单位,适合解决复杂问题

二、类,对象
    -类:具有相同特征的事物的抽象描述,是'抽象的'、概念上的定义。
    -象:实际存在的该类事物的'每个个体',是'具体的',因而也被称为'实例(instance)'。
    -面向对象完成的具体功能的操作的三步流程:
        >步骤一:创建类,并设计类的内部成员(属性、方法)
        >步骤二:创建类的对象,比如:Phone p1 = new Phone();
        >步骤三:通过对象,调用其内部声明的属性或方法,完成相关的功能
    -对象的内存解析:
        >创建类的一个对象;创建类的多个对象;方法的调用的内存解析
    -Java中内存结构的划分:虚拟机栈、堆、方法区、程序计数器、本地方法栈
        >虚拟机栈:以栈帧为基本单位,有入栈和出栈的操作;每个栈帧入栈操作对应一个方法的执行; 方法内的局部变量会存储在栈帧中。
        >堆空间:new出来的结构(数组,对象),数组的元素,对象的成员变量(属性)都在堆中。
        >方法区:加载的类的模板结构

三、类的成员之一:属性(或成员变量)
    -属性vs局部变量
        >声明的位置
        >内存中存放的位置
        >作用域
        >权限修饰符
        >初始化值
        >生命周期

四、类的成员之二:方法
    -方法的声明:权限修饰符 返回值类型 方法名(形参列表){//方法体}

五、方法的应用
    1.方法的重载(overload)
        -方法重载的要求:“两同一不同”(权限修饰符、方法名相同;形参列表不同)
        -形参列表的不同:形参类型不同,形参个数不同,形参顺序不同
    2.可变个数形参的方法
        -格式:(int ... args)
    3.方法的参数传递机制:值传递
        -实参给形参赋值的过程:
            >如果形参是基本数据类型变量,则将实参保存的数据值赋值给形参
            >如果形参是引用数据类型变量,则将实参保存的地址值赋值给形参
    4.递归方法

六、对象数组
    -数组元素为对象的数组

七、package,import关键字的使用
-package:即文件夹,指明声明的类所属的包。
-import:当前类中,如果使用其他包下的类(除java.lang),原则上都要导入。

八、oop的特征之一:封装性
    -封装性的体现:使用权限修饰符来修饰类及类的内部成员,当这些成员被调用时,体现可见性的大小。
    -权限修饰符:public、protected、缺省、private(用于表明所修饰的结构可调用的范围的大小)

权限修饰符范围
权限修饰符范围


    -程序设计的原则之一:高内聚、低耦合
        >高内聚:类的内部数据操作细节自己完成,不允许外部干涉。
        >低耦合:仅暴露少量方法给外部使用,尽量方便外部调用。
    -举例:
        >场景一:私有化(private)类的属性,提供公共(public)的get和set方法,对此属性进行获取或修改。
        >场景二:将类中不需要对外暴露的方法,设置为private。
        >场景三:单例模式中构造器private的了,避免在类的外部创建实例。(在static关键字后再学习)

九、类的成员之三:构造器
    -格式:权限修饰符 类名(形参列表){}
    -构造器的作用:
        >搭配上new,来创建对象
        >初始化对象的成员变量

举例:

public class PersonTest
{
    public static void main(String[] args)
    {
        Person p1 = new Person("张三",19);
        System.out.println(p1.getInfo());
    }
}

class Person
{
    String name;
    int age;

    public Person(String name,int age)
    {
        this.name = name;
        this.age = age;
    }

    public String getInfo()
    {
        return name+"\t"+age;
    }

}

十、三个小知识
    1.类的实例变量的赋值过程
        -属性赋值的位置:
            ①默认初始化
            ②显示初始化
            ③构造器中初始化
            ④通过“对象.方法”的方式赋值
            ⑤通过“对象.属性”的方式赋值
        -先后顺序为:①-②-③-④/⑤
        -执行次数:
            >只能执行一次:①、②、③
            >可以执行多次:④、⑤
    2.JavaBean
        -所谓的JavaBean,是指符合如下标准的Java类:
            >类是公共的(public)
            >有个无参的公共的构造器
            >有属性,且有对应的get、set方法
    3.UML类图

        -private为-,protected为#,public为+。

十一、练习

Person类与PersonTest:

public class Person
{
    private int age;

    public void setAge(int age)
    {
        if(age>0 && age<130)
        {
            this.age = age;
        }
        else
        {
            System.out.println("非法输入");
        }
    }
    public int getAge()
    {
        return age;
    }
}
public class PersonTest
{
    public static void main(String[] args)
    {
        Person p1 = new Person();

        p1.setAge(20);
        System.out.println(p1.getAge());
    }
}

Book类与BookTest:

public class Book
{
    private String bookName;
    private String author;
    private int price;

    public void setBookName(String bookName)
    {
        this.bookName = bookName;
    }
    public String getBookName()
    {
        return bookName;
    }
    public void setAuthor(String author)
    {
        this.author = author;
    }
    public String getAuthor()
    {
        return author;
    }
    public void setPrice(int price)
    {
        this.price = price;
    }
    public int getPrice()
    {
        return price;
    }

}
public class BookTest
{
    public static void main(String[] args)
    {
        Book b1 = new Book();

        b1.setBookName("绿野仙踪");
        b1.setAuthor("绿皮人");
        b1.setPrice(100);

        System.out.println("书名:"+b1.getBookName()+",作者:"+b1.getAuthor()+",价格:"+b1.getPrice());
    }

}

Employee类与Test

public class Employee
{
    private String name;
    private char gender;
    private int age;
    private String phoneNumber;

    public void setName(String name)
    {
        this.name = name;
    }
    public String getName()
    {
        return name;
    }
    public void setGender(char gender)
    {
        this.gender = gender;
    }
    public char getGender()
    {
        return gender;
    }
    public void setAge(int age)
    {
        this.age = age;
    }
    public int getAge()
    {
        return age;
    }
    public void setPhoneNumber(String phoneNumber)
    {
        this.phoneNumber = phoneNumber;
    }
    public String getPhoneNumber()
    {
        return phoneNumber;
    }
    public String getInfo()
    {
        return "\t"+getName()+"\t"+getGender()+"\t"+getAge()+"\t"+getPhoneNumber();
    }
}
import java.util.Scanner;
public class EmployeeTest
{
    public static void main(String[] args)
    {
        Employee[] emps = new Employee[2];
        Scanner scan = new Scanner(System.in);

        for(int i=0;i<emps.length;++i)
        {
            emps[i] = new Employee();
            System.out.println("----第"+(i+1)+"个员工信息----");
            System.out.print("姓名:");
            emps[i].setName(scan.nextLine());
            System.out.print("性别:");
            emps[i].setGender(scan.nextLine().charAt(0));
            System.out.print("年龄:");
            emps[i].setAge(scan.nextInt());
            scan.nextLine();
            System.out.print("电话:");
            emps[i].setPhoneNumber(scan.nextLine());
        }

        System.out.println("--------员工列表--------");
        System.out.println("编号\t姓名\t性别\t年龄\t电话");
        for(int i=0;i<emps.length;i++)
        {
            System.out.println(1+i+emps[i].getInfo());
        }
    }
}

Customer,Account类与Test:

public class Customer
{
    private String firstName;
    private String lastName;
    private Account account;

    public Customer(){}

    public Customer(String firstName,String lastName)
    {
        this.firstName=firstName;
        this.lastName=lastName;
    }

    public String getFirstName()
    {
        return firstName;
    }
    public String getLastName()
    {
        return lastName;
    }
    public Account getAccount()
    {
        return account;
    }
    public void setAccount(Account account)
    {
        this.account=account;
    }
}
public class Account
{
    private int id;//账号
    private double balance;//余额
    private double annualInterestRate;//年利率
    public Account()
    {

    }
    public Account(int id,double balance,double annualInterestRate)
    {
        this.id=id;
        this.balance=balance;
        this.annualInterestRate=annualInterestRate;
    }
    public int getId()
    {
        return id;
    }
    public double getBalance()
    {
        return balance;
    }
    public double getAnnualInterestRate()
    {
        return annualInterestRate;
    }

    public void setId(int id)
    {
        this.id = id;
    }
    public void setBalance(double balance)
    {
        this.balance = balance;
    }
    public void setAnnualInterestRate(double annualInterestRate)
    {
        this.annualInterestRate = annualInterestRate;
    }

    //取钱
    public void withdraw(double amount)
    {
        if(balance>=amount && balance>0)
        {
            balance -= amount;
            System.out.println("成功取出:" + amount);
        }
        else
        {
            System.out.println("余额不足,取款失败");
        }
    }
    //存钱
    public void deposit(double amount)
    {
        if(amount>0)
        {
            balance += amount;
            System.out.println("成功存入:"+amount);
        }
    }

}
public class CustomerTest
{
    public static void main(String[] args)
    {
        Customer customer = new Customer("Jane","Smith");
        Account account = new Account(1001,2000,0.0123);
        customer.setAccount(account);

        //或者(匿名对象)
        //customer.setAccount(new Account(1001,2000,0.0123));

        customer.getAccount().deposit(100);
        customer.getAccount().withdraw(960);
        customer.getAccount().withdraw(2000);

        System.out.println("姓名:"+customer.getFirstName()+customer.getLastName()+"\t编号:"+customer.getAccount().getId()+"\t账号余额:"+
                customer.getAccount().getBalance()+"\t年利率:"+customer.getAccount().getAnnualInterestRate());
    }
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐