黑马程序员_Java面向对象上

------------- java培训、android培训、java博客、java学习型技术博客、期待与您交流! --------------

 

        Java面向对象包括: 面向对象概念,类与对象的关系,封装,构造函数,this关键字,static关键字,单例设计模式。

面向对象概念:面向对象是相对面向过程而言。面向对象和面向过程都是一种思想。

面向过程:强调的是功能行为。

面向对象:将功能封装进对象,强调具备了功能的对象。

面向对象是基于面向过程的。

面向对象的三个特征:封装,继承,多态。

注意:以后编程先找对象,有对象就拿过来用,没有对象就设计一个对象。

 

类与对象的关系:

类:就是对现实生活中事物的描述。

对象:就是这类事物实实在在存在的个体(实体)。如:

现实生活中的对象:张三,李四

描述:就是提取这些对象的共性内容如:姓名,年龄,性别。

映射到Java中,描述就是class定义的类。具体对象就是对应Java在堆内存中用new建立的实体。

类与对象的关系图例:

其实定义类,就是在描述事物,就是在定义事物的属性和行为。属性对应是类中的变量,行为对应类中的函数(方法)。属性和行为共同成为类中的成员(成员变量和成员函数)。

成员变量和局部变量的区别:

作用范围:成员变量作用于整个类中。局部变量作用于函数中,或者语句中。

在内存中的位置:成员变量在堆内存中,因为对象的存在,才在内存中存在。局部变量存在于栈内存中。

匿名对象:

匿名对象是对象的简化形式。例如:Car c=new Car()可简写为new Car(),这就是匿名对象。

匿名对象两种使用情况:

1.当对对象方法仅进行一次调用时。

2.匿名对象可以作为实际参数进行传递。

 

封装:

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

封装好处:将变化隔离,便于使用,提高重用性,提高安全性。

封装原则:

1.将不需要对外提供的内容都隐藏起来。

2.把属性都隐藏,提供公共方法对其访问。

注:函数是Java中最小的封装体。类也是封装体。

private关键字:

private:私有,权限修饰符。用于修饰类中的成员(成员变量和成员函数)。私有只在本类中有效。

注意:私有仅仅是封装的一种表现形式。

将成员私有化后,类以外即使建立了对象也不能直接访问,需要对外提供访问方式。可以在访问方式中加入逻辑判断语句,对访问的数据进行操作,提高代码的健壮性。

private关键字应用:将成员变量私有化,对外提供对应的set,get方法对其进行访问,提高对数据访问的安全性。

 

构造函数:

特点:

1.函数名与类名相同。

2.不用定义返回值类型。

3.不可以写return语句。

作用:给对象进行初始化。

注意:

1.默认构造函数的特点。

2.多个构造函数是以重载的形式存在的。

构造函数的小细节:当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。当在类中自定义了构造函数后,默认的构造函数就没有了。

构造函数和一般函数的区别:

1.构造函数和一般函数在写法上有不同。

2.在运行上也有不同。构造函数是在对象一建立就运行,给对象初始化。而一般函数是对象调用才执行,是给对象添加对象具备的功能。

3.一个对象的建立,构造函数只运行一次。而一般函数可以被该对象调用多次。

构造函数的应用:当分析事物时,该事物存在就具备一些特性或行为,那么将这些内容定义在构造函数中。

构造代码块:

作用:给对象进行初始化。对象一建立就运行,而且优先于构造函数执行。

和构造函数的区别:构造代码块是给所有对象进行统一初始化;而构造函数是给对应的对象初始化。构造代码块中定义的是不同对象共性的初始化内容。

注:构造函数可以private修饰。当一个类中所有构造函数都被private修饰,那么这个类就不可能创建对象。因为对象不能进行初始化动作。

 

this关键字:

this:代表它所在函数所属对象的引用。简单说,哪个对象在调用this所在的函数,this就代表哪个对象。

this作用:用于区分局部变量和成员变量同名情况。

this的应用:

1.当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用了本类对象,都用this表示。

