- 两种编程思维方式(步骤与零部件的关系)
用步骤将各零件制作或组装起来。
用步骤完成事物。
用零件组装事物。
面向过程。线性思考,按步骤进行,易于完成简单事物,是微观(具体)操作的组成部分。
面向对象。将整体(复杂事物)拆分成具体的零部件,逐个击破,以便提高效率。
共同点:
面向过程和面向对象都是解决实际问题的一种思维方式。二者相辅相成,并不是对立的。
解决复杂问题,通过面向对象的方式便于我们从宏观上把握事物之间复杂的关系,方便我们分析整个系统;具体到微观操作,仍然使用面向过程的方式来解决。
例:如何开车
面向过程(HOW):1.踩离合2.挂挡3.踩油门,放离合4.开了
面向过程(WHAT):驾驶员,汽车,驾驶员开汽车(处理对象之间的关系)
一个是需要干什么来完成,一个是需要什么来实现。
一个是按具体步骤为基础,一个是按对象(个体事物)为基础。
如果不能确定步骤间的关系可以使用面向对象的方法。例如造车是先造发动机还是先造车轮,用面向对象就是组装流水线的问题,零部件先造哪个无所谓,造不出来的可以外包出去。
总之,很复杂的事物不能用面向过程解决,因为变量(需要确定的关系)实在是太多了。
可以翻翻近代史了解一下中国又一次的统一历程。
- 类与对象(归类与个体)
对象:是具体的事物
类:是对具体事物的抽象
是对对象的抽象(抽象 抽出象的部分)
现实生活中先有对象再有类,类是人类所发明的概念,人们可以通过比较归类来了解其他未知的事物。比如人们可以通过带翅膀,女孩,与善良等特征来判断他们所想的事物是否属于天使类。总之,类具有对象模具的作用,可以生成对象。
在Java中规定在class中用new关键字来实例化对象。所以我们暂时认为在Java中先有类再有对象。
对象和类的关系:特殊到一般,具体到抽象。类,我们叫做class,对象,我们叫做Object,instancee(实例)。以后,我们说某个类的对象,某个类的实例都是一个意思。类可以看成一类对象的模板,对象可以看成该类的一个具体实例。类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一类对象所用具有的静态和动态属性。对象是Java程序的核心,在Java程序中“万事万物皆对象”。JDK提供了很多类供编程人员使用,编程人员也可以定义自己的类。
- 对象的特征——属性与方法
属性:对象(可以)拥有的各种特征
每个对象的每个属性都拥有特定值。例如张浩和李明的年龄不一样。
方法:对象(可以)执行的各种操作
对象:用来描述客观事物的一个实体,由一组属性和方法构成。
例:购物
背景:购物过程中有顾客和收银员两种角色。
顾客 收银员
姓名——张浩 员工号——10001
年龄——20 姓名——李明
体重——60kg 部门——财务部
操作: 操作:
购买品 收款
打印账单
上半部分如“姓名——张浩”“年龄——20”“体重——60kg”或者“员工号--xxxxx”“姓名--xx”“部门--xxx”等这些标签特征与内容统称为属性,其中标签特征对应的内容则为它们的(属性)值。下半部分的操作行为叫做方法,即对象能做出的各种行为。
- 类的属性与方法
类:具有相同属性和方法的一组对象的集合。不同于int类型:具有方法
类是模子,确定对象将会拥有的特征(属性)和行为(方法)
类的属性
field(字段),或者叫成员变量
属性作用于定义该类或该类对象宝had数据或者说静态属性。
属性作用范围是整个类体
在定义成员变量时可以对其初始化(赋值),如果不对其初始化,Java使用默认的值对其初始化。(数值:0.00 char:\u0000,boolen:false,所有引用类型:null)
属性定义格式:
[修饰符] 属性类型 属性名 = [默认值]
修饰符:可以是public,protected,private,static,final。讲到隐藏和封装时再说。
属性类型:可以是任何类型,基本类型和引用类型
属性名:含法标识符即可。首字母小写,驼峰原则。
类的方法
面向对象中,整个程序的基本单位是类,方法是从属于对象的
方法定义格式:
[修饰符] 方法返回值类型 方法名(形参列表){
//n条语句
}
JAVA中方法参数传递是:值传递!
- Java是面向对象的语言
所有Java程序都以类class为组织单元
关键字class定义自定义的数据类型
public class HelloWorld {
public static void main(String[] args){
System.out.println(“Hello World!!!”);
}
}
- Java类模板
类将现实世界中的概念模拟到计算机程序中
Public class 类名 {
//定义属性部分
属性1的类型 属性1;
属性2的类型 属性2;
…
属性n的类型 属性n;
//定义方法的部分
方法1;
方法2;
…
方法m;
}
定义一个类的步骤:
- 定义类名
- 编写类的属性(成员变量)
- 编写类的方法
class Person
{
String name;//姓名
int age;//年龄
String sex;//性别
//自我介绍的方法
public void introduce(){
System.out.println(“name=”+name+”\tage=”+age+”\tsex=”+sex);
}
}
创建对象
类名 对象名 = new 类名();
Person person = new Person();
引用对象成员:使用“.”进行以下操作
引用类的属性:对象名.属性
引用类的方法:对象名.方法名()
person.name = “王一一”;//给name属性赋值
person.introduce(); //调用introduce()方法
创建“王一一”这个对象
public class IntialPerson
{
public static void main(String[]args)
{
Persion persion=new Persion();//创建对象
System.out.println(“***初始化变量前***”);
persion.introduce();//调用自我介绍的方法
persion.name=”王一一”;//给属性复制
person.age=20;
person.gender=”男”;
System.out.println(“\n***初始变量后***”);
person.introduce();//调用自我介绍的方法
}
}
- 局部变量与成员变量
区别
声明位置不同 方法中 类中方法外
作用范围不同 当前方法 当前类的方法
不同的方法中即使有同名的局部变量,没有关系,互不影响,建议相同
内存存放的位置 堆内存中 栈内存中
局部变量没有默认值,局部变量有默认值
- 引用类型
Java语言中除基本类型之外的变量类型都称之为引用类型
Java中的对象和数组是通过引用对其操作的
引用可以理解为一种受限的指针
指针是可以进行不整数做加减运算的,两个指针之间也可以进行大小比较运算和相减运算。引用不行,另能进行赋值运算。
引用就是一个变量或对对象的别名(引用的本质是一个对象);指针是一个段内存空间的地址(指向存储一个变量值的空间或一个对象的空间)
- 内存分析
栈:
存放:局部变量
先进后出,自下而上存储
方法执行完毕,自动释放空间
堆:
存放new出来的对象
需要垃圾回收器来回收:System.gc()
方法区:
存放:类的信息(代码)、static变量、字符串常量等
- 构造方法(构造器)
构造器的定义: constructor构造方法
一个在创建对象时被自动调用的特殊方法。
构造器的作用:
为对象进行初始化(成员变量)工作。
构造器是一种特殊的方法:
构造器的方法名必须与类名一致!
构造器不能定义返回类型(返回值的类型肯定是本类),不能在构造器里调用return。
通过new关键字调用!!
若我们没有定义构造器,系统会自动定义一个无参的构造方法,如果定义则编译器不会添加无参构造方法!
构造方法可以重载
十一.方法重载:
在一个类中定义一个或多个同名的方法
方法名相同,参数列表不同,与返回值、访问修饰符无关
参数列表不同体现在以下三个特征之一:
参数个数
参数类型
参数顺序
十二.方法调用
形参和实参
定义方法的参数是形式参数
调用方法的参数是实在参数
调用方法时要求参数个数相同,类型兼容,顺序一致
参数传递
基本数据类型的参数传递:
无法通过方法调用改变变量的值
引用数据类型的参数传递:
可以通过方法调用改变变量的值