黑马程序员——黑马学习日志之五 面向对象,类,函数,匿名对象,封装,构造函数,this,代码块

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

黑马学习日志之五 面向对象,类,函数,匿名对象,封装,构造函数,this,代码块

面向对象

1.1 面向对象的概念

面向对象是相对面向过程而言的,面向对象和面向过程都是一种思想。 

面向对象强调对象,程序员是指挥者。面向过程强调过程,程序员是执行者。

面向对象是一种符合人们思考习惯的思想;可以将复杂的事情简单化;将程序员从执行者转换成了指挥者。面向对象将功能封装进对象,强调具备了功能的对象。

例子用来理解:

买电脑:

面向过程:查阅资料去商城砍价还价买电脑

面向对象:找个懂电脑的朋友(对象),让他去买。

做菜:

面向过程:买菜、洗菜、做菜、吃饭、刷碗、倒垃圾;

面向对象:找了女朋友,让女朋友去做饭。女朋友就是对象。

注:

(1)面向对象的开发过程:其实就是不断的创建对象,使用对象,指挥对象做事情。

(2)完成需求时:先要去找具有所需功能的对象来用;如果该对象不存在,那么创建 一个具有所需功能的对象;这样简化开发并提高复用。

(3)面向对象设计过程:就是在管理和维护对象之间的关系。

1.2 面向对象特征

封装,继承,多态。

2.1定义类

  将一系列特征相似的对象的共同特征及行为抽取出来进行描述,写在一个class中,用成员变量描述对象的特征,用成员方法来描述对象的行为。

2.2类与对象关系

对象是类的实例,类是对象的抽象。

类是用来描述对象的。由于对象是虚拟出来的东西,是看不见摸不着的,我们需要在程序中使用对象,就需要用一种方式来描述对象,然后根据这个描述来创建对象。

比如:现实生活中的人这个抽象事物就是一个类,人类的属性姓名、年龄等是成员变量,人类的行为吃饭、睡觉等是成员方法。而张三就是人类的具体体现,是一个对象。

2.3 创建对象

格式:类名 对象名 = new 类名();

如: Person类中有一个zhangsan的对象。

     Person zhangsan = new Person();

对象调用的格式:  对象名.成员变量    对象名.成员方法名()

     如:  zhangsan.name;     zhangsan.sleep()

例子: 

//创建一个学生类

class Student {

String name; // 成员变量 姓名

char sex;   //  性别

int age; //     年龄

//成员方法 学习

public void study(){

System.out.println("学习");

}

//成员方法 /吃饭

public void eat(){

System.out.println("吃饭");

}

///成员方法 睡觉

public void sleep(){

System.out.println("睡觉");

}

}

class Demo {

public static void main(String[] args) {

//创建学生对象

Student stu = new Student();

//输出成员变量的默认值

System.out.println(stu.name + ".."+ stu.sex +"..." + stu.age);

//为成员变量赋值

stu.name = "张三";

stu.sex = '男';

stu.age = 80;

System.out.println(stu.name + ".."+ stu.sex +"..." + stu.age);

//使用成员方法

stu.study();

stu.eat();

stu.sleep();

}

}

注意:

Person p = new Person();
   它在内存中做了哪些事情?
   A:将Person.class文件加载到内存中。
   B:在栈内存中声明Person类型的变量P
   C:在堆内存中创建一个对象Person。分配地址值
   D:把Person中的属性进行默认初始化。
   E:把Person中的属性进行显示初始化。
   F:调用构造代码块(如果没有,不执行这个操作)
   G:调用构造函数进行初始化。
   H:把堆内存的地址(引用)赋给了栈内存中P

2.4 成员变量和局部变量区别

代码位置:

成员变量:在类中,方法外;

局部变量:在方法内

内存位置:

成员变量:在堆内存中;

局部变量:在栈内存中。

是否有默认值:

成员变量:有默认值,

局部变量:没有默认值;

使用范围:

成员变量:在类中的任何位置都可以使用,在整个类中都可以访问,

局部变量:只能在该方法中访问。

创建时间:

成员变量:随着对象的创建而存在,随着对象的释放而消失,生命周期长;

局部变量:随着方法的调用而存在,随着方法的消失而释放。

3  函数(方法)

3.1   函数的定义

函数就是定义在类中的具有特定功能的一段独立小程序。函数也称为方法。

3.2   函数的格式

修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2…) {

执行语句;

return 返回值;

}

3.3  函数的特点

一般函数只有被调用后,才执行。

void 表示没有返回。在这个函数的结尾可以不写return

其实jvm会自动的结尾处加上return;

3.4  定义自己的函数时注意:

明确该功能的结果 其实就是该功能的返回类型。

