目录
1.1面向对象的概述
1.1.1面向对象程序设计
1.1.2面向对象设计过程
1.1.3面向对象的特点
1.2类和对象
1.2.1类和对象的定义
1.2.2类和对象的举例
1.3类的定义
1.3.1类的定义格式
1.3.2创建对象
1.3.3成员变量的默认值
1.3.4构造方法
1.3.5方法的重载
1.4值传递和引用传递
1.1面向对象的概述
1.1.1面向对象的程序设计
面向对象的程序设计思想 (Object Oriented Programming) 简称:OPP
面向对象就是把现实中的各种属性都抽象成程序设计中的“对象”,一切皆为对象,是一种“自下而上”的设计思想,首先设计各个组件,然后对其进行组装。与之相对应的还有面向过程的程序设计(procedure-Oriented Programming) 简称:POP,面向过程是一种“自上而下”的设计思想,首先定义好一个框架或者思考解决问题的步骤,然后将每一个步骤逐步实现。通俗理解就是先写一个main()函数,然后使用多个子函数来实现其最终的功能。面向过程最大的劣势就是无法解决复杂的系统,相对于面向对象的语言难以维护,也不能复用,想要扩展更多的功能也很困难。与之对应,面向对象容易维护,容易复用,扩展性强。面向对象都以类为组织单位,将抽象出来的对象都用类来表示。
1.1.2面向对象设计过程
1.1.3面向对象的特点
面向对象三大特征:封装,继承,多态。
1.2类和对象
1.2.1类和对象的定义
类:类是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征描述该类事物。
对象:万事万物,皆为对象。
实际存在的该类事物的每个个体,是具体的,因此也是实例。
举个例子:
人类:--->一类群体 概念
张三:--->具体的人 对象
1.2.2类和对象的举例
小猫和小狗都是动物,我们就可以创建一个类把小猫和小狗共同的属性和功能抽象出来。
public class 动物{
动物的属性;(变量)名字 年龄 毛色
动物的功能;(方法)走 跑 叫
}
小猫可以继承动物的属性和功能然后再加上自己特有的属性和功能。
小猫 继承 动物{
小猫特有的属性:
小猫特有的功能; 爬树 抓老鼠
}
1.3.1类的定义格式
public class 类名{
//成员变量
//成员方法
}
成员变量:
成员变量:定义在类中方法外的变量。
成员变量可以使用java语言中任意一种数据类型,包括基本数据类型和引用数据类型(用类作为类型String 数组)。
成员变量可以在定义时对其进行初始化,如果没有进行初始化,java会用默认值对进行初始化。
成员变量可以被类中的方法,构造方法,代码块中使用。
成员方法:
不能加static
举个例子:
public class Car {
String name; //成员变量,未手动初始化则被赋予默认值null
String color;
float price;
/*
成员方法
*/
public void run(int speed){
System.out.println(name+"汽车以"+speed+"的速度启动");
}
public void stop(){
System.out.println("汽车暂停");
}
}
1.3.2创建对象
创建对象:
类名 对象名 =new 类名();
使用对象访问类中的成员
对象名.成员变量;
对象名.成员方法();
举个例子:
public class Textcar {
public static void main(String[] args){
int a=3;
System.out.println(a); //局部变量,需手动进行初始化。在方法或者代码块上声明。
Car car=new Car();
car.name="比亚迪";
car.color="磨砂黑";
car.price=200000.0f;
car.run(120); //speed也属于局部变量
car.stop();
Car carbd=new Car();
System.out.println(carbd.name); //测试name默认初始化的值为null
carbd.name="别克";
carbd.color="银色";
carbd.price=150000.0f;
carbd.run(110);
carbd.stop();
}
上述代码访问的类就是上边创建的那个类Car。
1.3.3成员变量的默认值
数据类型 | 默认值 | |
基本类型 | 整数(byte,short,int,long) | 0 |
浮点数(float,double) | 0.0 | |
字符(char) | "\u00000" | |
布尔(boolean) | false | |
引用数据类型 | 数组,对象,String | null |
1.3.4构造方法
构造方法名名字与类名相同,且没有返回值,且不需要使用void修饰。
作用:用来为新创建的对象中的成员变量进行初始化。
特点:类中没有定义时,会默认有一个无参的构造方法,在无参结构方法中为成员变量赋予初始 值。我们还可以定义有参的构造方法,通过有参的构造方法为成员变量进行初始化。 一旦类中定 义有参的构造方法,那么默认的那个无惨构造方法失效。
举个例子:
package day01A;
public class Car {
String name;
String color;
float price;
//构造方法
public Car(){
System.out.println("无参构造方法");
name=null;
color=null;
price=0.0f;
}
public Car(String n,String c,float p){
System.out.println("有参构造方法1");
name=n;
color=c;
price=p;
}
public Car(String c,float p,String n){
System.out.println("有参构造方法2");
color=c;
name=n;
price=p;
}
}
public class Textcar {
public static void main(String[] args){
Car bccar=new Car("奔驰","磨砂黑",400000f);
Car bmcar=new Car();
Car adcar=new Car("银色",3500000f,"奥迪");
}
}
1.3.5方法的重载
是指一个类中具有相同的名字,但参数不同的多个方法。
通过参数的个数,类型,顺序来进行区分。
我将通过一个判断最大数的代码向你展示:
public class MyMath {
public void max(int x,int y){
int z= (x>y)?x:y;
System.out.println(z);
}
public void max(double x,double y){
double z=(x>y)?x:y;
System.out.println(z);
}
public void max(int x,int y,int z){
int a=(x>y)?x:y;
int b=(a>z)?a:z;
System.out.println(b);
}
public void max(double x,double y,double z){
double a=(x>y)?x:y;
double b=(a>z)?a:z;
System.out.println(b);
}
}
以上类中四个方法均以max来命名,但是它们参数的个数,类型均不相同,这就是参数重载。
参数不同(可以有三方面的不同)
数量不同,类型不同,顺序不同。
package day01A;
public class TextMyMath {
public static void main(String[] args){
MyMath myMath=new MyMath();
myMath.max(2,3);
myMath.max(2.1,3.1);
myMath.max(2,3,4);
myMath.max(2.1,3.1,4.1);
}
}
1.4值传递和引用传递
1.形参和实参
形参也叫形式参数,是一个方法的参数列表中的参数;实参也叫实际参数,是调用者在调用方法时实际传递的参数;
用代码给大家解释解释:
public class Test {
int i;
void change(int i){//形式参数
i++;
}
void change1(Test t){//形式参数
t.i++;
}
public static void main(String[] args) {
Test ta = new Test();
System.out.println(ta.i); //0
ta.change(ta.i);//实际参数
System.out.println(ta.i); //0
ta.change1(ta); //实际参数
System.out.println(ta.i);//1
}
}
2.值传递和引用传递
值传递:(参数类型是基本数据类型):方法调用时,实参把它的值传递给对应的形参,形参只是用实参的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形参值的改变不影响实参的值。
引用传递:(参数类型是引用数据类型参数):也称为传地址。方法调用时,实参是对象(或数组),这时实参与形参指向同一个地址,在方法执行中,对形参的操作实际上就是对实参的操作,这个结果在方法结束后被保留了下来,所以方法执行中形参的改变将会影响实参。