第六天,精致的猪猪女孩也可以敲代码
1:Java中的参数传递问题。(认真看下面内存图)
基本类型:形式参数的改变对实际参数没有影响。
引用类型:形式参数的改变直接影响实际参数。
2、面向对象:概念:
面向过程:是以函数为基础,完成各种操作,强调的是过程。
面向对象:是以对象为基础,完成各种操作,强调的是对象,结果
举例:
孙悟空三打白骨精:
面向过程:
打():
孙悟空、白骨精
面向对象:
孙悟空,打(打白骨精)
面向对象的思想特点:
A:是一种更符合人们思考习惯的思想
B:可以将复杂的事情将淡化
C:将程序员由执行者转换为指挥者
举例:
买电脑:
面向过程:自己做所有的事情(查品牌,地点,价格等)
面向对象:田野(中关村卖电脑)
吃饭:
面向过程:买菜、洗菜、做菜、吃菜、洗盘子....
面向对象:找对象做
旅游:
面向过程:路线、火车篇、宾馆、去火车站
面向对象:旅行社
招聘示例:
面向过程:老板自己做所有事情
面向对象:老板找相关技能人员,分工合作,老板只是执行者
以后做事情:
找对象,让对象做事情(JDK提供了好多)
找不到对象自己做对象,自己可以用,还可以给别人用
来一个实例,体现面向对象和面向过程的区别:
把大象装进冰箱:
面向过程:
A:打开冰箱门
B:装进大象
C:关闭冰箱门
代码体现:
Class 测试类
{
public static void main (String[] args)
{
public static void open();
public static void in();
System.out.println("关闭冰箱门");
}
public static void open()
{
System.out.println("打开冰箱门");
}
public static void in()
{
System.out.println("装进大象");
}
public static void main()
{
System.out.println("关闭冰箱门");
}
}
面向对象:
怎么让我们的操作更符合面向对象的思想?
A:分析该系统有哪些对象
B:明确每个对象可以做什么
C:明确各个对象间的关系?
步骤:
A:有哪些? 名词提取法。---UML(统一建模语言)
大象
冰箱
测试
B:每个对象有什么?
大象: in() 大象是进冰箱的对象
冰箱:
open()
close() 操作都是冰箱
测试:
main()
C:测试:
测试中调用大象和冰箱的功能
代码实现:
class 大象
{
public void in()
{
System.out.println("装进大象");
}
}
class 冰箱
{
public void open()
{
System.out.println("装进大象");
}
public void close()
{
System.out.println("关闭冰箱门");
}
}
class 测试类
{
public static void main(String[] args)
{
冰箱对象.open();
大象对象.in();
冰箱对象.close()
}
}
3、开发的过程其实就是不断地创建对象,使用对象,指挥对象做事情。设计的过程其实就是在管理和维护对象之间的关系。
面向对象的特征:
封装:
继承:
多态:
4、类与对象的关系:
我们学习编程语言,其实就是为了把显示世界的事物通过编程语言体现出来。
先来研究事物:
属性:外在特征
行为:能够做什么。
java语言,最基本的单位是类,类就是用来体现事物的。
类:
成员变量 属性
成员方法 行为
类:类就是属性和行为的集合,类是一个抽象的概念。
对象:对象就是类的具体的存在和体现
举例:
学生这个事物 -----类
张三 -----对象
使用计算机语言就是不断地描述显示世界的东西。
学生事物:
属性:
姓名,年龄,性别......
行为:
学习,吃饭,睡觉
把事物转换成java中的类:
学生类:
成员变量:就是在定义变量,在类一进去就定义变量。
定义在类中方法外的变量是成员变量。
姓名,年龄,性别......
成员方法:就是函数,先把static去掉,其他不变
学习,吃饭,睡觉
代码实现:
class Student
{
String name;
int age;
char sex;
public void study()
{
System.out.println("学生爱学习");
}
public void eat()
{
System.out.println("学生吃饭");
}
public void sleep()
{
System.out.println("学生睡觉");
}
}
5、java中类的内存图
1)以下代码的内存图:
class Car
{
tring brand = "路虎";
int price;
String color;
public void run()
{
System.out.println("牌子为:"+brand+"颜色为 "+color+"的汽车启动了");
}
public void stop()
{
System.out.println("牌子为:"+brand+"颜色为 "+color+"的汽车停止了");
}
}
class CarTest
{
public static void main(String[] args)
{
Car c = new Car();
System.out.println(c.brand+"---"+c.price+"---"+c.color);
c.brand = "奥拓";
c.price = 20000;
c.color = "蓝色";
System.out.println(c.brand+"---"+c.price+"---"+c.color);
c.run();
c.stop();
}
}
2)学生类的内存图
6、成员变量和局部变量的区别?
A:定义位置区别
成员变量 在类中,方法外
局部变量 在方法中,或者方法的形式参数
B:初始化值的问题
成员变量 有默认初始化值
局部变量 没有默认初始化值,先初始化在使用
C:存储位置区别:
成员变量 存在堆中,随着对象的存在而存在,随着对象的消失而消失。
局部变量 存在栈中,随着方法的调用而存在,随着方法调用完毕而消失。
使用过程中,遵循一个原则,就近原则
class Student
{
int age;
public void show()
{
int age;
System.out.println(age);//会报错,可能尚未初始化age,当局部变量和成员变量用相同的变量定义时,会首先使用局部变量,因为局部变量需要初始化,所以报错
//若去掉局部变量 int age,则会输出0,因为程序会首先在局部变量中搜索,当没有时就在成员变量中搜索,成员变量有默认值。
}
}
class StudentTest1
{
public static void main(String[] args)
{
Student s = new Student();
s.show();
}
}