黑马程序员-java基础面向对象
2015-02-17 14:03
134 查看
面向对象(Object Oriented)简称OO,使软件这几中一种比较流行的思想或思维模式。与此不同的模式还有面向过程。在java中,一切都是对象。“万物皆对象”。要理解OO,需要先理解对象和类的概念。
类和对象的概念:
在现实生活中,我们通常用事物具备的各种特征来描述事物(对象)。也称为事物的属性。对于对象来说每个属性都有特定的值。
类就是类别也叫数据类型。类就是对象的数据类型。编程语言的主要作用是用来描述现实生活中的事物,例如:计算机并不知道什么是整数,什么是字符,因此编程语言创造出了数据类型告诉计算机10是整数,a是字符,这就是数据类型的作用。
定义类:
世间万物都有类别(数据类型),编程语言无法提供的数据类型需要我们自己去定义。
创建和使用对象:
创建对象:
类名 对象名 = new 类名(); Book book = new Book();
对象的使用:(属性和方法属于对象需要通过“.”进行操作)。
调用属性: 对象名.属性名 book.price = 12.9 book.name = “java”
调用方法: 对象名.方法名() book.sail();
当执行Person p = new Person(“小强” , 35); 时,到底在内存中做了什么?
1,将Person.class文件加载进内存。
2,p是对象句柄(变量),那么在栈内存中开辟一个变量空间p。
3,在堆内存中给对象分配空间,并分配内存地址值
4,属性进堆内存,并进行默认初始化。
5,调用对应的构造方法进行对象初始化,对象初始化完毕。
6,将对象内存地址赋值给p变量,让p变量指向该对象。
成员变量和局部变量:
1. 作用范围
成员变量:定义在类中,可以被类中的任意方法访问。
局部变量:只在它所属的局部大括号中有效,一般出现在某个方法中。
2. 存储情况
成员变量(非静态):存储在堆内存中,随着对象的存在而存在。随着对象的回收而消失。(静态成员变量会在方法区中加载,不依赖于对象存在)
局部变量:存储在栈内存中,当方法被调用,或者语句被执行的时候才存在。
当方法运行完毕,或者语句运行完毕时,局部会被自动释放,所以成员变量也称为实例变量。
3. 初始化情况
成员变量:在堆内存中有默认初始值。
局部变量:必须手动初始化后,才能被使用。
封装:
封装的概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
封装的好处: 隐藏类的实现细节;方便给加入控制语句;方便实现修改;只能通过规定方法访问数据。
封装的实现:
1. 使用private修饰符使属性私有化
2. 给属性提供公有的getter/setter方法
public class Home {
private String address; //家庭地址
private double deposit; //家庭存款
public String getAddress() {
return address;
}
public void setAddress(String add) {
address = add;
}
public double getDeposit() {
return deposit;
}
public void setDeposit(double de) {
deposit = de;
}
}
Private修饰符
是一个访问权限修饰符;用于修饰类中成员(属性和方法);被私有化的成员只能在本类中有效访问;当成员私有化后,提高了安全性。但是访问权限降低了。这时可以通过对外提供公有的getter/setter方法间接对其进行访问。好处是:可以在方法中队成员变量的访问进行控制。
构造方法:
构造方法可以在创建对象时给属性赋值。分为无参构造方法和有参构造方法。通过无参构造方法创建出来的对象都是一样的,于是可以通过有参构造方法来对对象灵活地赋予初始值。
public class Person
{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
}
public static void main(String[] args){
Person p1=new Person("张三",22);
}
构造方法和普通方法的区别:
功能上:构造方法是给对象初始化的;普通方法是为对象满足的某种功能而存在的。
执行上:构造方法是在创建对象时自动调用;普通方法在调用的时候执行。
语法上:构造方法不需要返回类型,包括void,方法名跟类名一致。普通方法必须具备返回值。
This关键字:
This关键字只能用于方法体内。而且只能在非静态的方法中使用。当一个对象创建后,虚拟机JVM就会给这个对象分配一个引用自身的指针。就是this。This只和特定的对象关联,而不和类关联,同一个类中的不同对象有不同的this。简单来说:哪个对象调用this所在的方法,this就代表哪个对象。
public Person(String name,int age) { //有参构造方法
this.name= name;
this.age= age;
}
方法参数或者方法中的局部变量与成员变量(属性)同名的情况下,成员变量(属性)会被屏蔽,此时要访问成员变量(属性)则需要使用“this”关键字。
每个子类构造方法的第一条语句,都是隐含地调用super(),Java要保证先初始化父类。
this()和super()不能同时出现在一个构造方法里面,因为this必然会调用其它的构造方法,其它的构造方法必然也会有super语句的存在,相当于调用了两次父类的构造方法,这是不允许的。
this()必须放在第一行,否则就会隐含地调用super()。
匿名对象:
匿名对象是对象的简化形式,没有名字。由于没有名字,所以一般应用于那种只需要调用一次方法的场景。
Static关键字
static是静态修饰符。用于成员变量和成员方法;可以通过类名直接调用。随着类的加载而加载。生命周期最长,优先于对象存在。静态属性被类的所有对象共享。
静态的利弊:
利处:随意对象的共享数据提供单独空间的存储,节省空间,没有必要每一个对象都存储一份。可以被类名直接调用,比较方便。
弊处:生命周期过长,访问出现局限性。
代码块
代码块就是被{ }包裹的部分,Java中的代码块分为:
1.普通代码块,又称为局部代码块,存在于方法体中
2.构造代码块,又称为初始化代码块,在使用new关键字创建对象时执行,且先于构造方法执行
3.静态代码块,被static直接修饰的代码块,在类被加载时就执行,只执行一次,且先于main方法执行
类和对象的概念:
在现实生活中,我们通常用事物具备的各种特征来描述事物(对象)。也称为事物的属性。对于对象来说每个属性都有特定的值。
类就是类别也叫数据类型。类就是对象的数据类型。编程语言的主要作用是用来描述现实生活中的事物,例如:计算机并不知道什么是整数,什么是字符,因此编程语言创造出了数据类型告诉计算机10是整数,a是字符,这就是数据类型的作用。
定义类:
世间万物都有类别(数据类型),编程语言无法提供的数据类型需要我们自己去定义。
创建和使用对象:
创建对象:
类名 对象名 = new 类名(); Book book = new Book();
对象的使用:(属性和方法属于对象需要通过“.”进行操作)。
调用属性: 对象名.属性名 book.price = 12.9 book.name = “java”
调用方法: 对象名.方法名() book.sail();
当执行Person p = new Person(“小强” , 35); 时,到底在内存中做了什么?
1,将Person.class文件加载进内存。
2,p是对象句柄(变量),那么在栈内存中开辟一个变量空间p。
3,在堆内存中给对象分配空间,并分配内存地址值
4,属性进堆内存,并进行默认初始化。
5,调用对应的构造方法进行对象初始化,对象初始化完毕。
6,将对象内存地址赋值给p变量,让p变量指向该对象。
成员变量和局部变量:
1. 作用范围
成员变量:定义在类中,可以被类中的任意方法访问。
局部变量:只在它所属的局部大括号中有效,一般出现在某个方法中。
2. 存储情况
成员变量(非静态):存储在堆内存中,随着对象的存在而存在。随着对象的回收而消失。(静态成员变量会在方法区中加载,不依赖于对象存在)
局部变量:存储在栈内存中,当方法被调用,或者语句被执行的时候才存在。
当方法运行完毕,或者语句运行完毕时,局部会被自动释放,所以成员变量也称为实例变量。
3. 初始化情况
成员变量:在堆内存中有默认初始值。
局部变量:必须手动初始化后,才能被使用。
封装:
封装的概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
封装的好处: 隐藏类的实现细节;方便给加入控制语句;方便实现修改;只能通过规定方法访问数据。
封装的实现:
1. 使用private修饰符使属性私有化
2. 给属性提供公有的getter/setter方法
public class Home {
private String address; //家庭地址
private double deposit; //家庭存款
public String getAddress() {
return address;
}
public void setAddress(String add) {
address = add;
}
public double getDeposit() {
return deposit;
}
public void setDeposit(double de) {
deposit = de;
}
}
Private修饰符
是一个访问权限修饰符;用于修饰类中成员(属性和方法);被私有化的成员只能在本类中有效访问;当成员私有化后,提高了安全性。但是访问权限降低了。这时可以通过对外提供公有的getter/setter方法间接对其进行访问。好处是:可以在方法中队成员变量的访问进行控制。
构造方法:
构造方法可以在创建对象时给属性赋值。分为无参构造方法和有参构造方法。通过无参构造方法创建出来的对象都是一样的,于是可以通过有参构造方法来对对象灵活地赋予初始值。
public class Person
{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
}
public static void main(String[] args){
Person p1=new Person("张三",22);
}
构造方法和普通方法的区别:
功能上:构造方法是给对象初始化的;普通方法是为对象满足的某种功能而存在的。
执行上:构造方法是在创建对象时自动调用;普通方法在调用的时候执行。
语法上:构造方法不需要返回类型,包括void,方法名跟类名一致。普通方法必须具备返回值。
This关键字:
This关键字只能用于方法体内。而且只能在非静态的方法中使用。当一个对象创建后,虚拟机JVM就会给这个对象分配一个引用自身的指针。就是this。This只和特定的对象关联,而不和类关联,同一个类中的不同对象有不同的this。简单来说:哪个对象调用this所在的方法,this就代表哪个对象。
public Person(String name,int age) { //有参构造方法
this.name= name;
this.age= age;
}
方法参数或者方法中的局部变量与成员变量(属性)同名的情况下,成员变量(属性)会被屏蔽,此时要访问成员变量(属性)则需要使用“this”关键字。
每个子类构造方法的第一条语句,都是隐含地调用super(),Java要保证先初始化父类。
this()和super()不能同时出现在一个构造方法里面,因为this必然会调用其它的构造方法,其它的构造方法必然也会有super语句的存在,相当于调用了两次父类的构造方法,这是不允许的。
this()必须放在第一行,否则就会隐含地调用super()。
匿名对象:
匿名对象是对象的简化形式,没有名字。由于没有名字,所以一般应用于那种只需要调用一次方法的场景。
Static关键字
static是静态修饰符。用于成员变量和成员方法;可以通过类名直接调用。随着类的加载而加载。生命周期最长,优先于对象存在。静态属性被类的所有对象共享。
静态的利弊:
利处:随意对象的共享数据提供单独空间的存储,节省空间,没有必要每一个对象都存储一份。可以被类名直接调用,比较方便。
弊处:生命周期过长,访问出现局限性。
代码块
代码块就是被{ }包裹的部分,Java中的代码块分为:
1.普通代码块,又称为局部代码块,存在于方法体中
2.构造代码块,又称为初始化代码块,在使用new关键字创建对象时执行,且先于构造方法执行
3.静态代码块,被static直接修饰的代码块,在类被加载时就执行,只执行一次,且先于main方法执行
相关文章推荐
- 黑马程序员——Java基础之面向对象(3)——第九篇
- 黑马程序员---Java基础--08天(面向对象之三多态)
- 黑马程序员_Java基础_面向对象(概述、类与对象关系、成员变量、封装private、构造函数和构造代码块、this关键字)
- 黑马程序员:java基础学习——面向对象
- 黑马程序员_Java基础_面向对象(内部类、异常1)
- 黑马程序员——Java基础之面向对象(4)——第十篇
- 黑马程序员_Java基础_面向对象(异常2、练习题、导包)
- 黑马程序员____基础____java的面向对象
- 黑马程序员_Java基础_面向对象(Static的使用、对象初始化和调用成员过程、单例设计模式)
- 黑马程序员-----笔记整理(java基础五-------面向对象--多态)
- 黑马程序员-Java语言基础–面向对象 第9天
- 黑马程序员-Java语言基础–面向对象 第5天
- 黑马程序员_Java基础_面向对象(继承、子父类变量和函数以及构造函数特点、final关键字、抽象类、模版方法模式、接口)
- 黑马程序员——Java基础之面向对象(1)——第七篇
- 黑马程序员---Java基础--07天(面向对象之三)
- 黑马程序员-Java语言基础 –面向对象 第7天
- 黑马程序员-Java语言基础–面向对象 第8天
- 黑马程序员-----java基础三(之面向对象)
- 黑马程序员_Java基础_面向对象(多态、Object类相关方法)
- 黑马程序员_java编程基础10面向对象