黑马程序员——java基础-面向对象(一)

来源:互联网 发布:touch捏脸数据男 编辑:程序博客网 时间:2024/06/05 02:50

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

第一节:面向对象的概述
一、面向对象的简述:
1、何为面向对象?
面向对象是一种符合人类思维习惯的编程思想,我们在现实的生活中,有着各种形态不同的事物,他们之间直接或者间接有着各种各样的联系。
在程序中使用对象来反应现实生活中的事物,用对象的关系来描述事物之间的关系,这种思想就是面向对象。
2、面向对象是相对面向过程而言的。面向对象是一种思想。
3、面向过程,强调的是功能行为。
4、面向对象,将功能封装成对象,强调了具备功能的思想。
5、面向对象思想特点:
(1)、是一种更符合我们思想习惯的思想。
(2)、可以将复杂的事情简单化。
(3)、将我们从执行者变成了指挥者。
 (3).1 角色发生了转换。 
6、面向对象的三大特征:
(1)、封装
(2)、继承
(3)、多态
二、类与对象
1、对类与对象的理解:
 面向对象的编程思想力图在程序中对事物的描述与该事物在现实中的形态保持一致。面向对象的思想中提出两个概念,即是类和对象。
 类:对某一类事物的抽象描述。
 对象:用来表示现实中该类事物的个体。
2、类的定义
类是对象的抽象,它是用于描述一组对象的共同的特征和行为。类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征,称为属性,成员方法用于描述对象的行为,称为方法。
3、类与对象的案例
(1)、学生类
(1).1 如何定义
(1).1.1 按照事物到类的过程一步步分析
(1).2 如何使用
(1).2.1 创建对象
(1).2.2 类名 对象名 = new 类名()
(1).2.3 对象名.成员变量(进行赋值)
(1).2.4 对象名.成员方法
(2)、代码体现

