方法,数组及类和对象的初步认识

方法的相关定义

1.public static 返回值 方法名(形式参数列表){
方法体
}

2.方法名:采用小驼峰 maxNum

3.public static : 因为当前所有的方法 写完之后 会在main方法中调用
因为main方法是public static 的

4.返回值 可有可无 具体看业务需求 如果有返回值 那么返回值类型需要和方法的返回值类型匹配

5.形式参数列表: 形参----->实参的一份拷贝 形参相当于实参的拷贝,即传值调用

6.方法体:具体方法的实现

7.方法的重载(overload):
(1).方法名相同
(2).返回值不作要求
(3).参数列表不同(类型不同或者个数不同)
(4).同一个类当中

8 面试题常考:重载与重写的区别是什么?

9.递归:把一个大问题 化解成 小问题 ,因为大问题和小问题的解决方式是一样的

  • 1.要调用自己本身 n! = n* (n-1)!

  • 2.要有一个趋近于终止的条件 否则 StackOverError 栈溢出异常

  • 3.推倒出 递归 的公式:重要 核心:找出递推公式

  • 递归 函数的调用 是要在栈上开辟内存的 给这个函数开辟栈帧
    栈 先进后出

  • 思考递归;横向思考 不要试图走进 递归的代码 即展开代码代码纵向执

数组的相关

1 . JVM的组成:java虚拟机栈,java本地方法栈,堆,方法区,程序计数器递归的栈 是Java虚拟机栈

2 .数组:存放相同数据类型的集合。内存是连续的

3 . 数组为引用类型 内存在堆上

4 .new 实例化一个对象 内存 堆上

5 .数组的拷贝有四种:

  • 1.for循环
  • 2.Array.copyOf(要拷贝的,拷贝的长度) 返回新的对象
  • 3.System.arrayCopy(源数组 , 开始拷贝的位置,目的地数组, 拷到哪个位置, 拷贝的长度 );底层是native方法 底层是c/c++ 实现 速度快 返回新的对象
    *4. array.clone() 克隆 产生了这个对象的一个副本 这个方法是object的克隆方法

6 .Array工具类当中常用的方法介绍: from…to 一般左闭右开

7.浅拷贝:如果是两个引用同时指向一个对象,那么通过一个引用修改当前对象的值后,那么另外一个引用也会受到影响
在这里插入图片描述

深拷贝:在这里插入图片描述

8 . 不规则二维数组的定义

public static void main7(String[] args) {
        int[][] array = {{1,2},{3,4},{5,6}};
        int[][] array2 = new int[][]{{1,2},{3,4},{5,6}};
        int[][] array3 = new int[3][2];

        //不规则二维数组
        int[][] array4 = new int[3][];
        int[][] array5 = {{1},{3,4},{5,6}};
    }

类和对象

1.面试问题:OP语言的三大特征 (OP语言:面向对象编程的语言) 封装继承和多态

2 .类和对象 抽象的概念

  • 什么是类? 模板 通过一个类可以产生多个对象

  • 什么是对象? 实体东西–>通过模板产生的实体

  • 什么是面向对象?
    面向对象:找对象 创对象 使用对象

  • 访问限定修饰符

  • public : 公有的

  • private 私有的

  • protected 受保护的

  • 什么都不写 默认权限–>包访问权限


