Java中的面向对象第一步 打磨基础

**堆:**java的数据区,是一个运行时数据区,类的对象从中分配空间,他们不需要程序代码显示的释放,而是由垃圾回收机制来负责的。优势可以动态得分配内存地址,生存期也不必事先告诉编译区,因为它是运行时动态分配内存的,java有自动回收垃圾体制,自动收取不再使用的数据。**缺点:**是由于要在运行时动态分配内存,存取速度较慢

由此可见栈内存的引用变量并没有真正存储对象中的变量数据,对象的变量数据实际放在了堆内存,引用变量只是指向堆内存里的对象。
在这里插入图片描述

属性注意事项和细节说明

1.属性的定义语法同变量 如:访问修饰符 属性类型 属性名;

2.属性的定义类型可以为任意类型,包含基本类型或引用类型

3.属性如果不赋值,有默认值,规则和数组一致,具体的说:

int 0,short 0,byte 0,long 0,float 0.0 , double  0,char \u0000,

boolean false,String null;

访问属性

基本语法

对象名.属性名;

对象分配机制

在这里插入图片描述

类和对象的内存分配机制

java内存结构分析

1.栈:一般存放基本数据类型(局部变量)

2.堆:存放对象(Cat cat 数组等)

3.方法区:常量池(常量,比如字符串),类加载信息

4.示意图[Cat(name,age,price)]

Java创建对象的流程简单分析

Person p = new Person();

p.name = "jack";

p.age = 10;

1.先加载Person类信息(属性和方法信息,只会加载一次)

2.在堆中分配空间,进行默认初始化(看规则)

3.把地址p,p就指向对象

4.进行指定初始化,比如p.name = “jack” p.age = 10

创建对象流程
public class Person01 {
    public static void main(String[] args) {
        //创建Person对象
        //p1 是对象名(对象引用)
        //new Person()创建的对象空间(数据)才是真正的对象
        Person  p1 = new Person();
        System.out.println(p1.age);
        System.out.println(p1.name);
        System.out.println(p1.sal);
        System.out.println(p1.isPass);
        
    }
}
class Person{
        //四个属性
    int age;
    String name;
    double sal;
    boolean isPass;
}

成员方法(简称行为)

基本介绍

在某些情况,我们需要定义成员方法,比如人类:除了有一些属性外(年龄,姓名)我们人类还有一些行为比如

说话、跑步、学习,交朋友。现在我们就可以用成员方法来完成

public 表示公开 void:表示方法没有返回值 speak():speak方法名, ()形参列表

{}方法体,可以写我们要执行的代码

System.out.println("我是一个好人");

表示我们的方法就是输出

一句话

classPerson{
	public  void  speak(){

    ​		System.out.println("我是一个好人");

    }
} 

方法使用
class Test{
    public static void main(String[] args){
        Person p1 = newPerson;
        p1.speak();
        p1.call();
    }
}

public void call(){

​		int res  = 0;

​		for(int i = 1; i<=1000;i++){
			res+= i;
		}
		System.out.println("计算结果="+res);

}

形参使用
public int getsum(int num1,int num2){
    int res = num1 + num2;
    return res;
}

public static void main(String[] args){
//调用getsum方法,同时num1 = 10; num2 = 20
//吧getsum返回的值赋给变量returnRes
int returnRes = p1.getsum(10,20);
}

在这里插入图片描述

成员方法的定义

