黑马程序员-java的面向对象(一)

时间:2023-02-14 12:11:05


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


java是面向对象编程,什么是对象,我的理解是世界所有的东西都是对象,面向对象就是面向这些东西,吃的饭,喝的水,玩的电脑这些我认为都是对象,你我他也是对象。这些对象则是由不同的东西构成的,对象不一样作用也不一样,我们可以通过一句话,或者一个动作(例如我按开机按钮,计算机就打开了)来得到我们想要的。

    面向对象设计的重点就是“类”的设计。数据表示类的“属性”,函数表示类的“行为”,也叫“方法”。
面向对象的三大特征:封装 性 (Encapsulation); 继承性(Inheritance) ;多态性  (Polymorphism。
类的定义:class Person
{   int age;       //age是类的属性 ,也叫类成员变量 
  void shout()   //shout是方法也叫类的成员函数
{
System.out.println(“oh,my god! I am “ + age);
}
}
对象的产生:Person p=new Person();创建新的对象之后,我们就可以使用“ 对象名.对象成员 ”的格式,来访问对象的成员(包括属性和方法)。当一个对象被创建是,会对其中的各个类型的成员变量自动初始化赋值。如下
 成员变量类型 初始值
byte 0
short 0
int 0
long 0L

float 

double

0..F

0.0D

char

boolean

'\u000'(空)

False

All reference type null


对象的使用:equals方法是用于比较两个独立对象的内容是否相同,==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。


匿名对象:我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象, 如:new Person().shout(); 
如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
我们经常将匿名对象作为实参传递给一个函数调用。
构造函数的定义:构造方法的特征:它具有与类相同的名称;
它不含返回值;它不能在方法中用return语句返回一个值注意:在构造方法里不含返回值的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动调用了。


构造方法的重载:1、和一般的方法重载一样,重载的构造方法具有不同个数或不同类型的参数,编译器就可以根据这一点判断出用new 关键字产生对象时,该调用哪个构造方法了。产生对象的格式是:new 类名(参数列表) 。
2、重载构造函数可以完成不同初始化操作:a)创建指定类的新实例对象,在堆内存中为实例对象分配内存空间b)调用指定类的构造方法c)将实例对象的首地址赋值给引用变量。
3、在java每个类里都至少有一个构造方法,如果程序员没有在一个类里定义构造方法,系统会自动为这个类产生一个默认的构造方法,这个默认构造方法没有参数,在其方法体中也没有任何代码,即什么也不做。由于系统提供的默认构造方法往往不能满足编程者的需求,我们可以自己定义类的构造方法,来满足我们的需要,一旦编程者为该类定义了构造方法,系统就不再提供默认的构造方法了。
 
this的应用:一个类中的成员方法可以直接调用同类中的其他成员,其实我们在一个方法内部使用“this.其他成员”的引用方式和直接使用“其他成员”的效果是一样的,那this还有多大的作用呢?在有些情况下,我们还是非得用this关键字不可的 。让类的成员变量名和对其进行赋值的成员方法的形参变量同名是必要的,这样的代码谁看了都能明白这两个变量是彼此相关的,老手看到函数的定义,就能揣摩出函数中的代码,大大节省了别人和自己日后阅读程序的时间。 


static静态变量 :静态成员变量(方法)可以用“类名.变量名(方法名)”的方法引用。当然也可以创建一个实例对象,再去引用该静态成员变量(静态方法)。非静态方法不能被静态方法直接调用,如果要调用则必须创建一个对象,让对象去调用该方法。


static静态方法:在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
注意:静态方法不能以任何方式引用this和super关键字(super关键字在下一章讲解)。与上面的道理一样,因为静态方法在使用前不用创建任何实例对象,当静态方法被调用时,this所引用的对象根本就没有产生。


静态代码块 :一个类中可以使用不包含在任何方法体中的静态代码块(static block ),当类被载入时,静态代码块被执行,且只被执行一次,静态块经常用来进行类属性的初始化。 


单态设计模式:所谓类的单态设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为private,这样,就不能用new 操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。


内部类:内部类可以访问外部类的成员变量,包括private,外部类却不可以访问内部类的成员变量。如果内部类被static修饰,则相当于一个外部类。
内部类的使用:
public class Outer
{
private int size;
public class Inner
{
private int size;
public void doStuff(int size)
{
size++;//引用的是doStuff函数的形参
this.size++;//引用的是Inner类中的成员变量
Outer.this.size++;//引用的是Outer类中的成员变量
}
}
}


内部类被外部的使用:
class Outer
{
private int size=10;
public class Inner
{
public void doStuff()
{
System.out.println(++size);
}
}
}
Public classTestInner
{
public static void main(String[] args)
{
Outer outer=new outer();
Outer.Inner  inner=new Outer.Inner();
Inner.dostuff();
}
}


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