明确该功能的参数 其实就是明确该功能中是否需要未知内容(形式参数)参与运算。

明确未知内容的类型和个数。

3.5  函数的重载

函数名相同,参数列表不同。 

参数类型不同。int add(int i)void add(double d)

参数个数不同。add(int a,int b);add(int a,int b,int c)

参数顺序不同  print(String name, int age) 

重载特点:与返回值类型无关,只看参数列表。便于阅读,优化程序设计。

3.6  方法的调用:

定义方法参数:int  x, int  y   称为形式参数 形参

调用方法参数:100,300        称为实际参数 实参

调用方法必须使用实参。无返回值,直接调用 ;有返回值,有参数,要传参数。

匿名对象

我们可以不定义变量引用对象,使用new关键字创建对象后直接使用,这样的对象没有名字,所以叫匿名对象。

匿名对象因为没有任何引用到达,在使用一次之后即成为垃圾。

通常我们需要使用一个对象且只使用一次的时候,就可以使用匿名对象。比如将对象作为一个参数传递给另外一个函数。

例子:

class Person {

String name = "sss";

int age = 16;

public void show(){

System.out.println(name + "..." + age);

}

}

class Test {

public void method(Person  p){

Person p2 = new Person();

p2.show();

p.show();

}

}

class AnonymityDemo {

public static void main(String[] args) {

//匿名对象的方式

new Person().show();

Test t = new Test();

//匿名对象的方式

t.method( new Person() );

}

}

封装

5.1 封装概念:

封装是指隐藏对象的属性(成员变量)和实现细节,仅对外提供公共访问(成员方法)方式。

封装能够将变化隔离;便于使用;提高重用性;提高安全性。

例子:老板找你做开发,你怎么做,老板不管,他只要最后的结果。

例子:

class Demo{
    private int age;//把属性私有对外提供公共的访问方法,可控性提高了
    /*
   设置是setXxx要传参数
    获取是getXxx要返回值类型,返回值类型和属性一致
    */

public void setAge(int age){// set一般返回值是void 
     if(age>=0 && age<=200)
      this.age = age;    
     else
      System.out.println("外星来的");
    }

    public int getAge(){  //get 一般返回值是age的类型 int
     return  age;
    } 

}
   class DemoTest{
    public static void main(String[] args) {
     Demo d = new Demo();
     d.setAge(50);
     System.out.println(d.getAge());
    }
  }

5.2 private关键字

private关键字是一个权限修饰符,用于修饰成员(成员变量和成员函数),被私有化的成员只在本类中有效。对外提供对应的setget方法对其进行访问,提高对数据访问的安全性。

私有只是封装的一种表现形式。

构造函数

特点:函数名和类名相同。

      没有返回值类型。注意:没有返回值类型不等同于voidvoid也是一种返回值类型。不能使用return关键字返回任何值。

      在使用new关键字创建对象之后自动调用。

作用:当创建对象的时候要调用构造函数,给对象进行初始化

格式:修饰符   类名(参数列表){}

      空参构造函数  修饰符  类名(){}

注意:

(1)当java在类中没写构造函数,程序执行时,会自动添加没有参数的空参构造 函数。如果当前类中写了构造函数,那么,在程序执行的时候,JVM不会为 当前类添加空参数构造函数。

(2)当创建对象的时候,会调用构造函数,给创建出来的对象进行成员初始化。

(3)多个构造函数是以重载的形式存在的,调用构造函数时根据参数列表来区分  调用哪个构造函数

7 this关键字

this关键字:代表的是函数当前对象的引用,即代表其所在函数所属对象的引用。

this 关键字的使用

(1)当局部变量与成员变量重名的时候,可以使用this关键字来区分。格式:this.成员  变量名。

(2)在构造函数中使用。构造函数之间调用只能通过this语句来调用。this语句只能  放在构造函数的第一行。

(3)当定义类中功能时,该函数内部要用到调用该函数的对象时,用this来表示这个  对象。

代码块

代码块就是通过大括号括起来

局部代码块:在方法中使用的代码块,

作用:可以控制变量的使用范围。

构造代码块:在类中使用的代码块(类中方法外)。

作用:可以给成员变量赋值,对象一建立就运行,在构造方法前执行。

执行顺序:构造代码块,构造方法,普通方法

         例子:

class Person {
String name;
int age;
public Person(){
System.out.println(name +"..."+ age);
name = "cpp";
age = 24;
}

{
System.out.println(name +"..."+ age);
}
{
name = "sqq";
age = 23;
}
//普通方法
public void method(){
System.out.println(name +"..."+ age);
}
}
class CodeBlockDemo2 {
public static void main(String[] args) {
Person p = new Person();
p.method();
}
}

 

 

 

 

 

 

 

 

 

 


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值