目录
7.1.编程思想
1.面向过程:只考虑事物的发展顺序,不考虑参与在事物中的对象。分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了
现在使用该思想的语言:c,汇编
2.面向对象:先考虑事物中存在那些对象,再考虑事物的发展顺序。是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为
现在使用该思想的语言:c++,java,javascript,python,c#...等等
比如:敲代码
对象:我,电脑
建立关系:我输入代码,电脑录入代码
3.对象 :所以客观存在的事物都是对象,万事万物都是对象
4.类:多个事物抽象其相同点称之为类
5.类与对象的关系:
现实中:先有客观存在的事物,就是对象,才有类
代码中:先有类,才有对象
7.2Java中的类
1.创建一个类:
/**
*
* 语法:
*
* 访问权限修饰符 class 类名{
*
*
* }
*/
public class Cat {//创建一个猫类
}
2.类中都有什么
静态特征:属性
作用:描述对象的静态特征
写法:
public class Cat {//创建一个猫类
public String name;
public int age;//
/**
* 语法:
* 访问权限修饰符 数据类型 属性名
*
*/
}
声名的位置要在类中,方法外。
别名:成员变量
注意:一个类可以有多个属性,也可以没有属性
动态特征(行为):方法
作用:描述对象的行为
public void eat () {
}
/**语法:
* 访问权限修饰符 修饰符 返回值类型 方法名(形参列表){
* 方法体
* }
*
*
*
*/
修饰符还没学到,暂时不用,定义方法时其它情况与原来学的一样
定义位置:类中,方法外
别名:函数,成员方法,成员函数
构造函数:
作用:创建对象
语法:
/**
* 语法:
* 访问权限修饰符 构造函数名(形参列表){
* 方法体
* }
*/
public Cat() {
}
注意:
1.构造函数名与类名一致(大小写要一致)
2.使用new关键字调用,表面上是new 后跟类名,实际上是调用了构造函数,只不过构造函数和类名名字一样
3.一个类中可以有多个构造函数
4.多个函数一定会形成重载关系
Cat aCat=new Cat();//使用new调用,
如果不写构造函数。java会自己生成一个构造函数,所以一般写代码建议自己写一个无参的,再写一个全参的。
无参构造函数:构造函数没有形参列表
全参构造函数:构造函数的形参列表需要传入该类的所有属性值
练习
定义一个猫类, 其中的属性有姓名,性别,年龄,毛色.(访问权限修饰 数据类型 属性名)
其中的方法有叫,吃(吃骨头).(访问权限修饰 返回值类型 方法名(形参列表){方法体})
在定义一个无参构造函数和一个全参构造函数(访问权限修饰符 类名(形参列表){方法体})
public Cat() {
}
public Cat(String name,String sex,int age,String color) {
}
public void eat (String foodName ) {
System.out.println(name+"吃"+foodName);
3.成员变量与局部变量
成员变量:属性
定义位置:类中方法以外
有默认值:基本数据类型默认为0,引用数据类型默认为null
生命周期:随着对象的生成而生成,随着对象销毁而销毁可以使用访问权限修饰符
使用范围:整个类中
局部变量:
定义位置:类中,方法中或形参中
没有默认值
生命周期:随着方法的调用而生成,随着方法执行结束而销毁
使用范围:声名的代码中
不可以使用访问权限修饰符
局部变量与成员变量可以名称相同,默认使用局部变量,如下都默认为局部变量了
4.this关键字
含义:谁调用this所在的方法,this就指向谁
作用:
1.当局部变量与成员变量重名时,可以用于区分
如图,此时就作以区分
2.在方法中调用本类的属性或方法时,this可以忽略不写
如图,两者效果一样。
3.调用本类其它构造函数
必须在构造函数第一行
不能形成递归
this(实参列表)
不在第一行就报错
5.创建对象
语法
Cat tomCat=new Cat();
/**
* 语法:
*
* 类名 对象名=new 类名(形参列表);
*
*
* 专业:数据类型 对象名=new 构造函数名(实参列表);
*
*/
注意:
如果一个类中没有构造函数,系统将会为其提供一个无参构造函数
如果一个类中有构造函数,系统将不会提供
6.使用对象,调用属性或方法
属性:
tomCat.name="Tom";
/**
* 获取
* 对象名.属性名
* 修改
* 对象名.属性名=值;
*
*
*/
方法:
tomCat.eat("牛奶");
/**
* 语法:
*
* 对象名.方法名(实参列表)
*
*
*
*/
总结:
写类;先写属性,在构造,最后方法
环境类:先创建对象,在建立关系,主函数在的那个类
7.对象的创建过程
数据类型 对象名 = new 构造函数名(实参列表);
步骤:
1.使用new关键字在堆内存开辟一片空间,用于存储该对象的属性与方法
2.给对象属性赋值、初始值,基本数据类型赋值为0,引用数据类型赋值为null
3.执行构造函数中的代码
4.将堆内存中的地址(1中开辟的内存地址)赋值给栈的引用(对象名)
练习:
1,老师给我布置作业
2,我养了一只小狗叫旺财,我给他喂食,他给我看门
3,张女士养了一只金毛叫布丁,李女士养了一只泰迪叫小不点
4,老皮(猫)抓住了碎怂(老鼠),布丁在旁边说抓的好,小不点说布丁说的对,碎怂说你俩是不是闲
可以分析得
人类
属性: 姓名 性别
方法: 布置,喂东西,养
狗类
属性:品种,姓名
方法 :说
猫类
属性:姓名
方法:抓
鼠类 属性:姓名
方法:说
public class Hren {
public String nameString;
public String sexString;
public Hren(){
}
public Hren(String namString,String sexString) {
this.nameString=namString;
this.sexString=sexString;
}
public void buZhi(Hren b) {//布置
System.out.println(nameString+"给"+b.nameString+"布置作业");
}
public void yAng(Hdog b) {//养
System.out.println(nameString+"养了一只"+b.name);
}
public void wEi(Hdog b) {//喂了
System.out.println(nameString+"给"+b.name+"喂食");
}
}
public class cat1 {
public String name;
public cat1() {
}
public cat1(String name) {
this.name=name;
}
public void shuo(String info) {
System.out.println("name"+name);
}
}
public class Hlaoshu {
public String Name;
public Hlaoshu() {}
public Hlaoshu(String Name) {
this .Name=Name;
}
public void sad(String a) {
System.out.println(Name+"说:"+a);
}
}
public class homework1 {
public static void main(String[] args) {
Hren ganLei=new Hren("老师","男");
Hren zhangNv=new Hren("张女士","女");
Hren liNv=new Hren("李女士","女");
Hren mE=new Hren("我","男");
Hdog wangCai=new Hdog("旺财","土狗");
Hdog buDing=new Hdog("布丁","金毛");
Hdog xiaoBu=new Hdog("小不点","泰迪");
ganLei.buZhi(mE);
mE.yAng( wangCai);
mE.wEi(wangCai);
wangCai.kAn(mE);
zhangNv.yAng(buDing);
liNv.yAng(xiaoBu);
Hcat laopi=new Hcat("老皮");
Hlaoshu suisong=new Hlaoshu("碎怂");
laopi.zhuA(suisong);
buDing.sad("抓得好");
xiaoBu.sad("布丁说的对");
suisong.sad("你俩是不是闲的");
}
}