构造器、this 关键字使用、MVC设计模式
/*构造器
- 类的结构之三:构造器(前面两个属性,方法)
- construct
- 一、构造器使用
- (创建类,创建方法,创建对象)
-
创建对象
- 二、说明
- 1、如果没有显式的定义的构造器,系统默认给一个空参的构造器
- 2、定义构造器的格式:权限修饰符 类名(形参列表)
- 3、一个类中定义的多个构造器,彼此重载
- 4、如果我们显式的定义构造器,系统不再提供默认参数的空参构造器
- 5、练习:编写两个类,TriAngle和TriAngleTest,其中TriAngle类中声明私有的底边边长banse
- 和高height,同时声明公共方法访问私有变量,此外,提供类类必要的构造器,另一个类中使用这些公共方法计算三角形的面积
package javastudy;
public class TriAngle{
private double base;
private double height;
//定义构造器,定义一个无参的一个有参的
public TriAngle() {
}
public TriAngle(double b,double h) {
base = b;
height = h;
}
public double squar(double b,double h) {
double aera = b*h;
return aera;
}
public void setbase(double b) {
base = b;
}
public double getbase() {
return base;
}
public void setheight(double h) {
height = h;
}
public double getheight() {
return height;
}
}
class TriAngleTest{
}
package javastudy;
public class TriAngnleTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建对象
TriAngle t1 = new TriAngle();
t1.setbase(8);
t1.setheight(9);
t1.squar(8, 9);
System.out.println("base:" + t1.getbase() + "," + "height:" + t1.getheight()+",面积是:" + t1.squar(8, 9));
}
- 三、JavaBean
- JavaBean是一种Java语言写成的可重用组件
- 所谓javaBean是指符合如下标准的Java类
-
类是公共的
-
有一个无参的公共的构造器
-
有属性,且有对应的get,set方法
- 四、this关键字的使用
- /*this关键字的使用
- 1、this可以用来修饰:属性,方法,构造器
- 2、this修饰属性和方法
-
this理解为当前对象(如当前的对象是p1)
-
在类的方法中,我们可以使用this.属性,或this.方法的方式
- 调用当前对象属性或方法,但是通常情况下,我们选择省略this.
- 特殊情况下,如果方法的形参和类的属性名同名时,必须显式的使用this.变量的方式
- 表明此变量是属性,而非形参。
- 3、this调用构造器
-
在类的构造器中,可以显式的使用this(形参列表)调用指定本类中
- 其他构造器
-
构造器中不能通过this(形参列表)调用自己
-
如果有n个构造器,最多有n-1构造器使用this(形参列表)
*>规定:this(形参列表)必须声明在当前构造器的首行 -
构造器内部,最多只能声明一个this(形参列表)
*/
*/
public class personTest {
public static void main(String[] args) {
Person p1 = new Person();
p1.setAge(8);
System.out.println(p1.getAge());
Person p2 = new Person("Tom",19);
System.out.println(p2.getAge());
}
}
class Person{
//封装权限
String name;
int age;
//构造器
public Person() {
this.eat();
}
public Person(String name)
{
//this调用构造器
this();
//前面name表属性,后面表形参
this.name = name;
}
public Person(String name,int age)
{
//调用构造器
this(name);
this.name = name;
this.age = age;
}
//为了可以调用,写get和set方法
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 eat() {
System.out.println("可以吃饭");
}
}
package javastudy;
public class Person {
private int age;
public void setAge(int a) {
if(a<0 || a>130)
{
System.out.println("传入异常");
return;
}
age = a;
}
public int getAge() {
return age;
}
}
/*MVC设计模式
- 1、mvc是常用设计模式之一,将整个程序分为三个层次:
- 视图模型层,控制器层,数据模型层
- 这种将程序输入输出、数据处理、以及数据的展示分离开来的设计模式使程序结构变得更加灵活且清晰,同时也描述了程序各个对象间的通信方式,降低
- 程序的耦合性。
- 模型层 model主要处理数据
-
数据对象封装 model.bean/domain
-
数据库操作类 model.dao
-
数据库 model.db
- 控制层 controller 处理业务逻辑
-
应用界面 controller.activity
-
存放fragment controller.fragment
-
显示列表的适配器 controller.adapter
-
服务相关的controller.service
-
抽取的基类 controller.base
- 视图层 view显示数据
-
相关工具类
-
自定义view view.ui
*/
下面是两个综合练习
练习1
package javaprac.test;
public class boy {
private String name;
private int age;
public boy(String name, int age) {
// TODO Auto-generated constructor stub
this.name = name;
this.age = age;
}
public void marry(girl g) {
System.out.println("想娶的女孩叫:" + g.getName());
}
public void shout() {
if(this.age>22)
{
System.out.println("你可以登记结婚了");
}else {
System.out.println("你可以多谈谈恋爱");
}
}
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;
}
}
package javaprac.test;
public class girl {
private String name;
private int age;
public girl(String name, int age) {
// TODO Auto-generated constructor stub
this.name = name;
this.age = age;
}
public void marry(boy b) {
System.out.println("我想嫁给:" + b.getName());
//this当前对象,谁调用marry谁就是this
b.marry(this);
}
public int compare(girl g) {
return this.age - g.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;
}
}
package javaprac.test;
public class boymarrygir {
public static void main(String[] args) {
//调用的是构造器
boy bo = new boy("罗密O",25);
bo.shout();
girl gir = new girl("朱丽叶",23);
gir.marry(bo);
}
}
练习2
package javaprac.test;
public class Account {
double balance;
//构造器
public Account(double init_balance) {
this.balance = init_balance;
}
//存钱
public void deposit(double ant) {
if(ant > 0)
{
balance +=ant;
System.out.println("存钱成功");
}
}
//取钱操纵
public void withdraw(double ant) {
if(balance>= ant)
{
balance -=ant;
System.out.println("取钱成功");
}else {
System.out.println("余额不足");
}
}
public double getBalance() {
return balance;
}
/*
* public void setBalance(double balance) { this.balance = balance; }
*/
}
package javaprac.test;
public class Bank {
private Customer[] customers = new Customer[10];
private int numberOfCustomer;
public Bank() {
// TODO Auto-generated constructor stub
}
//添加客户姓名
public void addCustomer(String f,String l) {
// TODO Auto-generated method stub
Customer cust = new Customer(f, l);
customers[numberOfCustomer] = cust;
numberOfCustomer++;
}
public Customer getCustomer(int index) {
// TODO Auto-generated method stub
//注:写完if 要写一个else,否则会报错;要么写return null或抛出异常
if(index>=0 && index<numberOfCustomer)
{
return customers[index];
}
return null;
}
//获取客户个数
public int getNumberOfCustomer() {
return numberOfCustomer;
}
}
package javaprac.test;
public class Customer {
private String firstname;
private String lastname;
private Account account;
public Customer(String f,String l) {
this.firstname = f;
this.lastname = l;
}
public void Customer1(String f, String l) {
// TODO Auto-generated constructor stub
}
public String getFirstname() {
return firstname;
}
public String getLastname() {
return lastname;
}
public Account getAccount() {
return account;
}
public void setAccount(Account acct) {
this.account = acct;
}
public Account getAccount(Account acct) {
return account;
}
}
package javaprac.test;
public class BankTest {
public static void main(String[] args) {
Bank bank = new Bank();
bank.addCustomer("Jane","smith");
bank.getCustomer(0).setAccount(new Account(2000));
bank.getCustomer(0).getAccount().withdraw(500);
double balance = bank.getCustomer(0).getAccount().getBalance();
System.out.println("客户:" + bank.getCustomer(0).getFirstname() + "账户余额为:" + balance);
}
}