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、基本知识以上都是基本数据类型,变量名对应的内存空间存储的是数值。java为了实现一切皆对象,为8种基本数据类型提供了对应的引用类型。
String:字符串 引用数据类型,变量名存储的是内存地址,可理解为一个指针指向一个内存空间。
自动类型转换: 可以把数值范围小的数据赋值给数值范围大的数据;
强制类型转换: 把数值范围大的数据赋值给数值范围小的数据,可能造成数据丢失(有些情况不能强制转换)
成员变量和局部变量的区别
常量是使用了public final static修饰的成员变量,必须有初始化值,且执行过程中值不能被改变。
权限修饰符: 是用来控制一个成员能够被访问的范围
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存在自动垃圾回收器,会定期进行清理。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)