黑马程序员———java基础知识———面向对象



------- android培训java培训、期待与您交流! ----------


 一.类:是一组相关的"属性"和"行为"的集合;
    对象:是该类事物的具体体现;
 二.类和对象的关系:
  1.现实:
   类 对象
   猫 波斯猫
    折耳猫
    加菲猫
  ----------------------------------------
   狗 金毛
    藏獒
    沙皮
  2.代码:
   类   对象
   class Cat{  Cat c1 = new Cat();
    String name; c1.name = "波斯猫";
    int age; c1.age = 2;
   }   -----------------------------------
      Cat c2 = new Cat();
      c2.name = "折耳猫";
      c2.age = 3;
   -----------------------------------------------------------
   class Dog{  Dog d1 = new Dog();
    String name; d1.name = "金毛";
    int age; d1.age = 2;
   }   -----------------------------------
      Dog d2 = new Dog();
      d2.name = "藏獒";
      d2.age = 3;
      
 三.类的定义:
  1.使用关键字:class(注意小写)
  2.一个java源文件中:
   1).如果定义多个类,但只有一个是public的;而且源文件名必须与这个public的类名一致;
   2).如果定义多个类,可以没有public类;源文件名没有一致性要求;
   3).main()方法不是必须放在public类中;
  3.类中可以定义什么:
   1).成员变量:
    A.可以是基本数据类型,也可以是任何引用数据类型;
    B.可以显示初始化;
     class Student{
      String name = "张三" ;
      int age = 20;
     }
    C.可以隐式初始化;
     整型:0
     浮点:0.0
     字符:'\u0000'
     布尔:false
     引用类型:null
   2).成员方法:
    A.可以有参数,可以没参数;
                                  可以有返回值,可以没有返回值;
   
    B.方法的"形参"可以是任何Java类型(基本数据类型、引用数据类型)
    C.方法的"返回值"可以是任何Java类型(基本数据类型、引用数据类型)
    D.一个类中可以定义多个同名的方法,但形参列表不完全相同,叫:方法的重载;
   3).内部类(后面讲);
  4.成员变量和局部变量的区别:
   1).成员变量:
    A.定义在"类体"中;可以是任何数据类型;
    B.会被自动初始化;
     class Student{
      String name;
      void show(){
       System.out.println("我叫:" + num); //打印:我叫:null
      }
     }
    C.当实例化对象后,被存储在"堆"中;
    D.当"对象"不被使用(没有任何引用),并被垃圾回收器回收时被清理;
     
   2).局部变量:
    A.定义在某个方法、或其它代码块中;
    B.必须显示初始化,否则不能访问其值;
     class Student{
      void show(){
       String name;
       System.out.println("我叫:" + name); //编译错误。局部变量必须显示初始化才能访问其值;
       name = "张三"; //OK。可以被赋值。
      }
     }
    C.当方法或其它代码块被执行时,基本数据类型的"值"和引用数据类型的"引用"都是存储在"栈"中;
    D.当方法或代码块执行完毕时,会被立即清理;
 四.对象的使用:
  1.创建对象使用new关键字;会在堆中分配内存空间;
   格式:
    类名  变量名 = new 类名();
  2.一个类可以创建多个对象;
  3.每个“对象”的“成员变量”在"堆"中都有一份独立的空间;
    每个“对象”的“成员方法”被存储在“方法区”中,多个对象只有一个“方法空间”;
  4.对象的"引用(地址)"被存储在"栈"中;
 五.方法的形参:
  1.可以是"基本数据类型":
   1).调用时,必须传递此类型的“值”;
   2).调用时,是将值复制一份到方法内部;
   3).在方法内,使用形参接收此值的副本;
   4).在方法内,如果更改此值,对原值没有影响;
    int a = 10;
    show(a);
    System.out.println(a);
    ----------------------------------
    public void show(int n){//n = 10
     n = 20;
    }
  2.可以是“引用数据类型”:
   1).调用时,必须传递此类型的“引用”;
   2).调用时,是将“引用(地址)”复制一份到方法内部;
   3).在方法内,使用形参接收此“引用”的副本;
   4).在方法内,如果通过此引用更改堆中的值,对原堆中的值将会产生影响;
 六.匿名对象:
  1.匿名对象:没有名字的对象:new Student();
  2.匿名对象的两种使用情况:
   1).对象调用方法仅仅一次的时候:new Student().show();
   2).作为实际参数传递:printStudent(new Student());