public 返回数据类型 方法名(参数表…){//方法体

​ 语句;

​ return 返回值;

返回类型注意事项和细节

1.一个方法最多有一个返回值[思考,怎么返回多个结果?]

2.返回类型可以为任意类型,包含基本类型或引用类型(数组,对象)

3.如果方法要求有返回数值类型,则方法体中最后的执行语句必须为return 值

而且要求返回值类型必须和return的值类型一致或兼容

4.如果方法是void,则方法体可以没有return语句,或者只写return;


参数列表注意事项和使用细节

1.一个方法可以有多个0个参数,也可以有多个参数,中间用逗号隔开。getSum(int n1,int n2)

2.参数类型可以为任意类型,包含基本类型或引用类型。printArr(int[ ,][, ] map )

3.调用参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数【getSum】

4.方法定义时的参数称为形式参数,简称形参;方法调用时的参数称为实际参数,简称实参,实参和形参的类型

要一致或兼容、个数、顺序必须一致!

方法体

里面写完成的功能的具体的语句,可以输入、输出、变量、运算、分支、循环、方法调用,但里面不能

再定义方法! 即:方法不能嵌套定义。

方法调用细节注意事项和使用细节

1.同一个类中的方法调用说明:直接调用即可。比如print(参数);

2.跨类中的方法A类调用B类方法:需要通过对象名调用。

3.跨类的方法调用和方法的访问修饰符相关。

方法调用细节

1.当程序执行到方法时,就会开辟一个独立的空间(栈空间)

2.当方法执行完毕,或者执行到return语句时,就会返回

3.返回到调用发的地方

4.返回后,继续执行方法后面的代码

5.当main方法(栈)执行完毕,整个程序退出

方法传参机制

1.基本数据类型的传参机制

public void swap(int a, int b){
int tmp = a;
a = b;
b = tmp;
System.out.println("a="+a+"\tb="+b);
}

2.结论

在这里插入图片描述

基本数据类型, 传递的值是(值拷贝),形参的任何改变不影响实参!

2.引用类型传参机制

public class Method {
    public static void main(String[] args) {
        //测试
        B b= new B();
        int[] arr = {1,2,3};
        b.test100(arr);
        System.out.println("main的arr数组");
        //遍历数组
        for (int i= 0; i< arr.length;i++){
            System.out.println(arr[i]);
        }

    }
}
class B{
    public void test100(int[] arr){
        arr[0] = 200;//修改元素
        // 遍历B的数组
        for (int i = 0;i< arr.length;i++){
            System.out.print(arr[i]+"\t");
        }
    }
}

看案例B类编写一个方法test100,可以接收一个数组,在方法中修改修改该数组,原来的数组是否

发生改变

2.结论

引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参。

方法递归

基本介绍

简单的说:递归就是方法调用自己,每次调用时传入不同的变量;有助于编程者解决复杂问题,让代码变得简洁

递归能解决什么问题?

1.各种数学问题:如8皇后问题、汉诺塔、阶乘问题、迷宫、球和篮子

2.各种算法也会使用到递归,比如快排、归并排序、二分查找、分治算法

3.将用栈解决的问题----》递归代码比较简洁

递归调用机制图

在这里插入图片描述

public class jicheng1 {
    public static void main(String[] args) {
            o o1 = new o();
            o1.test(4);
    }
}
class o {
    public void test(int n) {
        if (n > 1) {
            test(n - 1);
        }
        System.out.println("n=" + n);
    }
}

在这里插入图片描述

public class jicheng1 {
    public static void main(String[] args) {
            o o1 = new o();
           int res =  o1.fact(5);
           System.out.println("res="+res);
    }
}
class o {
    public int fact(int n){
        if (n==1){
            return 1;
        }else{
            return fact(n-1)\*n;
        }
    }
}

递归注意事项和说明

1.当执行一个方法时,就创建一个新的受保护的独立空间(栈空间)

2.方法的局部变量是独立的,不会相互影响,比如n变量

2.如果方法中使用的是引用变量(比如数组),就会共享引用类型的数据

4.递归必须向退出递归的条件逼近,否则就是无限递归

5.当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时执行完毕或者返回时,该方法也就执行完毕。

方法重载
基本介绍

Java中允许同一个类中,多个同名方法的存在,但要求形参列表不一致

好处

1.减轻了起名的麻烦 2.记名的麻烦

使用细节

1.方法名:必须相同

2.参数列表:必须不同(参数类型或个数或顺序,至少一样不同,参数名无要求)

3.返回类型:无要求

public class zaiOne {
    public static void main(String[] args) {
        Methods rn = new Methods();
        System.out.println(rn.max(95,100));
        System.out.println(rn.max(25.1,26.3));
        System.out.println(rn.max(25.1,26.3,85.2));
    }
}
class Methods{
    public int max(int n1,int n2){
        return n1>n2?n1:n2;
    }
    public double max(double n1,double n2){
        return n1>n2?n1:n2;
    }
    public double max(double n1,double n2,double n3){
        double max1 = n1>n2?n1:n2;
        return max1>n3?max1:n3;
    }
}

可变参数
基本概念

Java允许将同一个类中多个同名功能但参数个数不同的方法,封装成一个方法

基本语法

访问修饰符 返回类型 方法名(数据类型… 形参名){

}

注意事项和使用细节

1.可变参数的实参可以为0个或任意多个。

2.可变参数的实参可以为数组。

3.可变参数的本质就是数组。

4.可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后

最后

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!

我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:

Dubbo面试专题

JVM面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Java并发面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Kafka面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MongDB面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MyBatis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MySQL面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Netty面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

RabbitMQ面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Redis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Spring Cloud面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

SpringBoot面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

zookeeper面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

常见面试算法题汇总专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

计算机网络基础专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

设计模式专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

题**

[外链图片转存中…(img-ah8gCZag-1714336759143)]

Netty面试专题

[外链图片转存中…(img-qt1EFxFM-1714336759143)]

RabbitMQ面试专题

[外链图片转存中…(img-9NUjXjoi-1714336759143)]

Redis面试专题

[外链图片转存中…(img-taVNyKm2-1714336759144)]

Spring Cloud面试专题

[外链图片转存中…(img-9FOdIpOq-1714336759144)]

SpringBoot面试专题

[外链图片转存中…(img-cM4yro4i-1714336759144)]

zookeeper面试专题

[外链图片转存中…(img-kd5CCi1K-1714336759144)]

常见面试算法题汇总专题

[外链图片转存中…(img-0Xs2ERvX-1714336759145)]

计算机网络基础专题

[外链图片转存中…(img-dJfqxmlv-1714336759145)]

设计模式专题

[外链图片转存中…(img-ySzCT6PF-1714336759145)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值