尚硅谷java零基础入门从221p开始的笔记

本文详细介绍了Java中面向对象的封装性,包括四种权限修饰符(private、default、protected、public)的使用,以及它们在类和成员变量、方法、构造器中的应用。通过实例展示了如何通过构造器初始化对象,以及如何使用this关键字在类的内部引用当前对象。此外,还探讨了包的概念和import关键字的作用,以及MVC设计模式的基本理解。
摘要由CSDN通过智能技术生成

221*** 面向对象上四种权限修饰的理解
封装性的体现需要权限修饰符来配合
1.java规定的四种权限(从小到大排列)
private,缺省,protected,public
public类可以在任意地方被访问
private类内部
缺省 类内部 同一个包
protected 类内部 同一个包 不同包的子类
四种权限可以修饰类及类的内部结构:属性,方法,构造器,内部类
修饰类的话只能使用:缺省,public

222 四种权限修饰的测试

public class Order {
     private int orderPrivate;
     int orderDefault;
     public int orderPublic;

     private void methodPrivate(){
        orderPrivate=1;
        orderDefault=2;
        orderPubilc=3;
        }
        void methodDefault(){
         orderPrivate=1;
        orderDefault=2;
        orderPubilc=3;
        }
        public void methodPublic(){
         orderPrivate=1;
        orderDefault=2;
        orderPubilc=3;
        }
        }
 
public class OrderTest {
  public static void main(String[] args) {
      Order order=new Order;
      order.orderDefault=1;
      order.orderPublic=2;
      //私有的结构不能调用
      order.orderPrivate=3;
      order.methodDefault();
      order.methodPublic();
    }

总结封装性
java提供了四种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构再被调用时的可见性的大小

223 封装性练习基本使用

/*

  • 1.创建程序,在其中定义两个类:Person 和 PersonTest 类。
  • 定义如下:用 setAge()设置人的合法年龄(0~130),用 getAge()返回人的年龄。

*/

//设置
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;
       }

/*

  • 在 PersonTest 类中实例化 Person 类的对象 b,
  • 调用 setAge()和 getAge()方法,体会 Java 的封装性。
    */
public class PersonTest{
 public static void main(String[] args) {
 Person p1=new Person();
 //p1.age=1; 编译不通过
 p1.setAge(12);\
 System.out.println("年龄为:"+p1.getAge());
 }
 }

224 构造器的基本理解

任何一个类都有构造器
类的结构之三:构造器
constructor:建设,建造,建设者
construction
一:构造器的作用
1.创建对象

2.初始化对象的信息

二,说明

1.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器

2.定义构造器的格式:权限修饰符 类名(形参列表){}

3.一个类中定义的多个构造器,彼此构成重载

4.一旦我们显示的定义了类的构造器之后,系统就不在提供默认的空参构造器

5.一个类中。至少会有一个构造器

public class PersonTest{
   public static void main(String[] args){
          //创建类的对象:new+构造器
          Person p=new Person();
          p.eat();
          Person p1=new Person("Tom");
          System.out.println(p1.name);
}
}
class Person{
   //属性
   String name;
   int age;
   //构造器
   public Person() { 
        System.out.println("Person()......");
   }
   public Person(String n){
       name=n;
   }
   public Person(String n, int a){
           name=n;
           age=a;
   //方法
   public void eat(){
       System.out.println("人吃饭");
   }
   public void study(){
      System.out.println("人可以学习");
}
}

226  构造器练习:基本使用 

/* 2.在前面定义的 Person 类中添加构造器,

* 利用构造器设置所有人的 age 属性初始值都为 18。 * */

public class Person{
   private int age;
   public Person(){
      age=18;
   }
public class PersonTest{
public static void main(String[] args){
       Person p1=new Person();
       System.out.println("年龄为:"+p1.getAge());
 }
}

