暑假第三周学习笔记7.15~7.21

一、对上一周部分内容的补充

1、System.out.printf()的具体用法———— System.out.printf("格式",内容);

       如:System.out.printf("%-7s",(j+1)+"*"+(i+1)+"="+arr[j][i]);

2、关于ArrayList数组的操作(真的好用!这才应该是动态数组)

         定义数组:List<String> List = new ArrayList<String>();//List就是数组名

        添加元素:List.add(要添加的内容);

        判断数组中有无包含某字符串:List.contains(目标字符串);//该返回值为布尔(boolean)类型

        删除元素:List.remove(想删除的内容对应的索引值 / 想删除的内容);

        获取该索引值的元素:List.get(索引值);

        判断该数组是否为空:List.isEmpty();//该返回值为布尔(boolean)类型

        获取该数组的长度:List.size();//注意要和普通数组区分,普通数组是 数组名.length();

        清空数组内容:List.clear;

3.判断数组中有无目标内容

        如果目标内容是一整个字符串:用ArrayList里面的contains方法,返回值为布尔类型

        如果目标内容是字符串的一部分(子串):用String里面的indexOf方法,返回值为索引值(int)

二、主要学习内容————面向对象(个人认为非常重要,需要牢牢掌握)

1、什么是面向对象?

        我们通常把要解决的问题作为一个对象,比如:有一个学生的信息要处理,我们就可也定义一个学生对象,里面有学生的属性:姓名,年龄,性别,班级等。这种面向对象的思想更加符合人类解决问题的思想,编程更简单,更直观。

2、那应该如何编写一个面向对象你呢?

        1.要先创建一个类(比如:public class Student) 这里的类名(Student)要满足大驼峰命名法(单词首字母大写)尽量养成这种习惯。在这个类里面可以定义一些这个对象的变量(name,age等)和方法(study,sleep)。变量一般指这个对象的属性,方法一般指这个对象的行为。

        2.其实当你在创建对象的时候就会涉及到构造方法。比如之前学到的 Scanner in = new Scanner();这个括号里没有任何参数,所以构建Scanner这个类时用的就是无参构造。如果你没在这个类里面写构造方法的话,系统会默认有一个无参构造,但是如果你写了构造方法,那么就不会有这个默认无参构造。所以尽量在每个类中都写上有参构造和无参构造。(如果你是无参构造创建的一个对象,其实里面的成员变量是有默认值的,比如:int类型默认为0,String类型默认为null。)

格式:修饰符   类名(形参列表) {}  如:public Student(String name, int age){} //这个就是有参构造,注意大括号里面是有内容的,毕竟肯定要根据传入的参数来修改构建的对象的属性值。

        3.之前我们一直都在用public,但是在类里面如果用上public来修饰成员变量,这样我们在主函数中就要避免变量名一致,不然会导致对象的属性值被修改。但是这样可能会降低代码的可读性,在别人看我们代码的时候分不清哪个变量是哪个。所以为了避免这种情况,在定义属性值(变量)的时候就要用private这个修饰符。一旦用了这个修饰符,这个类里面的成员变量就只能在这个类的内部才能访问和改变。(如果想在类里面添加一个用于记录构造次数的成员变量,就要用static这个关键字,因为在创建一个以类名定义的变量时,之前的值会恢复默认值,但是有了static就不会变成默认值。)

        4.所以当想要对这些private修饰的变量进行修改是我们就要用到this这个关键字,它可以用于得到这个类中的属性,比如:this.name就是指当前这个类的name这个成员变量。而上面提到的有参构造就是用它来修改这个类里面的值,来起到”构造“的作用。

        5.面向对象的三大特征:封装,继承,多态。

           什么是封装?

                简单点说就是把同一个东西的所有东西都放在一个对象中。

           为什么要用封装?

                        当要处理的对象数量很多的时候,用封装的思想可以很好的帮助我们理清事物之间的关系。比如:人画圆就涉及到两个对象——人和圆,但是画这个动作到底是放在人这个对象里面还是圆这个对象里面呢?这里我有个小技巧(可能不一定完全适用于所有情况),你把一句话拆分成几个词语,这个动作(行为)跟着哪个对象构成了一个词语,就把这个动作(行为)放在哪个对象里面。就比如这个人画圆,肯定是拆成”画圆“这个词语,所以画这个动作应该被封装在圆这个对象中。然后行为又一般对应方法我们就可以在圆这个对象中定义一个”画圆“的方法(毕竟画这个动作都在圆里面了,你不可能去画人或者画直线吧,毕竟你能用的只是圆里面的属性值)。这样我们就把这个人画圆这句话分装成了两个对象。我们就可以编写函数来实现人画圆这个操作,换成现实意义来理解就是人这个对象调用了圆这个对象中的“画圆”这个方法。

        什么是继承?

                比如一个Person类和一个Student类,我们就可以把Student作为Person的子类,也就是Student类继承于Person类。

        为什么要用继承?

                当我们处理的多个对象中有很多一样类型的属性值或者行为时,比如Student和Teacher都有name,age,gender这些属性,我们就可以定义一个Person类作为这两个类的父类,只需要在定义时在后面跟上extends Person就表明其父类为Person。这样就可以简化代码,在Student和Teacher类中都有父类中的那些属性和行为,并且也能根据实际需要各自补充对应的额外属性,比如Student可以再多加一个id表示学号,该属性值不和老师互通,所以不放在Person类当中。(注意:不是仅仅是属性值类型一样就可以用继承,对于一个学生和一棵树可能都有name,age但是我们要考虑代码的可读性,如果要给这两个对象创建一个父类应该取什么类名呢,所以不是所有的只要有相同类型的属性值就要用继承,要合理运用,而不是学了什么新东西就往里套。)

        6.继承

        之前讲到要访问类里面的成员变量,我们用了this这个关键字,但现在用了继承,我们定义的Student类没有直接写出成员变量,而是在它的父类Person类里面,如果我们想更改其中的值,我们就要用到另一个关键字super他的作用就是可以访问其父类的成员变量。(注意:虽然继承可以多层继承,er extends fu;fu extends ye;但是不能用super.super.name来直接访问er的父类的父类。)

        方法的重写:如果父类的方法不能满足子类的需要。我们就可以对该方法进行重写(其实就是以一样的方法名写一个新的方法而已,要求:重写方法的形参列表和方法名要和父类方法一致。),@Override放在子类方法的上面可用于检查语法是否正确。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值