2.this语句用于构造函数之间进行互相调用。this语句只能定义在构造函数的第一行。因为初始化要先执行。

 

static关键字:

作用:用于修饰成员(成员变量和成员函数)。

被修饰的成员具备以下特点:

1.随着类的加载而加载。也就是说,静态会随着类的消失而消失。说明静态成员的生命周期最长。

2.优先于对象存在。明确一点,静态是先存在,对象是后存在的。

3.被所有对象所共享。

4.可以直接被类名调用。

使用注意:静态方法只能访问静态成员。静态方法中不可以写this,super关键字,因为静态优先于对象存在。主函数是静态的。

当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用。(类名.静态成员)

实例变量和类变量的区别:

1.存放位置:类变量随着类的加载而存在于方法区中。实例变量随着对象的建立而存在于堆内存中。

2.生命周期:类变量生命周期最长,随着类的消失而消失。实例变量生命周期随着对象的消失而消失。

静态的利弊:

利:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份。可以直接被类名调用。

弊:生命周期过长。访问出现局限性。(只能访问静态的)

主函数:是一个特殊的函数,作为程序的入口,可以被JVM调用。

主函数的定义:public static void main(String[] args)

public:代表着该函数访问权限是最大的。

static:代表着主函数随着类的加载就已经存在了。

void:主函数没有具体的返回值。

main:不是关键字,但是是一个特殊的单词,可以被JVM识别。

(String[] args):函数的参数,参数类型是一个字符串数组。

args:参数变量名,可以更改名称。

注意:主函数是固定格式的。

静态的应用:要从两方面讲:

静态变量(类变量):当对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于堆内存中。

静态函数:当功能内部没有访问到非静态数据(对象中的特有数据),那么该功能可以定义成静态的。

帮助文档:

用文档注释:/**

                         */

完成说明书,用javadoc生成帮助文档。

注意:生成帮助文档的类必须是public类。帮助文档从index文件开始看。帮助文档中体现的是对外暴露的内容,私有的内容是不会出现的。

静态代码块:

格式: static

                  {

                      静态代码块中的执行语句;

                  }

特点:随着类的加载而执行,只执行一次,并优先于主函数。用于给类进行初始化。

对象的初始化过程:

例:Person p=new Person("zhangsan",20);

这句话做了什么事情?

1.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中。

2.执行该类中的静态代码块,如果有的话,给Person.class进行初始化。

3.在堆内存中开辟空间,分配内存地址。

4.在堆内存中建立对象的特有属性,并进行默认初始化。

5.对属性进行显示初始化。

6.对对象进行构造代码块初始化。

7.对对象进行对应的构造函数初始化。

8.将内存地址赋给栈内存中的p变量。

 

设计模式:解决某一类问题最行之有效的方法。Java中有23种设计模式。

单例设计模式:解决一个类在内存中只存在一个对象。

怎样保证对象唯一:

1.将构造函数私有化。

2.在类中创建一个本类对象。

3.提供一个方法可以获取到该对象。

单例设计模式应用:对于事物该怎么描述,还怎么描述。当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。

单例设计模式方式:

1.饿汉式:先初始化对象。开发时常用,因为简单安全。

class Single
{
 private static final Single s=new Single();
 private Single(){}
 public static Single getInstance()
 {
  return s;
 }
}

2.懒汉式:对象被方法调用时才初始化,也叫做对象的延时加载。

class Single
{
 private static Single s=null;
 private Single(){}
 public static Single getInstance()
 {
  if(s==null)
   s=new Single();
  return s;
 }
}

解决当多用户使用懒汉式的安全隐患:(双重判断)

class Single
{
 private static Single s=null;
 private Single(){}
 public static Single getInstance()
 {
  if(s==null)
  {
   synchronized(Single.class)
   {
    if(s==null)
     s=new Single();
   }
  }
  return s;
 }
}

 

------------- java培训、android培训、java博客、java学习型技术博客、期待与您交流! --------------

 

你可能感兴趣的:(java,设计模式,文档,javadoc,class,android)