• 【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();只能放在方法中的第一条,且用于调用同一个类中的无参构造方法。

     

  • 相关阅读:
    [Swift]LeetCode930. 和相同的二元子数组 | Binary Subarrays With Sum
    [Swift]LeetCode929. 独特的电子邮件地址 | Unique Email Addresses
    [Swift实际操作]八、实用进阶-(10)使用Swift创建一个二叉树BinaryTreeNode
    [Swift]LeetCode5. 最长回文子串 | Longest Palindromic Substring
    [Swift]LeetCode4. 两个排序数组的中位数 | Median of Two Sorted Arrays
    [Swift]LeetCode3. 无重复字符的最长子串 | Longest Substring Without Repeating Characters
    [Swift]LeetCode913.猫与老鼠 | Cat and Mouse
    [Swift]LeetCode916.单词子集 | Word Subsets
    [Swift]LeetCode915.将分区数组分成不相交的间隔 | Partition Array into Disjoint Intervals
    OpenJDK源码研究笔记(十六):在Java中使用JavaScript脚本语言
  • 原文地址:https://www.cnblogs.com/haifeima/p/12692502.html
Copyright © 2020-2023  润新知