Java基础篇--面试突击

Java基础篇--面试突击,第1张

Java基础篇--面试突击

文章目录

Java基础篇

1、java的基本认识2、基本知识3、随机数Random类4、数组排序

4.1 冒泡排序4.2 选择排序 5、java内存分配

5.1 方法的内存图解5.2 对象的内存图解5.3 静态变量/方法的内存图解

Java基础篇 1、java的基本认识

JDK:jre +开发工具(javac、java)=JVM+核心类库+开发工具。

API(应用程序编程接口),就是java写好的功能代码程序,可供直接调用。

一个java文件的编译执行过程:

.java – 编译 -->.class – 执行 -->JVM(java 虚拟机)

java的跨平台、工作原理:一次编译,处处可用。

实质上,是有多个对应系统版本的jvm虚拟机,致使可在不同系统上运行。


面向过程(如C语言):

它注重过程,当解决一个问题的时候,面向过程会把事情拆分成: 一个个函数和数据(用于方法的参数) 。然后按照一定的顺序,执行完这些方法(每个方法看作一个过程),等方法执行完了,事情就搞定了。

面向对象(如C++,JAVA等语言):

它注重对象,当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。

面向对象更注重于代码的可重用性、灵活性、扩展性。

用生活中洗衣机洗衣服的例子:

面向过程:

    执行丢衣服方法执行加洗衣粉方法执行加水方法执行清洗方法

面向对象: 抽出“人”对象,“洗衣机”对象

    人丢衣服人加洗衣粉洗衣机加水洗衣机清洗

对于可重用性,当面对相似问题时,面向过程语言是将所有方法复制粘贴根据具体情况增删改;面向对象语言可以通过调用对象实现。

2、基本知识 基本数据类型关键字字节数包装类整数byte1Byte整数short2Short整数int4Integer整数long8Long浮点数float4Float浮点数double8Double字符char2Character布尔boolean1Boolean

以上都是基本数据类型,变量名对应的内存空间存储的是数值。java为了实现一切皆对象,为8种基本数据类型提供了对应的引用类型。

String:字符串 引用数据类型,变量名存储的是内存地址,可理解为一个指针指向一个内存空间。

自动类型转换: 可以把数值范围小的数据赋值给数值范围大的数据;

强制类型转换: 把数值范围大的数据赋值给数值范围小的数据,可能造成数据丢失(有些情况不能强制转换)

成员变量和局部变量的区别

区别成员变量局部变量类中位置不同类中,方法外常见于方法中初始化值不同有默认初始化值没有,使用之前需要完成赋值内存位置不同堆内存栈内存生命周期不同随着对象的创建而存在、消失而消失随着方法的调用而存在,运行结束而消失作用域在所归属的大括号

常量是使用了public final static修饰的成员变量,必须有初始化值,且执行过程中值不能被改变。

权限修饰符: 是用来控制一个成员能够被访问的范围

修饰符同一个类中同一个包中的其他类不同包下的子类不同包下的无关类private✔default✔✔protected✔✔✔public✔✔✔✔

final关键字

final是最终的意思,可以修饰方法、变量、类

修饰方法:表明该方法是最终方法,不能被重写;

修饰变量:表示该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次)

修饰类:表明该类是最终类,不能被继承。

enum枚举是java中的一种特殊类型;

枚举类的特征:

    枚举类都是继承了枚举类型;枚举都是最终类,不可以被继承;构造器都是私有的,对外不能创建对象

定义枚举类的格式:

修饰符 enum 枚举名称{
	第一行都是罗列枚举类实例的名称
}
eg:
enum Season{
	SPRING,SUMMER,AUTUMN,WINTER;
}

Lambda表达式作用是简化匿名内部类的写法;

简化格式:

(匿名内部类被重写方法的形参列表) -> {
	被重写方法的方法体代码。
}
注:-> 是语法形式,无实际含义

注意: Lambda表达式只能简化函数式接口的匿名内部类的写法形式。

3、随机数Random类

用于在程序中获取随机数的技术。

nextInt(int bound)生成随机数,功能是生成0-(bound-1)的随机数;若bound为10,返回0-9的随机整数。

若要1-10的随机,可以通过加减法来实现,即nextInt(10)+1;

代码例子:随机排序数组

int codes = {1,2,3};
Random rand = new Random();
for(int i = 0; i < codes.length; i++){
    //当前遍历值为codes[i]
    int j = rand.nextInt(code.length);//随机索引位置
    swap(codes[i],code[j])//交换
}

4、数组排序 4.1 冒泡排序

对升序:从头开始两两比较,把较大的元素与较小的元素进行交换;每轮把当前最大的一个元素存入到数组当前的末尾。

共进行数组的长度-1轮比较,每轮比较次数为数组的长度-当前轮数。

for(int i = 1; i < 数组.长度; i++){
	for(int j = 0; j < 数组.长度-i; j++){
		
        if(交换不符合情况)
            元素j与元素j+1交换;
	}
}
4.2 选择排序

思想:每次选择当前位置,开始找出后面的较小值与该位置交换。

for(int i = 0 ;i < 数组.长度-1; i++){
	for(int j = i+1; j < 数组.长度; j++){
		
        if(arr[i] > arr[j])
            swap(arr[i],arr[j]);
	}
}
5、java内存分配

这里先讨论堆内存、栈内存、方法区,实际上还含有

栈内存: 方法运行时所进入的内存,变量也是在这里;

堆内存: new出来的东西会在这块内存中开辟空间并产生地址;

方法区: 字节码文件(.class文件)加载时进入的内存。

同一个数组变量同时指向同一个数组对象时,即是指向同一片堆内存地址空间。

5.1 方法的内存图解
    方法没有被调用的时候,在方法区中的字节码文件中存放;方法被调用的时候,需要进入到栈内存中运行。

java的参数传递机制:值传递

在传输实参给方法的形参,并不是传输实参变量本身,而是传输实参变量中存储的值。值传递时,方法的形参的改变不会影响实参变量的值。

引用传递

传输的引用类型变量存储的地址值,因而与值传递不同,若在方法中对应的内存空间如数组元素发生变化,实参也会受到影响。

5.2 对象的内存图解

5.3 静态变量/方法的内存图解

静态变量:在加载class文件时,会将静态成员变量加载至堆内存,而后再进行main方法的执行(在栈内存开辟栈空间)

静态方法:加载class文件时,将静态成员方法加载至方法区,而后再进行main方法的执行(在栈内存开辟栈空间)

垃圾回收

当堆内存中的类对象或数组对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。java存在自动垃圾回收器,会定期进行清理。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5716506.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存