java基础如何巩固好

java基础如何巩固好一 Java 语言的运行机制 Java 是编译型语言也是解释型语言 Java 运行过程是 源文件 java 文件 经过 Java 编译器编译成字节码文件 class 文件 运行的时候就会走到 jvm 虚拟机 他会把字节码文件这个类放到类装载器里面 这时候就会把类加载到 jvm 里面了

大家好,我是讯享网,很高兴认识大家。



一、Java语言的运行机制

  1. 源文件(.java文件)经过Java编译器编译成字节码文件(.class文件)
  2. 运行的时候就会走到jvm虚拟机,他会把字节码文件这个类放到类装载器里面,这时候就会把类加载到jvm里面了
  3. 加载进来之后就会有个字节码校验器(这个就是看你代码写的对不对,不对就会告诉你出问题了)
  4. 代码没问题就会通过一个解释器解释给操作系统
    在这里插入图片描述

二、使用IDEA开发

三、标识符

在这里插入图片描述
在这里插入图片描述

四、逻辑运算符位运算符

在这里插入图片描述

逻辑运算符:

&& 和 || 都有这个短路功能
在这里插入图片描述

位运算符

与(&)、非(~)、或(|)、异或(^)

& 比较二进制,如果同位上都是1则算出来的二进制这个位置上是1,否则都位0

java基础如何巩固好

| 比较二进制,如果同位上有一个是1那么则算出来的二进制同位是1

^(取反)比较二进制,如果两个位置相同是0不相同则为1
单个二进制,就是跟二进制完全相反

在这里插入图片描述

 
讯享网 

五、数据类型

在这里插入图片描述
在这里插入图片描述
除了基本数据类型之外的都叫引用数据类型,比如String、Integer…

什么是字节

在这里插入图片描述

拓展

整数拓展:
在这里插入图片描述
浮点数拓展:
浮点数表现得字长是有限的,也是离散的,舍入误差,大约数,最好完全避免使用浮点数比较,可以用BigDecimal 数学工具类
在这里插入图片描述

字符拓展:
可以把char强制转换成int,所有的字符本质还是数字
编码问题:Unicode可以处理各种语言的文字 2字节 字符长度0-65536
他还有一张表比如 97 = a ;65 = A;
他这些东西可以使用unicode编码通过转译表示
char c3 = ‘a’ ⦿转译
在这里插入图片描述
转义字符:还有很多
在这里插入图片描述
布尔值扩展:
在这里插入图片描述

六、类型转换

强制类型转换、自动类型转换
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

计算的时候容易出现的问题
在这里插入图片描述

七、 九九乘法表

在这里插入图片描述

八、可变参数

本质是一个数组
调用方法:
可以用可变长参数去调用
也可以用一个同类型的数组去调用
在这里插入图片描述
排序求最大值
在这里插入图片描述

九、递归

递归:A方法调用A方法!就是自己调用自己

StackOverflowError栈溢出异常
在这里插入图片描述
递归简介:
在这里插入图片描述
递归头:什么时候不调用自己
递归体:什么时候调用自己

上面那个类就是没有递归头

阶乘概念
在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述
到f(1)就有一个值1,然后一步一步返回给上一步方法
在这里插入图片描述
边界条件:到最后一个数的时候会执行到底 这里是f(1)
前阶段:自上而下一层一层的调到最下层的这个阶段f(3)——>f(2)——>f(1)
返回阶段:n*(n-1)

Java都是使用栈机制的,相当于是一个罐子,最下面是一个main方法,然后每调用一个方法就会在里面压一层东西,一个方法结束了然后那一层的东西就结束了,main方法执行完了栈里面就空了他就不跑程序了。

加入这个栈里面就无限在往里面压东西他就空间不行了,对于一些嵌套层次比较深的算法,递归就会显得力不从心了,物理上就会造成这个内存崩溃,最后就崩了

所以能不用递归就不用递归,一般我们可以通过一些方法代替,但是有些递归执行的比较快的话就用递归,前提是基数比较小的情况下,如果刚刚那种f(10000)就不要用了,反而会影响性能

十、内存分析(一):

先基本了解一下Java的内存,不是很底层
在这里插入图片描述
在这里插入图片描述

首先声明一个数组这个数组并不存在于堆中,只有一个引用变量存在栈中,当new的时候在堆中才会开辟一片空间去存这个数组(这个数组才算真正产生)赋值的时候里面才有值,没有赋值就是个默认元素。

异常:数组下标越界ArrayIndexOutOfBoundsException异常,比如一个数组只开辟了10个空间大小,而你用下标10想去调用第11个数组的时候会产生
在这里插入图片描述