```java
class Person2{
      //字段-->成员变量  定义在方法外边  类的里面
      //实例成员变量:对象里面  在 堆 里面
      //实例成员没有初始化 默认值位对应的 0 值。  引用类型默认为null  简单类型为0
      // char -> '\u0000'        boolean->false
      public String name;
      public int age;
      //静态成员变量:不属于对象,属于类  在 方法区 里面    和 实例成员变量一样  初始化都为 0
      //如何访问静态的数据成员      类名.静态成员变量
      public static int size  ;
      //方法-->行为   //实例成员方法
      public void  eat(){
          int a = 10;  //  局部变量  在 栈 里边
          System.out.println("eat()!" );
      }

3 .封装:用private 来修饰属性或者方法

  • 为什么要封装?
  • 好处:类的实现者 和 类的调用者 注意:私有的数据成员在类外不能狗访问,需要提供get,set方法来访问,更好维护程序。
  • 没有特殊要求 属性设为私有的
  • this: 代表 当前对象的引用
  • 要习惯使用 this 代表的是当前对象的引用

4 .

class Student{
    private String MyName;          //被private修饰  限定只能在类当中使用
    public int age ;

                              //编译器自己可以生成get,set方法  要规范命名   MyName 不可  name  可
                              //  快捷键   alt +  insert

    public void func1() {
        System.out.println("func1()");
    }

    public void show(){
        System.out.println("我叫" + this.MyName + "今年" + age + "岁");
    }

    public String getName(){
        return this.MyName;
    }

    public  void setName(String MyName){        //形参与属性名称相同时  要用this关键字
        this.MyName = MyName;             //否则自己给自己赋值   并没有给属性赋值  局部变量优先

    }

    @Override    //表示重写
    public String toString() {   //       重新 实现了一下 Object类的toString()方法   相当于重写
        return "Student{" +                       //alt +  insert --> toString
                "MyName='" + MyName + '\'' +
                ", age=" + age +
                '}';
    }
}

构造方法

1 . 构造方法: 他的方法名是和类目相同的,且没有返回值

2 .当没有提供构造方法的时候,会默认生成一个没有参数的构造方法,当你提供了一个构造方法,编译器不会生成默认构造方法

3 .提出问题:一个对象的产生,分为几步?他是如何产生的?
答:1.为对象分配内存 2.调用合适的构造方法 意味着构造方法不止一个

4 . 面试问题:this关键字代表对象,对不对?
不对。 this关键字代表当前对象的引用 为什么?因为生成对象,需要俩步,分配内存以及调用合适构造方法,但是在构造方法中已经使用了this,所有this只能代表 为 当前对象分配内存,所以this代表当前对象的引用

5.this的功能:

  • this() : 调用自己的构造方法
    只能调用一次,且只能在构造方法中调用,且只能放在第一行
  • this.data : 调用当前对象的属性
  • this.func : 调用当前对象的方法

6 .实例代码块: 类的内部 ,方法的外部
静态代码块: 有 static 修饰的 实例代码块
本地代码块: 方法内部的 代码块

优先级 : 静态代码块 > 实例代码块 > 构造方法
如果都是静态的 跟定义的顺序是有关系的

如果都是实例 跟d定义的顺序还是有关的

时间空间复杂度

  • 冒泡排序 空间复杂度 O(1)

  • 斐波那契数列 空间复杂度 O(N)
    跟问题规模有关 N为参数
    时间复杂度 logN N 代表节点数 (二叉树)

  • 时间复杂度:算法中的基本操作的执行次数,为算法的时间复杂度。
    1、用常数1取代运行时间中的所有加法常数。
    2、在修改后的运行次数函数中,只保留最高阶项。
    3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。
    得到的结果就是大O阶。

  • 空间复杂度:临时占用存储空间大小的量度 变量的个数
    递推的空间复杂度:递推的次数

顺序表和链表

面试问题:数组和链表有什么区别? ArrayList和 LinkedList 的区别
顺序表:
优点: 空间连续,支持随机访问
缺点:1.中间或前面部分的插入删除时间复杂度O(N)
2.增容的代价比较大

单链表: 缺点:1、以节点为单位存储,不支持随机访问
优点:1、任意位置插入删除的时间复杂度为O(1) 头插O(1) ,尾插O(N) (必须找到为尾巴)
2、没有增容问题,插入一个开辟一个空间

面试题:输入俩个链表,找出他们的第一个公共节点
1.求俩个单链表的长度 ------- pl 指向长的链表----- ps 指向短的链表
2. 计算长度的差值 让长的先走差值步

JDK命令

clear 用来释放内存的
* JVM在回收内存的时候,当该对象没有人在引用他的时候,这个对象才会被回收,发生了内存泄露
* jdk命令: javac javap -c jps jmap jconslo
* jps 查看进程号
* jmap -histo:live 进程号 >log.txt 文件夹

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值