2017.12.6T19_B2_3.4

package com.xdf.bean;

/**
 * 面向对象的3大特性
 *
 * 1.封装
 *     概念:将类的所有信息 隐藏起来不让外部类去直接访问! 而是通过对应的方法去访问!
 *     目的: 隐藏类的内部细节,安全!
 *
 *    封装的步骤:
 *      01.所有属性私有化
 *      02.创建对应的get和set      shift +alt +s
 *      03.在对应的方法中增加逻辑判断,确保数据的正确性
 *     
 *     所有的get都是获取属性值
 *     所有的set都是给属性赋值
 *    
 *
 * 2.继承
 * 3.多态
 *
 *
 */
public class Student { // 学生类

 // shift +alt +a 私有化属性
 private int age;// 年龄
 private String name;// 姓名
 private char sex;// 性别

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public char getSex() {
  return sex;
 }

 /**
  * sex:用户传递过来的性别
  * 如果用户输入的是不健康的数据
  * 默认sex='男'
  */
 public void setSex(char sex) {
  if (sex == '男' || sex == '女') {
   this.sex = sex;
  } else {
   this.sex = '男';
  }
 }

 /**
  * shift+alt+s ===>toString()
  * 01.因为java中所有的类都默认继承Object
  * 02.如果我们想输出一个对象, 不是看它的内存地址,而是需要看到对象的每个属性值
  * 03.需要重写Object类中的toString()
  */
 @Override
 public String toString() {
  return "Student [年龄=" + age + ", 姓名=" + name + ", 性别=" + sex

************************************************************************

package com.xdf.bean;

public class StudentDemo {

 public static void main(String[] args) {
  // 创建Student类对象
  Student student = new Student();
  // 通过set()给对象的属性赋值
  student.setName("小黑");
  student.setAge(50);
  student.setSex('m'); // 不健康的输入
  System.out.println(student); // 如果Student类没有重写toString()则执行Object的toString()
 }

}*************************************************************************

package com.xdf.loading;

/**
 * 都是购物的方法,但是根据传递的参数不同,会得到一个不同的结果!
 *
 * 方法重载    方法=行为
 * 01.在同一个类中
 * 02.方法名相同
 * 03.参数列表不同(参数个数,参数类型,参数顺序)
 * 04.与访问修饰符和返回值类型 无关
 *
 *
 * 方法重载 其实就是一个  静态的多态!
 */
public class Student { // 学生类

 /**
  * 学生购物的方法     压马路  没买东西  也没花钱
  */
 public void buy() {

 }

 /**
  *
  * 学生购物的方法     压马路  花钱了
  */
 public void buy(double money) {

 }

 /**
  *
  * 学生购物的方法   买东西     花钱了
  */
 public void buy(double money, String something) {

 }

 /**
  *
  * 学生购物的方法   买东西带回家     花钱了
  */
 private String buy(double money, String something) {
  return "一堆东西";

************************************************************************

package com.xdf.staticdemo;

public class StaticBlock {

 // 类变量
 static int age;

 {
  System.out.println("普通代码块1");
 }

 {
  System.out.println("普通代码块2");
 }

 static {
  System.out.println("静态代码块1");
 }

 static {
  System.out.println("静态代码块2");
 }

 public StaticBlock() {
  System.out.println("无参 构造方法");
 }

 // 测试方法
 public static void main(String[] args) {
  /**
   * 执行两个静态代码块  顺序是  自上而下
   * StaticBlock.age = 5;
   */

  /**
   * 01.两个静态代码块
   * 02.两个普通代码块
   * 03.构造方法
   */
  StaticBlock sb = new StaticBlock();

******************************************************


/**
 *   一个类 在被 JVM加载的时候,首先会加载类中由static修饰的所有属性,方法,代码块!
 *   并把这个static修饰的内容放进  静态存储区,便于我们共享访问!
 *  
 *   1.static可以修饰
 *      01.属性      静态属性
 *      02.方法      静态方法
 *      03.代码块  静态代码块
 *     
 *   2.static的特点
 *      01.static修饰的内容,在整个程序运行期间,只有一份,而且所有对象共享!
 *          比如说,我们在Student类中定义了一个变量如下
 *             static  int  age;
 *           Student类创建出的N个对象,都共享这个age属性!
 *           如果有一个对象更改了age属性,其他的N个对象也随着变化!
 *      02. 静态方法  中不能访问 非静态的属性和方法
 *            int  age;  //普通属性
 *          public  static  void    sayHello(){
 *            System.out.println(age);  //编译报错
 *          }
 *      03.普通的方法中可以访问静态属性和静态方法
 *           static int  age;  //静态属性
 *          public   void  sayHello(){
 *             System.out.println(age); 
 *          }
 *      04.静态属性和静态方法 可以直接通过类名访问
 *        类名.静态属性 
 *        类名.静态方法 
 *        比如说:
 *        Student类有一个普通方法 sayHello(){}
 *        我们想调用这个方法?
 *          01.实例化对象  Student  stu=new Student();
 *          02.调用方法       stu.sayHello();
 *         
 *         现在,sayHello()变成了静态方法
 *         我们怎么访问:
 *         01.  sayHello()在Student类中   无需实例化
 *         02. 直接访问   Student.sayHello();
 *       
 */
public class Student { // 实体类

 static String staticName; // 类属性 所有的对象共享一份
 String commonName; // 对象属性 每个对象都有一份

 public void sayHello() {
  System.out.println("普通的方法");
 }

 public static void sayBye() {
  System.out.println("静态的方法");

*********************************************************

package com.xdf.staticdemo;

public class StudentDemo {

 public static void main(String[] args) {
  // 实例化Student对象
  Student stu1 = new Student();
  stu1.commonName = "小黑1";

  Student stu2 = new Student();
  stu2.commonName = "小黑2";
  // 类名直接点出属性
  Student.staticName = "哈哈哈";
  // 问题? stu1的staticName是??
  System.out.println(stu1.staticName);
  System.out.println("=============================================");
  // 调用普通的方法
  stu1.sayHello();
  // 调用静态方法
  Student.sayBye();

 }

}

***********************************************************************

package com.xdf.thisdemo;

/**
 * 公司中,会有对应的代码生成器
 *
 * 现在书写实体类的步骤
 * 01.私有化属性
 * 02.快捷键 生成set和get
 * 03.快捷键生成 有参和无参构造
 * 04.重写toString()
 *
 *
 * this的注意点:
 *   01.this()调用无参构造
 *   02.this(...)调用带参构造
 *   03.this调用构造方法的时候 只能出现在 构造方法中!
 *   04.this调用构造方法的时候  必须位于构造方法中的第一行
 *   05.this访问对象的属性或者方法的时候 可以出现在任何方法中
 */
public class Student {
 private int age; // 年龄
 private String name; // 姓名

 // 普通的方法
 public void newInstance() {
  // this(1000, "小白");不允许调用带参构造
  // this(); // 不允许调用无参构造
 }

 public Student() { // 无参构造 方法之间可不可以相互调用
  // 调用带参构造
  this(1000, "小白");
  System.out.println("1111111");

 }

 public Student(int age, String name) {
  this.age = age; // 调用属性
  this.name = name;
  this.newInstance(); // 调用方法
 }

 public int getAge() {
  this.newInstance();// 调用方法
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 @Override
 public String toString() {
  return "Student [age=" + age + ", name=" + name + "]";

***************************************************************

package com.xdf.thisdemo;

public class StudentDemo {

 public static void main(String[] args) {
  // Student stu = new Student();
  // System.out.println(stu); // name和age 都是默认值 null 0

  Student stu1 = new Student(100, "小黑");
  System.out.println(stu1); // 调用了带参构造 属性就有值

  // 需要调用无参构造 也能给属性赋值
  Student stu2 = new Student();
  System.out.println(stu2);
 }

}

 

posted @ 2017-12-06 12:08  水墨&丹青  阅读(99)  评论(0编辑  收藏  举报