class Student{String name="张三";//来记录名字的一个成员变量int age=23;//来记录年龄的一个成员变量public void show(){//来打印姓名与年龄System.out.println("name="+name+"....age="+age);}}class Demo{public static void main(String[] args){//创建学生的对象 Student stu=new  Student(); stu.name="王五";//进行对姓名赋值 stu.age=21;//进行对年龄赋值 stu.show();//调用方法}}

4、成员变量和局部变量的区别 
(1)、在类中的位置不同
(1).1 成员变量定义在类中,整个类中都可以访问。 
(1).2 局部变量定义在函数,语句,局部代码块中,只在所属的区域有效。 
 
(2)、在内存中的位置不同 
(2).1 成员变量存在于堆内存的对象中。 
(2).1 局部变量存在于栈内存的方法中。 
 
(3)、生命周期不同
(3).1 成员变量随着对象的创建而存在,随着对象的消失而消失。 
(3).2 局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。 
 
(4)、初始化值不同
(4).1 成员变量都有默认初始化值。 
(4).2 局部变量没有默认初始化值。  
5、类作为形式参数的问题?
(1)、如果你看到一个方法需要的参数是一个类名,就应该知道这里实际需要的是一个具体的对象。
6、匿名对象
(1)、定义:就是没有名字的对象。是对象的一种简化表示形式。
(2)、匿名对象的两种使用情况
(2).1 对象调用方法仅仅一次的时候。
(2).2 作为实际参数传递。
7、封装
(1)、封装概述
(1).1 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
(2)、好处
(2).1 隐藏实现细节,提供公共的访问方式
(2).2 提高了代码的复用性
(2).3 提高安全性。
(3)、封装原则
(3).1 将不需要对外提供的内容都隐藏起来。
(3).2 把属性隐藏,提供公共方法对其访问。
(4)、private是封装的一种体现。
(4).1 封装:类,方法,private修饰成员变量。
8、private关键字
(1)、私有的意义,可以修饰成员变量和成员方法
(2)特点:
(2).1 被private修饰的后的成员只能在本类中被访问
(3)private的应用:以后再写一个类的时候。
(3).1 把所有的成员变量给private了。
(3).2 提供对应的getXxx()/setXxx()方法。
(4)、代码体现
class Demo{public static  void main(String[] args){//创建Student对象Student str=new Student();//对成员变量的name age 进行赋值str.setName("张三");str.setAge(11);//用对象进行调用成员变量String s=str.getName();int in=str.getAge();//打印出成员变量的值。System.out.println("...name="+s+"........age="+in);}}class Student{//把成员变量进行私有化private String name;private int age;//对成员变量进行赋值,提供对外访问方式public void setName(String name){this.name=name;}public void setAge(int age){this.age=age;}//获取到成员变量的值public String getName(){return name;}public int getAge(){return age;}}

9、构造函数
(1)、构造函数的定义:对象一创建就需要做一些事情或者具备某些数据。
(2)、构造函数的作用:可以给对象进行初始化。 
(3)、构造函数的格式
(3).1 方法名与类名相同。
(3).2 没有返回值类型,连void都没有。
(3).3 没有具体的返回值。
(4)、何为构造函数?
(4).1 函数,就是一个功能。
(4).2 功能特点在于给对象初始化。
(4).3 有其自己的特定的写法。
(5)、构造函数的一些细节
(5).1 类中都有一个默认的空参数构造函数,一旦自定义了构造函数后,默认的构造函数就没有了。
(5).2 多个构造函数在类中是重载的。
(5).3 通过this关键字对构造函数在其他构造函数中进行调用。
(6)、一般函数和构造函数的区别 
(6).1 在写法不同。
(6).2
构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。 
一般函数:对象创建后,需要函数功能时才调用。  
(6).3
构造函数:对象创建时,会调用只调用一次。 
一般函数:对象创建后,可以被调用多次。 
(7)、给成员变量赋值的方式
(7).1 setXxx()。
(7).2 带参构造方法。
10、this
(1)、this:代表所在类的对象引用
(2)、this的两个使用的方式
(2).1 方式一:
构造函数之间的调用,是为了提高代码的复用性。(注:必须定义在构造函数的第一行,原因是初始化动作先执行)。
(2).2 方式二
区分局部变量和成员变量同名的情况
(3)、代码体现
class Demo{public static void main(String[] args){//创建Person 对象,并传入参数Person p=new Person("张三",34);//调用方法String s=p.getName();//打印调用方法所返回的值。System.out.println(".....name="+s);}}class Person{//把成员变量进行私有化。private String name;private int age;//构造函数带name 和age的Person(String name,int age){this(age);//用this调用构造函数this.name=name;//用this来区分name}//带age的构造函数Person(int age){this();this.age=age;//打印,看是否能调用System.out.println("调用成功");}//空参的构造函数Person(){System.out.println("第二次调用成功");}//对成员变量进行赋值,提供对外访问方式public void setName(String name){this.name=name;}public void setAge(int age){this.age=age;}//获取到成员变量的值public String getName(){return name;}public int getAge(){return age;}}

11、static
(1)、static的特点
(1).1 它是一个修饰符,可以修饰成员变量和成员方法。
(1).2 因为它的成员是随着类加载而加载,所以它优先于对象存在。
(1).3 可以通过类名调用,格式:类名.静态成员 。 
(1).4 被所有类的对象共享。
(1).5 被它修饰的数据是共享数据,而在对象中存储的数据是特有数据
(2)、static存储的位置
存储在方法区中的静态区。
(3)、静态变量与成员变量的区别?
(3).1 所属不同
静态变量:属于类,类变量。
成员变量:属于对象,对象变量,实例变量。
(3).2 调用方式不同
成员变量:成员变量只能被对象调用。 
静态变量:静态变量可以被对象调用,还可以被类名调用。 
(3).3 生命周期不同
静态变量:静态变量是随着类的加载而加载,随着类的消失而消失。
成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失。
(3).4 数据存储位置不同 
成员变量:成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。 
静态变量:静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。 
(4)、静态的注意事项
(4).1 在静态方法中没有this或者super关键字。
(4).2 静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)。
(5)、main方法是静态的
public static void main(String[] args) {}
(5).1 public 被jvm调用,访问权限足够大。
(5).2 static 被jvm调用,不用创建对象,直接类名访问
(5).3 void被jvm调用,不需要给jvm返回值
(5).4 main 一个通用的名称,虽然不是关键字,但是被jvm识别
(5).5 String[] args可以接收数据,提供程序的灵活性
(6)、代码块
(6).1 代码块:用{}括起来的代码。
(6).2 代码块的分类:
(6).2.1 局部代码块
    用于限定变量的生命周期,及早释放,提高内存利用率。
(6).2.2 构造代码块
把多个构造方法中相同的代码可以放到这里,每个构造方法执行前,首先执行构造代码块。
(6).2.3 静态代码块
对类的数据进行初始化,仅仅只执行一次。
(6).3 静态代码块,构造代码块,构造方法的顺序问题?
 静态代码块 > 构造代码块 > 构造方法
(7)、对象的创建过程
(7).1 加载指定类。
(7).2 将静态变量默认初始化,显示初始化。
(7).3 静态代码块初始化。
(7).4 new在堆内存中开辟空间,明确首地址值。
(7).5 对象中的成员变量进行默认初始化。
(7).6 调用对应的构造函数。
(7).6.1 super()调用父类的构造函数。
(7).6.2 成员变量的显示初始化。
(7).6.3 构造代码块初始化。
(7).6.4 构造函数自定义内容的初始化。
第二节:单例设计模式
一、单例设计模式的简述及应用
1、设计模式:解决某一类问题最行之有效的方法。java中有23种。
2、单例设计模式:解决一个类在内存只存在一个对象的情况。
3、应用场景是什么?
多应用程序可以实现数据共享交换。
4、思路是什么?
(1)、为了避免其它程序过多建立该对象,要先禁止其他的程序建立该对象。
(2)、为了也能让其它的程序可以访问到该类的对象,只好在本类中自定义一个对象。
(3)、为了方便其它的程序对自定义对象进行访问,就得对外提供一些访问方式。
5、步骤及代码体现?
(1)、将构造函数私有化。
(2)、在类定义一个本类对象。
(3)、提供一个方法可以获取到该对象。
(4)、代码体现
//俄汉式class Single{//私有创建Single对象private Single s=new Single();//私有的构造方法private Single(){}//对外提供公共的访问方式public static Single getInstance();{//返回次对象return s;}}//懒汉式class Single{//私有一个变量,并没有创建对象private Single s=null;//私有构造方法private Single(){}//对外提供公共的访问方式public static Single getInstance(){//进行判断如果s==null就创建一个对象if (s==null)s=new Single();return s;}}
6、饿汉式和懒汉式的区别?
饿汉式:特点是先初始化对象,安全,在实际开发中常用。
懒汉式:特点是方法被调用时,才初始化的,也称之谓对象的延时加载。


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

0 0
原创粉丝点击