在这里插入图片描述

数组的四个基本特点

1、长度是确定的,一旦被创建,它的大小就是不可改变的(扩容的话就要创建一个新的数组,后面会学一些集合框架底层就是数组可以扩容)
2、元素必须是相同类型,不允许出现混合类型
3、数组中的元素可以是任何数据类型,包括基本类型和引用类型
4、数组变量数组引用类型,数组也可以看成是对象,每个元素相当于该对象的成员变量,Java中对象是在堆中的,因此数组无论保存原始类型还是引用类型,数组对象本身是在堆中的

十一、Arrays类

在这里插入图片描述

在这里插入图片描述
直接打印一个数组对象会出现一个hashcode

  1. toString方法和sort方法
    在这里插入图片描述
  2. fill方法
    不写区间就默认全部元素被填充
    在这里插入图片描述

十二、冒泡排序

总共有八大排序,冒泡排序是最出名的之一

冒泡排序代码:两层循环,外层冒泡轮数,里层依次比较

举例说明:要排序数组:int[] arr={6,3,8,2,9,1};

第一趟排序:

第一次排序:6和3比较,6大于3,交换位置: 3 6 8 2 9 1

第二次排序:6和8比较,6小于8,不交换位置:3 6 8 2 9 1

第三次排序:8和2比较,8大于2,交换位置: 3 6 2 8 9 1

第四次排序:8和9比较,8小于9,不交换位置:3 6 2 8 9 1

第五次排序:9和1比较:9大于1,交换位置: 3 6 2 8 1 9

第一趟总共进行了5次比较, 排序结果: 3 6 2 8 1 9


第二趟排序:

第一次排序:3和6比较,3小于6,不交换位置:3 6 2 8 1 9

第二次排序:6和2比较,6大于2,交换位置: 3 2 6 8 1 9

第三次排序:6和8比较,6大于8,不交换位置:3 2 6 8 1 9

第四次排序:8和1比较,8大于1,交换位置: 3 2 6 1 8 9

第二趟总共进行了4次比较, 排序结果: 3 2 6 1 8 9


第三趟排序:

第一次排序:3和2比较,3大于2,交换位置: 2 3 6 1 8 9

第二次排序:3和6比较,3小于6,不交换位置:2 3 6 1 8 9

第三次排序:6和1比较,6大于1,交换位置: 2 3 1 6 8 9

第二趟总共进行了3次比较, 排序结果: 2 3 1 6 8 9


第四趟排序:

第一次排序:2和3比较,2小于3,不交换位置:2 3 1 6 8 9

第二次排序:3和1比较,3大于1,交换位置: 2 1 3 6 8 9

第二趟总共进行了2次比较, 排序结果: 2 1 3 6 8 9


第五趟排序:

第一次排序:2和1比较,2大于1,交换位置: 1 2 3 6 8 9

第二趟总共进行了1次比较, 排序结果: 1 2 3 6 8 9


最终结果:1 2 3 6 8 9
在这里插入图片描述

讯享网

十三、类与对象的创建

面向对象编程的本质就是:以类的方式组织代码,以对象的形式组织(封装)数据

类有属性和方法
类是抽象的需要实例化出来
类通过new实例化出来后会返回一个自己的对象
对象是一个类具体的实例

我们在使用new关键字创建对象的时候,除了分配内存空间之外,还会对创建好的对象进行默认的初始化以及对类中构造器的调用。
在这里插入图片描述

构造器

使用new关键字,必须要有构造器,因为他本质是在调用构造器
一个类即使什么都不写也会存在一个方法(无参构造)
在这里插入图片描述
构造器要求:与类名相同并且没有返回值

构造器的作用:
实例化初始值
new本质在调用构造方法

注意点:有参构造:一旦定义了有参构造,无参就必须显示定义(不然无参构造就不存在)

十四、内存分析(二创建对象内存分析)

在这里插入图片描述
堆中实例化出来的对象会默认初始化属性的,dog之所以变了是因为默认初始化属性之后又改变了
在这里插入图片描述

小结类与对象

在这里插入图片描述
在这里插入图片描述

十五、内部类

在这里插入图片描述
1、成员内部类
在这里插入图片描述
2、静态内部类
但是如果给内部类加上static变成静态内部类之后id就拿不到了,因为加了static会比id更早实例化,除非把上面那个id也改成static

一个Java类中可以有多个class,但是只有一个叫public class
在这里插入图片描述

小讯
上一篇 2024-12-30 07:49
下一篇 2024-12-24 16:44

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/3911.html