java程序是用来解决日常生活中的重复复杂操作,生活中这件事该怎么干
怎么将现实生活中的事物(对象)用Java来表示,面向对象思想
一、Java面向对象
- 面向对象是软件开发方法。面向对象的概念和应用已经超过了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构,CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物
- 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
- java中最小的单位是类,class表示不是java文件
- java中的面向对象就是使用对象来进行事物的操作
- 对象是由类得到的,所以要先有类才能够有对象
1、类:类是具有相同属性和方法的多个对象的抽象
2、对象是类的一个具体的实例
3、属性:静态描述,直观的不可变的
4、行为:行为是动态部分
二:面向对象的具体操作:类和对象的介绍
- 类是多个相同属性和方法的对象的抽象
- 对象是类的一个具体的实例
- 在java中用类来表示现实事物,用对象来实际操作代码。对象是通过类而得到的
1、类
- 语法:在java文件中, class Student { 类体 }
- 在一个java文件中可以创建多个class类,但是只能有一个使用public修饰,并且使用public修饰的类的名字必须与文件名一致。
1、1属性部分 静态部分
1、1、1全局属性(全局变量)
直接声明在类中的变量,全局变量拥有默认值
代码练习如下
public class Student {
//定义一些属性
String name;
int age;
static String [] course;//数组类型
public static void main(String[] args) {
//实例化对象用new关键字
Student stu01 = new Student();
//使用对象的属性值 使用默认值和初始值
System.out.println("姓名"+stu01.name);//调用stu01对象的name属性 类默认或者初始值
System.out.println("年龄"+stu01.age);
System.out.println("课程"+stu01.course);
//给对象赋予自己的特有值
stu01.name="华晨宇";
stu01.age =30;
stu01.course=new String [] {"声乐","java"};//因为属性是数组类型,所以就需要实例化一个数组类型来赋值
System.out.println("姓名"+stu01.name);
System.out.println("年龄"+stu01.age);
System.out.println("课程"+stu01.course);
//遍历输出
for(String work : course) {
System.out.println(work);
}
//结果 如下
// 姓名null
// 年龄0
// 课程null
// 姓名华晨宇
// 年龄30
// 课程[Ljava.lang.String;@2a139a55
// 声乐
// java
}
}
1、1、2:局部属性 局部变量
声明在方法中的变量,没有默认值,要想使用,必须先赋值再使用;
局部变量只在局部有效(所在大括号),局部变量可以与全局变量同名,局部优先原则,(就近原则)
1、2:方法部分,行为动态部分
1.构造方法 :使用来实例化对象用的,构造器
a.无参数构造方法 实例化对象 但是不赋值
- 语法:public 类名 (){ }
- 每一个类在创建之后都有一个默认的无参数构造方法,如果该类中有有参数的构造方法,那么默认的无参数构造方法就不存在了
- 在类中,尽量将无参数构造方法显示的写出来
b、有参数构造方法 实例化对象并给对属性赋值 - 语法:public 类名 (…) { }
- 有参数构造方法,可以给所有的属性赋值,也可以给部分属性赋值
注意: - 一个参数的构造方法,参数名无所谓,形式参数在构造方法中等同于局部参数
- 在构造方法中,形式参数的值就是用来给对象的属性赋值用的
- 形式参数没有具体的值,声明构造方法的时候()中的参数叫做形式参数,在调用方法的时候的值为实际参数。实际参数会将值赋值给形式参数。
- 在实例化对象的时候,根据实际参数的类型以及个数以及类型顺序来选择对应的构造方法实例化对象
- 形式参数的名字可以是任意的,为了给属性赋值方便一般使用与属性一样的名字
2.普通方法 对象的行为
- 语法:[访问限定符] [修饰符] 返回值类型 方法名字([参数]){ 方法体 }
注意:[ ]标记的可有可无 - 访问限定符:public,protected,无(default),private
- 修饰符:static,final
- 参数:形式参数, [ 数据类型 …名字——————多个 参数 ]
- 作用:就是对象要实际做的操作(过程代码),方法可以作为参数,进行使用
- 方法的分类:
返回值:使用该方法之后,会得到一个返回结果(一个具体的数据),使用关键字return
参数的作用:该参数为形式参数,需要在方法被调用的时候传入实际参数。
目前全部采用public关键字修饰,
1、没有参数没有返回值
//普通方法
public void run() {
//具体的代码执行
System.out.println("汽车可以跑 ");
}
public void play() {
//具体的代码执行
System.out.println("打游戏 ");
}
2、有参数没有返回值
- 方法的参数可以是任意类型的,
方法的参数是基本类型的
方法的参数是数组类型的
方法的参数是对象类型的
c、没有参数有返回值
-
在使用方法之后,会得到一个返回结果,必须使用return关键字返回数据
-
return关键字的使用,在一个方法中可以有多个return关键字,但是该方法的最后一行执行代码必须是return。方法规定的返回值类型是什么,return就必须返回对应的数据类相关
-
语法:public 数据类型 方法的名 () { return 数据}
返回值的基本数据类:8个加String
返回数组类型
返回对象类型
d、有参数有返回值
形参用实际参数赋值,根据参数在方法内部进行操作得到需要的返回值,根据参数,得到对应的 student对象
注意:形式参数与实际参数的赋值关系
2、对象
- 对象是使用new 关键字,通过类得到的
- 使用类类型的变量(引用类型变量)名字接收,new类得到对象
- 语法:Student stu01 = new Student();
- 使用该语句之后:
new的东西都会保存到堆内存中,用来引用实例化的对象的变量都保存到栈内存中
2、1对象的方法的调用
此处采用junit单元测试的方式进行方法的调用
三:代码块
1、普通代码块 ,使用{ }
在实例化对象的时候执行,实例化一回执行一回
//普通代码块
{
System.out.println("car的代码块执行 ");
}
2、静态代码块,就是在代码块前使用static关键字
//静态代码块
static {
System.out.println("car静态代码块执行 ");
}
注意:在类被加载的时候执行,但是只执行一次,在实例化对象的时候执行,第一次实例化的时候执行。同一次操作,在程序启动时进行数据的初始化操作。
**
四、面向对象的方法的详细介绍
**
4.1方法的参数传递
A:参数是基本数据类型
值传递,传递的是一个具体的数值,对于值传递而言,形式参数的值不会影响实参的值
B:参数是引用类型(数组、对象)类型
传递的是地址值,他们之间是引用关系。参数的类型是引用数据类型,在实参给形式参数赋值时,其实是将实际参数的堆内存中的数据的引用地址赋值给形式参数。形式参数与实际参数所指向的堆内存就为同一个。形式参数修改数据,就会引起堆内存数据的改变,实际参数的值业绩会发生变化。
4、2方法的使用
1、在同一个类中,方法调方法,静态方法只能调用静态方法,非静态方法可以调用静态和非静态方法
2、递归:方法自己调用自己
注意:
- 避免无限的调用,发生栈内存溢出错误,一定要有限定条件
- 方法的递归是基于数据结构的栈思想
- 典例
3、方法当作参数使用,
主要指的是有返回值的方法,将方法的