面向对象上篇*
## 1.类与对象
1.1看一个养猫猫问题
1.2 java语言是面向对象的
计算机语言的发展向接近人的思维方式演变(能编写功能更多软件):
汇编语言 [面向机器] 有助记符 load return …
c语言 [面向过程] 函数=> 完成功能
java语言 [面向对象] 类与对象 => 编写更加复杂,大型软件
汇编语言(汇编 不会编,不会编汇编)=> 驱动程序
1.3类与对象的关系示意图
1.4 快速入门-面向对象的方式解决养猫问题
import java.util.Scanner;
public class OOPTest
{
public static void main(String[] args) {
// int num1 = 20;
Cat cat1 = new Cat();
cat1.name = "小白";
cat1.age = 3;
cat1.color = "白色";
System.out.println("猫的信息:" + cat1.name + " " + cat1.age + " " + cat1.color);
}
}
//定义一个猫类(数据类型)
class Cat //Cat.class
{
//属性
String name; // null
int age;//0
String color;//null
//行为 =》 方法
}
class Car
{
//属性,成员变量,字段
String name;
double price;
String color;
}
1.5类和对象的区别和联系
通过上面的案例和讲解我们可以看出:
1)类是抽象的,概念的,代表一类事物,比如人类,猫类…, 即它是数据类型.
2)对象是具体的,实际的,代表一个具体事物, 即 是实例.
3)类是对象的模板,对象是类的一个个体,对应一个实例
1.6对象在内存中存在的形式
1.7属性/成员变量
基本介绍
1)从概念或叫法上看: 成员变量 = 属性 = field (即 成员变量是用来表示属性的,授课中,统一叫 属性)
案例演示:Car(name,price,color)
2)属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)。比如我们前面定义猫类 的 int age 就是属性
属性的注意事项和细节
import java.util.Scanner;
public class ProDetail
{
public static void main(String[] args) {
int num = 100;
/*
属性如果不赋值,有默认值,规则和数组一致。
案例演示:[Cat, Dog] //int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,
boolean false,String null , 即只有是引用类型,统统为null
*/
Cat myCat = new Cat();
System.out.println("默认值 " + myCat.name + " " + myCat.age + " " + myCat.color);
Cat myCat2 = new Cat();
myCat2.name = "小白";
System.out.println("mycat " + myCat.name + " " + myCat.age + " " + myCat.color);
System.out.println("mycat2 " + myCat2.name + " " + myCat2.age + " " + myCat2.color);
}
}
//定义一个猫类(数据类型)
class Cat
{
//属性
String name;
int age;
String color;
//行为 =》 方法
}
1.8类和对象的内存分配机制(重要)
1.9Java内存的结构分析
1)栈: 一般存放基本数据类型(局部变量)
2)堆: 存放对象(Cat cat , 数组等)
3)方法区:常量池(常量,比如字符串), 类加载信息
4)示意图 [Cat (name, age, price)]
1.10java创建对象的流程简单分析
1)先加载Person 类 , 只会加载一次
2)在堆中,分配空间[地址],并进行默认初始化,比如 name=null age = 0
3)把堆中地址,返回给 p1
4)进行指定初始化 name = “jack” age = 10
5)开始使用p1
1.11类和对象的内存分配机制-练习题
2成员方法
2.1基本介绍
在某些情况下,我们要需要定义成员方法。比如人类:除了有一些属性外( 年龄,姓名…),我们人类还有一些行为比如:可以说话、跑步…,通过学习,我们人类还可以做算术题。这时就要用成员方法才能完成。现在要求对Cat类完善。
2.2成员方法快速入门
1)添加speak 成员方法,输出 我是一只好猫
2)添加jisuan 成员方法,可以计算从 1+…+1000的结果
3)添加cal 成员方法,该方法可以接收一个数n,计算从 1+…+n 的结果
4)添加getSum成员方法,可以计算两个数的和
5)代码:
import java.util.Scanner;
//成员方法的使用
public class MethodTest
{
public static void main(String[] args) {
//调用方法
//1. 创建对象
Cat myCat = new Cat();
//2. 调用方法
myCat.speak();
myCat.jisuan();
System.out.println("请输入一个整数");
Scanner myScanner = new Scanner(System.in);
int num = myScanner.nextInt();
myCat.cal(num); // 20 称为 实际参数(实参)
myCat.getSum(30, 100);
}
}
//定义一个猫类(数据类型)
class Cat //Cat.class
{
//属性
String name; // null
int age;//0
String color;//null
//行为 =》 方法
//添加speak 成员方法,输出 我是一只好猫
//解读
//1. public 表示公开方法
//2. void 没有返回值
//3. speak 方法名, () 没有形参
//4 { } 称为方法体
//5. 写入你的代码
public void speak() {
System.out.println("我是一只好猫");
}
//添加jisuan 成员方法,可以计算从 1+..+1000的结果
public void jisuan() {
int sum = 0;
for( int i = 1; i <= 1000; i++) {
sum += i;
}
System.out.println("sum=" + sum);
}
//传递参数
//添加cal 成员方法,该方法可以接收一个数n,计算从 1+..+n 的结果
//传递参数
//术语 :int n 称为 形式参数(形参)
public void cal(int n) {
int sum = 0;
for( int i = 1; i <= n; i++) {
sum += i;
}
System.out.println("sum=" + sum);
}
//添加getSum成员方法,可以计算两个数的和
public void getSum(int n1, int n2) {
int sum = n1 + n2;
System.out.println("和=" + sum);
}
}
2.3方法的调用机制原理:(重要!!!)
提示:画出程序执行过程[cal]+说明
2.4为什么需要成员方法
看一个需求:
请遍历一个数组 , 输出数组的各个元素值。
解决思路1,传统的方法,就是使用单个for循环,将数组输出,大家看看问题是什么?
解决思路2: 定义一个类 MyTools ,然后写一个成员方法,看看效果又如何。
代码如下
import java.util.Scanner;
//成员方法的使用
public class WhyMethod
{
public static void main(String[] args) {
int[] arr1 = {
1, 2, 50, 900, 900, -12};
//创建MyTools对象
MyTools tools = new MyTools();
tools.printArr(arr1);
int[] arr2 = {
1, 2, 50, 900, 900, -12, 10000};
tools.printArr(arr2);
int[] arr3 = {
1