面向对象
·java是面向对象的语言,在java中,一切皆对象。也就是客观存在的事物皆为对象
·两个最重要的概念:类和对象
·类:共性事物的抽象,是对某一类具有共性事物的描述,是概念上的定义。
·对象:对象是共性事物的一个个体体现,是这类事物的一个个体,或者说是类的一个实例。
·总结:
·类是对象的模板,对象是类的实例
·类是模子。确定对象将会拥有的特征(属性)和行为(方法)
·类的特点:
·类的对象的类型
·具有相同属性和方法的一组对象的集合
每个人是一个对象
·属性:肤色、身高、姓名、年龄
·行为:吃饭、走路、跑步、买东西
什么是对象?
对象:对象是一系列数据和相关行为的集合,对象是一类事物中的一个实例
·数据:是对象的状态
·方法:是对象的行为
什么是对象的属性
属性---对象具有的各种特征
每个对象的每个属性都拥有特定值
我们在买电脑的时候有cpu、显卡等。这个电脑有什么我们可以理解为对象的属性,每个对象会有一个特定值,比如,mac电脑,cpu是inter5,显卡是集显等
什么是对象的方法
方法--对象要做什么,对象具有的行为--要执行的操作
我们把"能干什么"成为方法。即它可以实现的功能
如手机可以打电话、听音乐,这些功能就是对象的方法
面向对象的三大特征:
·封装
·继承
·多态
下面将会从具体代码实现来深入了解类和对象
1、类的创建和初始化
类的格式:
class{
修饰符 属性数据类型 属性名;
...
修饰符 返回值类型 方法名 (参数类型 参数名称...) {
方法体;
}
}
我们可以通过形如:class A{}来创建一个类,java是面向对象的,就拿人类来说,每个人都具有自己的属性和方法,肤色,身高,姓名、年龄等是人的属性,吃、跑、玩等是人的行为,也就是属性描述了类的特点,方法描述了类的功能,体现在java中例如下面的代码:
package com.lemon.java6.day5.section1;
/**
* 这是一个person类,具有姓名、年龄、身高、性别等属性 具有吃、喝、玩、跑等行为
*
* @author zhangying
*
*/
public class Person {
/**
* name属性:人的姓名
*/
private String name;
/**
* age属性:人的年龄
*/
private int age;
/**
* height属性:人的身高
*/
private Double height;
/**
* sex属性:人的性别
*/
private String sex;
/**
* 方法eat
*/
public void eat() {
System.out.println("人具有吃饭的能力");
}
/**
* 方法drink
*/
public void drink() {
System.out.println("人具有喝水的能力");
}
/**
* 方法play
*/
public void play() {
System.out.println("人");
}
/**
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}z
在面向对象的思想中,一切皆对象,我们以对象为单位进行编程,将这个对象的属性和方法放在一起进行包装,就是封装,一般情况下,我们通过类的构造器(构造函数)来创建对象。
构造器是一个函数,这个函数和普通的函数不同,它的函数名一定和类名相同,并且没有返回值,每个类都有缺省构造函数,我们可以通过参数来匹配相应定义的构造函数,来我们可以对它传递一些参数,进行一些初始化工作。
public class Person {
/**
* name属性:人的姓名
*/
private String name;
/**
* age属性:人的年龄
*/
private int age;
/**构造函数
* @param name
* @param age
*/
public Person (String name,int age) {
this.name = name;
this.age = age;
}
}
类的初始化也即是对象的创建有两种方法:
1.直接创建 :
格式:类名称 对象名称 = new 类名称();
2.分步进行:
格式:类名称 对象名称 = null;
对象名称 = new 类名称();
具体创建代码如下:
/** 初始化person类,new Person对象
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.直接创建
Person person1 = new Person("zhang",12);
//2.分步
Person person2 = null;
person2 = new Person("wang", 21);
}
在java中,我们使用new操作符来开辟内存空间,person是对象名
也是一种引用,在栈上分配,指向由new在堆上分配的内容。
过程:当调用new Person()时,编译器首先会检查原类Person中是否有Person()构造方法,如果自己定义了新的构造方法,那么原类中就无默认的缺省构造函数,但是如果我们没有显示声明构造函数,编译器在调用的new Person()的时候,会自动为我们的Person类添加一个默认的缺省构造函数:Person(){},来执行类的构造过程,说到构造函数。
总结对象的创建过程:
package com.lemon.java6.day5.section1;
public class Man {
public Man(int id ) {
// TODO Auto-generated constructor stub
System.out.println("Man("+id+")");
}
}
/**
* 这是一个描述人的类
* 属性:姓名、年龄、手机号
* 方法:吃、玩
* @author zhangying
*
*/
public class Pepole1{
private String name;
private int age;
private String moblieNumber;
Man m1 = new Man(1);
public Pepole1() {
System.out.println("this is bulid Person's block");
Man m2 = new Man(2);
}
Man m3 = new Man(3);
public static void main(String[] args) {
Pepole1 person = new Pepole1();
}
}
1、先装载.class文件,创建Class对象,对静态数据(由static)进行初始化。
2、new Person()在堆上进行空间分配。
3、执行非静态块。
4、执行所有方法外定义的变量的初始化
5、执行构造函数
总体来说执行顺序为:静态块,静态属性--》非静态块,属性--》构造器
对于静态块和静态属性或者非静态块和属性取决于它们在代码中的顺序。
属性:
类中的属性一般可分为类属性(全局变量)、实例属性(全局变量)、局部属性(局部变量)
类属性:声明为static的属性,在整个过程中只进行一次初始化、只开辟一个空间,不论在哪儿调用,值保持一致。一旦被修改,所有引用它的地方也会跟着修改,一般是通过类名.属性名直接调用。
实例属性:实例变量可以不进行初始化,如果未进行初始化,系统会自动进行初始化,则会有默认值,实例变量在堆和栈中均分配内存空间,在堆中分配的是对象本身,在栈中分配的是对该对象的引用。
局部属性:局部属性是在方法内部声明的变量,声明期仅仅在方法内,方法结束后变量就消失了;局部变量在使用前必须进行初始化,否则,会报错。
方法:
方法就是类的属性,方法由方法头和方法体构成,方法头包括:访问控制符、返回值类型、方法名、参数列表组成。
2、属性和方法的调用
属性:
1.对于static修饰的属性
这种属性是静态属性,为类所有,被所有的对象所共有,即对于静态变量,该类所有的对象所用的都是同一资源,该资源被所有对象所共享。
调用格式:类名.属性名
2.对于类的实例变量
未被static修饰、在类内并且所有方法之外定义的变量称为实例变量
对于实例变量是在对象创建的时候创建的,所以为对象所有
调用格式:对象名.属性名
方法:
方法同静态变量一样,分为静态方法和实例方法
1.静态方法(static修饰)
格式:类名.方法名()
2.实例方法(非静态方法)
格式:对象名称.方法名称()
注意:java是纯面向对象,除了面向对象还有面向过程,例如c语言就是面向过程。
一切皆对象
在java中万物皆对象,类是java编程中的最小单位,是引用类型
除了引用类型,java中还有基本数据类型,这时存在一个矛盾:基本数据类型不是类
为了解决矛盾,java给我们提供了八大基本数据类型的包装类:
类型 | 基本数据类型 | 包装类 |
整型 | byte | Byte |
short | Short | |
int | Inteager | |
long | Long | |
浮点型 | float | Float |
double | Double | |
字符型 | char | Character |
布尔型 | boolean | Boolean |
对于基本数据类型和相对应得包装类之间的转换称为拆箱和装箱,下面用代码来说明
Integer aInteger = new Integer(20);//将基本类型装箱
int aint = aInteger.intValue();//将引用类型拆箱成基本类型
int aint1 = Integer.parseInt("111");//将字符串格式化成int基本数据类型
int bint = aInteger;//可以直接将对象赋值给基本数据类型--》自动拆箱--》jdk1.5以上版本开始有
aInteger = 16;//自动封箱--》jdk版本》=1.5
//完成两个字符串里面的额数值做算术加法运算
String string1 = "111";
String string2 = "222";
//+对于字符串只是简单的拼接
int cint = Integer.parseInt(string1);//字符串转化为int
int dint = Integer.parseInt(string2);
int sum = cint+dint;
Long long1 = new Long("232");//字符串初始化long引用类型
long long2 = long1.longValue();//拆箱
long long3 = Long.parseLong("xfcg");//将字符串格式化long基本类型
String string11 = null;
string11 = String.valueOf(dint);//将其他类型转为字符串:String.valueOf
string11 = Integer.toString(cint);//toString()也可转化为String类型
float f1 = new Float(22.3);
float f2 = new Float("11.1");
float f3 = Float.parseFloat(string11);
3.类的调用
·为什么要使用面向对象:
面向对象的程序设计方法是按照现实世界的特点,把复杂的事物抽象为类,通过类创建对象,具有自己的状态和行为,通过对消息的反应来完成任务。
·为什么要定义类(思考):
·java是面向对象程序设计语言,java程序是以类为基础进行构建的。
·类是共性事物的反映,对象是一类事物中的个体,具体的实例。
·定义一个类相当于定义一个模板,也即是定义了一套解决问题的方法(函数),变量都是为函数服务的。
·为什么要调用类(思考)
·因为类定义了就是要拿来使用的,调用类中的api来解决问题。
·类的调用分为三种:
1、jre系统类库中间的类(jar包)--》也称作基本类--》java程序编译后的字节码文件的打包。 java设计人员提供给开发者使用的核心(基础)类库:工具类。
注意:
·java.lang这个包非常常用,所以我们不需要导入,可以直接使用
·jre的其他包,需要使用import导入才可以使用。
2、同一个项目下的类
·同一包下:对于同一个包下的类,可以直接使用,不需要import导入。
·对于在同一个项目,若想使用其他包下的类,必须要import导入。注意:我们可以使用快捷键:shift+command+o可以快速导入jar包
3、不同项目下的类
·首先对需要的类打包:选中类-》右击-》export-》jar file-》选择保存路径、填写保存文件名-》确定
·对使用的类导入进来jar包:选择项目或类-》Bulid Path-》Configure Bulid Path->Libraries-》add External jar-》apply and close
·按住 ctrl+shift+o导入包就行了。