【1】java面向对象

一、类和对象

1、什么是对象

万物皆对象

2、什么是面向对象

人关注对象 (计算机而言):人关注事物信息 

3、类和对象

1)类:类就是模型,确定对象将会拥有的特征(属性)和行为(方法)
2)对象:对象是类的实例表现;
3)关系:类是对象的类型;对象是特定类型的数据 

4、属性和方法

1)属性:对象具有的各种静态特征 -“对象有什么”
2)方法:对象具有的各种动态行为 -“对象能做什么” "类"—实例化—>"对象"

二、创建类

1、包名的推荐命名规范 

1)英文字母小写
2)域名的倒序:com.imooc.animal(最后是功能模块名称)

2、创建类举例

//宠物猫类
public class Cat {
    
    //成员属性(属性指有什么)、昵称、年龄、体重;
    String name;//昵称,String类型的为:null
    int month;//年龄,int 类型的为: 0
    double weight;//体重,double 类型的为:0.0
    String species;//品种
    
    //方法(方法指能做什么):跑步、吃东西

    //跑步的方法
    public void run(){ //无参构造方法
    System.out.println("我会跑步");
    }

    public void run(String name){//带参构造方法
        System.out.println(name+"快跑");
    }
    
    //吃东西的方法
    public void eat()
    { System.out.println("我会吃鱼");}
}
View Code

三、实例化对象

新建一个类
public class CatTest {
    public static void main(String[] args) {
    //对象实例化
        Cat one=new Cat();
        //调用跑动吃东西的方法
        one.eat();
        one.run();//对象.方法,调用方法
        one.name="花花";//对象.属性,给属性赋值
        one.month=2;
        one.weight=1000;
        one.species="英短";
        System.out.println("昵称:"+one.name);
        System.out.println("年龄:"+one.month);
        System.out.println("体重:"+one.weight);
        System.out.println("品种:"+one.species);
        one.run(one.name);//花花快跑

    }
}
View Code

四、单一职责原则

1)单一职责原则,又叫单一功能原则,它是面向对象设计重要原则。意思是一个类最好只有一个功能。
2)如果在一个类当中,承担的功能越多,它的交融和耦合性就会越高,它的复用性越低,同时由于耦合性比较高,当类当中其中一个职责发生变化时,就有可能会发生同类中其他职责的变化,进而影响整个程序的运行。
3)在程序设计中,尽量把不同的职责,放在不同的类中。(也就是说把不同的可能引发变化的原因封装到不同的类里面,这样当一方发生变化时,对其他参与者的影响会少很多,并提升复用性)

五、new关键字

Cat one=new Cat();
1、实例化对象的过程可以分为两部分:
 
1)声明对象 Cat one ;
只是在内存的"栈"空间里开辟了一块区域,名字叫one,此时里面为空(null)
2)实例化对象 new Cat();
是在内存的"堆"空间里开辟了一块空间,完成对象的初始化操作
 
2、在栈当中存储的实际上是堆当中地址的引用,new 关键字的作用:开辟新的对象空间
 
1) 
Cat one=new Cat();
Cat two=new Cat();
修改two中的信息,不会对one造成影响
 
 
2)Cat two = one
指向同一块内存区域,修改two会覆盖one的信息
 
 

练习

 
public class Person {
    //属性:name、age、grade
    String name;
    int age;
    String grade;

    //创建无参无返回值的student方法,描述为:我是一名学生!
    public void student(){
        System.out.println("我是一名学生!");
    }
    //创建带参(性别sex)的sex方法,描述为:我是一个**孩!
    public void sex(String sex){
        System.out.println("我是一个"+sex+"孩!");
    }
    //创建无参无返回值的mySelf方法,分别介绍姓名(name),年龄(age),年级(grade)
    public void mySelf(){
        System.out.println("我叫"+name+",今年"+age+"岁了,读小学"+grade+"年级");
    }
}
View Code

 

public class PersonTest {
    public static void main(String[] args) {

        //使用new关键字实例化对象
        Person one =new Person();

        //传入name、age、grade的参数值
        one.name="李明";
        one.age=10;
        one.grade="五";

        //分别调用student、sex、mySelf方法
        one.student();
        one.sex("男");
        one.mySelf();
    }
}
View Code

六、构造方法(构造函数,构造器)

它是new 关键字的好搭档 构造方法(不能单独调用)只能配合new关键字调用
1、构造方法"与类同名"且"没有返回值";
public Cat(){}//无参构造方法
2、构造方法的语法格式 public(访问修饰符)(没有返回值类型)构造方法名(与类名相同)((可以指定参数)){ //初始化代码 }
3、只能在对象实例化的时候调用
4、当没有指定构造方法时,系统会自动添加无参的构造方法
5、当有指定构造方法、无论是有参、无参的构造方法,都不会自动添加无参的构造方法
6、一个类中可以有多个构造方法

七、就近原则&this关键字

1、变量被调用时会优先去找同一个范围内定义的变量,只有当找不到时才会扩大寻找范围,到其所在的类当中去找
2、处理方法:修改成不同的变量名,构造方法的参数名与类的成员数据名不相同。避免歧义;用this
3、this关键字
1)this关键字表示的是当前对象(什么是当前对象?谁调用了它谁就是当前对象)
2)this既可以调用属性又可以调用方法
 
举例:

public Cat(String name,int month,double weight,String species){//有参构造方法
this.name=name;
this.month=month;
this.weight=weight;
this.species=species;

}
4、注意
1)相同类里面的普通方法之间是可以相互调用的,不用加this
2)构造方法不能被普通成员方法调用。
3)构造方法只能在同类带参构造方法通过this()调用
4)构造方法调用时,只能放在方法体内第一行

 练习

 

public class Monkey {

    //属性:姓名(name)、特征(feature)
    String name,feature;

    //无参的构造方法(默认初始化name和feature的属性值,属性值参考效果图)
    public  Monkey(){
        System.out.println("我是使用无参构造产生的猴子:");
        name="长尾猴";
        feature="尾巴长";


    }


    //带参的构造方法(接收外部传入的参数,分别向 name 和 feature 赋值)
    public  Monkey(String name,String feature){
        System.out.println("我是使用带参构造产生的猴子:");
        this.name=name;
        this.feature=feature;
    }
}
View Code
public class MonkeyTest {
    public static void main(String[] args) {
        //调用无参构造方法实例对象
        Monkey one=new Monkey();

        //调用无参构造方法实例对象
        System.out.println("名称:"+one.name);
        System.out.println("特征:"+one.feature);
        System.out.println("=========================");

        //调用带参构造方法实例对象
        Monkey two=new Monkey("白头叶猴","头上有白毛,喜欢吃树叶");

        //打印输出对象属性
        System.out.println("名称:"+two.name);
        System.out.println("特征:"+two.feature);


    }
}
View Code

 

 八、总结

1、构造方法的类中不可以直接调用成员方法,而普通方法可以在同一个类中相互调用。
2、在带参构造方法中可以直接用this();直接调用同一个类中的无参构造方法。
3、this相当于对象实例化中的方法名
4、Java中的this关键字的应用,可以在构造方法中通过this()的方式调用同类的其他构造方法,但必须放在第一句;
因此“不能在构造方法中调用同一个类的其他构造方法”和“在构造方法在中如果使用this调用其他构造方法,语句可以放在任意位置”的说法是错误的。
5、构造方法没有返回值。
6、this 当前对象的默认引用;调用同一个类的方法,也可以不加this。
7、this();只能放在方法中的第一条,且用于调用同一个类中的无参构造方法。

 

posted @ 2020-04-13 17:06  柠檬不萌!  阅读(254)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end