######学习心得❤#####

今天开始讲面向对象了,应该算是近期里最难的一个节点了,整个需求的按照特点功能划分,将这些存在共性的部分封装成类。让创建的对象去解决问题。这样的想法是很便捷的,理解上去就可以实现很多程序。

 

 

 

#####心情#####

今天感觉好累啊,一直在敲代码,说的比较细,想把说的细节都记住,理解的文字比较多。



 1.Java是一门面向对象的编程语言。在Java中,万事万物皆是对象。(在linux中万事万物皆是文件)

2.面向过程和面向对象

面向过程:面向过程就是分析出实现需求需要的步骤,通过一些方法一步一步实现

面向对象(行为化),把整个需求的按照特点功能划分,将这些存在共性的部分封装成类(类实例化之后才是对象),让对象去解决问题。

简单解释

 

比如说我们要开始造车了,必须有一个图纸根据图纸可以造100台车这个图纸就是描述车的具体信息,对车信息的一个封装
封装:1.代码层面 2.思想层面
如果把变量直接声明在类里,成员变量(全局变量)
如果把变量声明在一个方法里,局部变量
成员变量->属性
根/据图纸去造车:🚗🚓🚕🛺🚙🚌🚐🚎
  1. 创 //建对象的过程,类的实例化的过程,对象又叫做类的一个实例
  2. 创建对象的语法:类名 对象名=new 类名
  3. 我 //们创建了Car类的对象car1
  4. 这 //个car1就是对象的名
  5. 这个car1就是一个标识符
  6. 对象名的命名规则:小驼峰

举个例子:

面向对象更高级的抽象,是对现实世界的一个映射,String Scanner 在使用Scanner的时候,我们从来没想过Scanner为什么可以键盘输入,这就是别人给我们创建的对象,所以在开发中我们也可以自己创建。

 

我们准备一个4s店,需要有一个车,有一家门店
先说说我们怎么用代码描述一辆车
车:描述信息,信息就是属性,属性从代码的角度来说就是变量,
定义好多变量,1.brand 2.color 3.length...
问题又来了,怎么描述很多辆车
我们可能要用几十个甚至上百个数组去描述车,这简直是一个灾难
这时,我们要用到面向对象思想,我们尝试将一个汽车多个属性进行打包

添加属性

public class Ch02 {
    public static void main(String[] args) {
        Car car1 = new Car();
        //给车的属性赋值
        car1.brand = "奥迪";
        car1.color = "白色";
        car1.length = 5L;
        //取出属性的值
        System.out.println("生产了第一辆车,它的属性是:"+car1.brand+","+car1.color+","+car1.length+"米");


        Car car2 = new Car();
        car2.brand = "奔驰";
        car2.color = "黑色";
        car2.length = 4L;
        //取出属性的值
        System.out.println("生产了第一辆车,它的属性是:"+car2.brand+","+car2.color+","+car2.length+"米")

✡我们需要了解两块内存空间吗✡

1.栈:变量,基本数据类型

2.堆

引用数据类型的初始

🃏主函数:

public class Ch03 {


    public static void main(String[] args) {
//        Car car;  声明了一个Car类型的属性car
        //赋值时除了string外,其余的引用数据类型都需要new
        Car car =  new Car();
        //只要看见了new,就不是null,它就有地址
        System.out.println(car);
    }
}
成员方法
1.方法名不能重复
自己调用自己  递归
递归的问题,StackOverflowError 栈溢出,内存溢出
思考:开发中到底用不用递归?如果用的话要注意什么?

 


练习:写两个重载的方法

1.一个方法求两个数的最大值

2.另一个方法求三个数的最大值

public class Ch03 {
    public  int max(int a,int b ,int c){
      int d = (a>b?a:b);
      return d>c?d:c;


    }
    public  int max(int a,int b){
        return a>b?a:b;


    }
    public static void main(String[] args) {
        Ch03 c = new Ch03();
        c.max(23,342,3253);
    }
方法的重载  (overload)
1.方法名相同
2.参数不同(参数的类型,参数的个数,参数的顺序)
3.发生在同一个类里
与返回值类型无关,与访问的修饰符无关
构造器(构造方法)
语法:
访问权限修饰符  类名(){
}
特点: 1.java在new对象的时候,先看对象所对应的类有没有构造器,有什么样的构造器 如果没有构造器,就无法创建对象 2.每个类会有一个默认的无参构造器 3.在对象被实例化时,调用了构造器 4.我们创建对象实际上是创建了一个构造器 5.如果一个类中显示的声明了一个构造器,原来的默认的自带的无参构造器就失效,

先写一个猫🐱的信息:

public class Cat {
    String variety;
    int age;
    String color;
    public Cat(String v,int a,String c){
        variety=v;
        age=a;
        color=c;
    }
    public String show(){
        return "品种"+variety+"年龄"+age+"颜色"+color;
    }
}

再写一个人🤦‍♂️的信息,调用猫的信息

public class Person {
    String name;
    int gender;
    int age;
    Cat cat;
    public Person(String n,int g,int a,Cat c){
        name = n;
        gender = g;
        age = a;
        cat =c;
    }
    public void show(){
        System.out.println("名字"+name +"性别"+(gender==1?"男":"女") +"年龄"+age +"猫的信息"+cat.show());
    }
    public void look(){
    }
}

主函数再次调用,很方便,可以继续添加一些属性

public class Dome {
    public static void main(String[] args) {
        Cat cat = new Cat("布偶",2,"满耳满背");
        Person person = new Person("jim",1,30,cat);
        person.show();
//        person.look(cat);
    }
}
能不能用一个方法,能够计算多个数相加
用这一个方法可以实现之前我们写过的方法重载的功能 这一个方法可以实现两个数,三个数,四个数,五个数...相加 都是同一个数据类
public class Ch04 {
 
//    public int sum(int arr[]) {
//        int result = 0;
//        if (arr.length < 2) {
//            result = arr[0];
//        } else {
//            for (int i : arr) {
//                result += i;
//            }
//        }
//        return result;
//    }


    /*
         不定长参数(简便写法)
         1.参数列表中,至多有一个不定长参数
         2.不定长参数必须在最后位置
     */


    public int sum(String d, double d1, int... arr) {
        int result = 0;
        if (arr.length < 2) {
            result = arr[0];
        } else {
            for (int i : arr) {
                result += i;
            }
        }
        return result;
    }
    public static void main(String[] args) {
        Ch04 c = new Ch04();
//        int [] arr = new int[]{2,3,3,4};
//        System.out.println(c.sum(arr));
//        c.sum(1, 3, 34, 5, 54, 45, 32, 3, 3, 32, 56, 78);
        c.sum("1" ,3);//我甚至可以不用管那个不定长
posted on 2022-07-18 22:20  骐琳  阅读(26)  评论(0编辑  收藏  举报

你点我就回上面去了ヾ(≧O≦)〃嗷~