 /* 3.修改上题中类和构造器,增加 name 属性, *

使得每次创建 Person 对象的同时初始化对象的 age 属性值和 name 属性值。 */

public class Person{
    private int age;
    private String name;
public Person(){
   age=18;
   }
   public Person(String n,int a){
           name=n;
           age=a;
}
\\封装性
public void setName(String n){
      name=n;
}
public String getName(){
   return name;
}
\\测试层面
public class PersonTest {
    public static void main(String[] args){
    Person p1=new Person();
    p1.setAge(12);
    System.out.println("年龄为:"+p1.getAge());
    Person p2=new Person("Tom',21);
    System.out.println("name="+p2.getName()+",age="+p2.getAge);
}

227  构造器练习三角形 

/*
 * 编写两个类,TriAngle 和 TriAngleTest,
 * 其中 TriAngle 类中声明私有的底边长 base 和高 height,同时声明公共方法访问私有变量。
 * 此外,提供类必要的构造器。另一个类中使用这些公共方法,计算三角形的面积。
 * 
 */
 

public class TriAngle{  
    private  double base;
    private  double height;
    public TriAngle(){
    }
    public TriAngle(double b,double h){
            base=b;
            height=h;
    }
    public void setBase(double b){
           base=b;
    }
    public double getBase(){
       return base;
    }
    public void setHeight(double h){
              height=h;
    }
    public double getHeight(){
            return height;
    }

\\测试
public class TriAngleTest{
 public static void main(String[] args){
   TriAngle t1=new TriAngle();
   t1.setBase(2.0);
   t1.setHeight(2.4);
   System.out.println("base:"+t1.getbase()+",height"+t1.getHeight());
   TriAngle t2=new TriAngle(5.1,5.6);
   System.out.println("base:"+t2.getbase()+",height"+t2.getHeight());
}
}

228 总结属性赋值的过程

//总结属性赋值的先后顺序
1.默认初始化值
2.显式初始化
3.构造器中赋值
4.通过对象.方法或者对象.属性的方式赋值
先后顺序   1-2-3-4  
//
public class UserTest{
     public static void main(String[] args){
                User u=new User();
                System.out.println(u.age);
                User u1=new User(2);
                u1.setAge(3);
                System.out.println(u1.age);
   }
}
class User{
   String name;
   int age=1;
   public User(){
   }
   public User(int=a){
         age=a;
   }
}
public void setAge(int a){
   age=a;
}

229 javabean的使用

 1.类是公共的

2.有一个无参的公共的构造器

3.有属性,且有对应的get,set方法

 

public class Customer{
       private int id;
       private String name;
       
       public Customer(){
      }
      public void setId(int i){
       id=i;
     }
     public int getId(){
            return id;
     }
     public void setName(String n){
         name=n;
     }
     public String getName(){
            return name;
     }
}

230 介绍UML类图 

 231 this调用属性和方法

关键字

public class PersonTest{
  public static void main(String[] args){
          Person p1=new Person();
          p1.setAge(1);
          System.out.println(p1.getage());
    }
}
class Person{
  private String name;
  private int age;
  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;
  }

this关键字的使用

1.this可以用来修饰属性,方法,构造器

2.this修饰属性和方法:

   this理解为:当前对象 或当前正在创建的对象

2.1在类的方法中可以使用"this.属性"或 "this.方法"的方式,调用当前对象属性或方法,但是,通常情况下,我们都选择省略"this."。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用this.变量的方式,表明此变量是属性,而非形参

public class PersonTest{
  public static void main(String[] args){
          Person p1=new Person();
          p1.setAge(1);
          System.out.println(p1.getage());
    }
}
class Person{
  private String name;
  private int age;
  public Person(){
   }
   public Person(String name){
             this.age=age;
  }
  public Person(String name,int age){
          this.name=name;
          this.age=age;
  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;
  }

232 this调用构造器

3.this调用构建器

   3.1我们在类的构造器中,可以显式的使用this(形参列表)方式,调用本类中指定的其他构造器

       构造器中不能通过this形参列表

      如果一个类中有n个构造器,则最多有n-1构造器中使用了this形参列表

     规定:this形参列表必须声明在当前构造器的首行

     构造器内部:最多只能声明一个形参列表,用来调其他的构造器 

233  this练习 boy和girl

 

public class Boy{
         private String name;
         private int 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 void marry(Girl girl){
                System.out.println("我想娶"+girl.getName());
         }
         public void shout(){
             if(age>=22){
               System.out.println("你可以去合法登记结婚了");
             }else{
               System.out.println("先多谈谈恋爱");
             }
}

public class Girl{
            private String name;
            private int age;
            public Girl(){ 
            }
            public Girl(String name,int age){
                  this.name=name;
                  this.age=age;
           }
           public String getName(){
                  return name;
           }
           public void setName(String name){
                   this.name=name;
           }
           public void marry(Boy boy){
                     System.out.println("我想嫁给"+boy.getName());
                     boy.marry(this);
           }
//比较两个对象的大小
//正数:当前对象大;负数:当前对象小;0:当前对象与形参对象相等
           public int compare(Girl girl){
              if(this.age>girl.age){
                    return 1;
              }else if(this.age<girl.age){
                    return -1;
             }else{
                    return 0;
             }
            }

           return this.age-girl.age;


//测试
public class BoyGirlTest{
            public static void main(String[] args){
           Boy boy=new Boy("罗密欧",21);
           boy.shout();
           Girl girl=new Girl("朱丽叶",18);
           girl.marry(boy);
           Girl girl1=new Girl("祝英台",19);
           int compare=girl.compare(girl1);
           if(compare>0){
               System.out.println(girl.getName()+"大");
           }else if(compare>0){
               System.out.println(girl1.getName()+"小");
           }else{
               System.out.println("一样大");
           }
   }
}

234 综合练习1 account和customer

 

public class Account{
            private int id;
            private double balance;
            private double annualInterestRate;
            public Account(int id,double balance, double annualInterestRate){
                   this.id=id;
                   this.balance=balance;
                   this.annualInterestRate=annualInterestRate;
            }
            public int getId(){
                  return id;
            }
            public void setId(int id){
                  this.id=id;
            }
            public double getBalance(){
                   return balance;
            }
            public void setBalance(double balance){
                   this.balance=balance;
            }
            public double getAnnualInterestRate(){
                    return annualInterestRate;
            }
            public void setAnnualInterestRate(double annualInterestRate){
                    this.annualInterestRate=annualInterestRate;
            }
            public void withdraw(double amount){
                    if(balance<amount){
                         System.out.println("余额不足,取款失败");
                         return;
                     }
                     balance-=amount;
                     System.out.println("成功取出:"+amount);
            }
            public void deposit(double amount){
                      if(amount>0){
                        balance+=amount;
                        System.out.println("成功存入:"+amount);
                      }
            }


public class Customer{
         private String firstname;
         private String lastname;
         private Account account;
         public Customer(String f,String l){
                 this.firstName=f;
                 this.lastName=1;
         }
         public Account getAccount(){
            return account;
         }
         public void setAccount(Account account){
             this.account=account;
         }
         public String getFirstname(){
             return firstname;
         }
         public String getLastName(){
             return lastname;
         }

//测试
/*
 * 写一个测试程序。
 * (1)创建一个 Customer,名字叫 Jane Smith, 他有一个账号为 1000,
 * 余额为 2000 元,年利率为 1.23%的账户。
 * (2)对 Jane Smith 操作。存入 100 元,再取出 960 元。再取出 2000 元。
 * 打印出 Jane Smith 的基本信息
 * 
 * 成功存入:100.0
 * 成功取出:960.0
 * 余额不足,取款失败
 * Customer  [Smith,  Jane]  has  a  account:  id  is 1000, 
 *  annualInterestRate  is 1.23%,  balance  is 1140.0
 *  
 */
public class CustomerTest{
   public static void main(String[] args){
   Customer cust=new Customer("Jane","Smith");
   Account acct=new Account(1000,2000,0.0123);
   cust.setAccount(acct);
   cust.getAccount().deposit(100);
   cust.getAccount().withdraw(960);
   cust.getAccount().withdraw(2000);
   System.out.println("Customer["+cust.getLastname()+","+cust.getFirstName()+"] has a 
       account:id is"+cust.getAccount().getId()+",annualInterestRate  is"+cust.getAccount().getAnnualInterestRate()*100+"%,balance is "+cust.getAccount().getBalance());
   }
}

235   综合练习2 对象数组

public class Account{
      private double balance;
      public Account(double init_balance){
          this.balance=init_balance;
      }
      public double getBalance(){
               return balance;
      }
      //存钱操作
      public void deposit(double amt){
        if(amt>0){
             balance+=amt;
             System.out.println("存钱成功");
      }
}
//取钱操作
public void withdraw(double amt){
        if(balance>=amt){
            balance-=amt;
           System.out.println("取钱成功");
        }else{
           System.out.println("余额不足");
        }
    }

 
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 Account getAccount(){
           return account;
   }
   public void setAccount(Account account){
           this.account=account;
   }
   public String getFirstName(){
            return firstName;
   }
   public String getLastName(){
            return lastName;
   }
}
}
    

public class Bank{
        private Customer[] customers;//存放多个客户的数组
        private int numberOfCustomers;//记录客户的个数
        public Bank(){
        }
        //添加客户
        public void addCustomer(String f,String l){
            Customer cust=new Customer(f,l);
            customers[numberOfCustomers]=cust;
            numberOfCustomers++;
           //customers[numberOfCustomers++]=cust;
        }
        //获取客户的个数
        public int getNumOfCustomers(){
             return getNumOfCustomers;
        }
        //获取指定位置上的客户
        public Customer getCustomer(int index){
                 if(index>=0&&index<numberOfCustomers){
                      return customers[index];
        }
        return null;
}


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);
              System.out.println("**********");
              bank.addCustomer("万里","杨");
              System.out.println("银行客户的个数为:"+bank.getNumOfCustomers());
}
}

 236 package关键字的使用

一,package关键字的使用

1.为了更好的实现项目中类的管理,提供包的概念

2.使用package声明类或接口所属的包,声明在源文件的首行

3.包,属于标志符,遵循标志符的命名规则,规范,见名知意

4.每"."一次,就代表一层文件目录

补充:同一个包下,不能命名同名的接口,类

          不同的包下,可以命令同名的接口,类

1.java.lang----包含一些 Java 语言的核心类,如 String、Math、Integer、System 和 Thread,提供常用功能
2.java.net----包含执行与网络相关的操作的类和接口。
3.java.io----包含能提供多种输入/输出功能的类。
4.java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
5.java.text----包含了一些 java 格式化相关的类
6.java.sql----包含了 java 进行 JDBC 数据库编程的相关类/接口
7.java.awt----包含了构成抽象窗口工具集(abstractwindowtoolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。B/S  C/S


237    MVC设计模式的理解

MVC 是常用的设计模式之一,将整个程序分为三个层次:视图模型层,控制器层,数据模型层。这种将程序输入输出、数据处理,以及数据的展示分离开来的设计模式使程序结构变的灵活而且清晰,同时也描述了程序各个对象间的通信方式,降低了程序的耦合性。

 

 238   import关键字的使用

import java.util.*;

import account2.Bank;

/*
 * 二、import关键字的使用
 * import:导入
 * 1.在源文件中显式的使用import结构导入指定包下的类、接口
 * 2.声明在包的声明和类的声明之间
 * 3.如果需要导入多个结构,则并列写出即可
 * 4.可以使用"xxx.*"的方式,表示可以导入xxx包下的所有结构。
 * 5.如果导入的类或接口是java.lang包下的,或者是当前包下的,则可以省略此import语句。
 * 6.如果在代码中使用不同包下的同名的类。那么就需要使用类的全类名的方式指明调用的是哪个类。
 * 7.如果已经导入java.a包下的类。那么如果需要使用a包的子包下的类的话,仍然需要导入。
 * 8.import static组合的使用:调用指定类或接口下的静态的属性或方法.
 * 
 */
public class PackageImportTest {

	public static void main(String[] args) {
		String info = Arrays.toString(new int[]{1,2,3});
		
		Bank bank = new Bank();
		
		ArrayList list = new ArrayList();
		HashMap map = new HashMap();
		
		Scanner s = null;	
		
		System.out.println("hello");
		
		UserTest us = new UserTest();
		
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

京与旧铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值