例如:

class Student
{
 String name;
 int age;
 char sex;
}
class MyMath
{
 double getPI(){
  return 3.1415926;
 }
 void printStudent(Student stu){//表示:接收一个有效的Student的引用
  System.out.println("学员姓名:" + stu.name);
  System.out.println("学员年龄: " + stu.age);
  System.out.println("学员性别:" + stu.sex);
 }
}
class Demo 
{
 public static void main(String[] args) 
 {
 // MyMath math = new MyMath();

  System.out.println(new MyMath().getPI());

  //如果后续不再使用math对象,那么可以在调用getPI()方法时,使用"匿名对象"
  
  new MyMath().printStudent(new Student());
 }
}


 七.封装:
  1.直接对外部暴露成员变量是很不安全的,这时可以将成员变量“私有化”,对外提供公有的
    get和set方法;
  2.封装的好处:
   1)隐藏实现细节,提供公共的访问方式
   2)提高了代码的复用性
   3)提高安全性。
  3.封装的原则:
   1)将不需要对外提供的内容都隐藏起来。
   2)把属性隐藏,提供公共方法对其访问。

封装的例子如下:

class Student
{
 private String name;
 private int age;
 private String schooName = "黑马程序员-北京校区";//此属性的值,只能被获取,不能被设置
 
 void setAge(int a){
  age = a;
 }
 int getAge(){
  return age;
 }

 void setName(String n){
  name = n;
 }
 String getName(){
  return name;
 }

 String getSchoolName(){
  return schoolName;
 }

}
class Demo 
{
 public static void main(String[] args) 
 {
  Student stu = new Student();
 // stu.name = "刘德华";
 // stu.age = 200;//当age属性被私有化后,这里不能直接访问了

 // System.out.println(stu.name + "," + stu.age);//当age属性被私有化后,这里不能直接访问了
  
 
  stu.setName("刘德华");
  stu.setAge(20);
  
  System.out.println(stu.getName() + "," + stu.getAge());

 }
}


 八.private关键字:
  1.是一种“访问修饰符”(将在day10讲到);
    Java中一共有四种访问修饰符:从宽到窄:public,protected,(默认),private
  2.用于修饰“成员变量”和“成员方法”;
  3.被private修饰的成员,只能在类的内部被其它成员访问。在类外部无法访问;
 九.this关键字:
  1.每个类都有一个“隐式”的变量:this;
  2.它是在实例化对象时,由虚拟机自动赋值的,会被自动赋值为当前对象的“引用”。
                  所以每个对象内的this变量的值是不同的;
  3.this关键字可以调用本对象的“成员属性”、“成员方法”、“构造方法”;
  4.以下情况必须显示的使用this:
   1).“局部变量”覆盖“成员变量”时,可以使用this显示的访问被覆盖的“成员变量”;
       否则访问的是“局部变量”;
   2).在一个构造方法中调用本类的其它构造方法;this()或this(实参);

例如:

class Student{

 String name;
 int age;
 int num = 10;

 void show(){
  System.out.println(this.name + "," + this.age);//this可以调用本类的成员属性
 }
 void fun(){
  show();//OK的,可以这样直接调用
  this.show();//OK的,也可以这样调用;
 }
 void fun2(){
  int num = 20;//局部变量覆盖同名的成员变量,这个是可以的。
  System.out.println("num = " + num);//此时访问的num 就是局部的num
  System.out.println("this.num = " + this.num);//此时可以通过this关键字,显示的访问被覆盖的成员变量num
 }

}
class Demo 
{
 public static void main(String[] args) 
 {
  Student stu1 = new Student();
  stu1.name = "刘德华";
  stu1.age = 20;

  Student stu2 = new Student();
  stu2.name = "张学友";
  stu2.age = 22;

  Student stu3 = new Student();
  stu3.fun2();
 }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值