Java,面向对象_基础(总结)
一、面向对象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());
}
}
更多推荐



所有评论(0)