Java基础Note——流程语句及方法和数组

流程语句及方法和数组

流程语句

Switch

switch语句选择的基本数据类型只有byte,short,char,int。没有long并且支持的引用类型都是以上四个基本数据类型的包装类,

java5和7后支持枚举和String类。注意:只要进入一个case后其它的case都会忽略,所以如果没有break则会一直向下执行(穿透)。case后面不能有{}

循环

for循环中,循环迭代变量一般起名为:i,j,k,m,n

for循环的优化问题

在这里插入图片描述
在这里插入图片描述
由以上可知

方案1:将次数小的放到外层循环,减少内层循环实例化,初始化等次数。
在这里插入图片描述
在这里插入图片描述
方案2:同时,可以讲for循环内实例化循环变量提取出来。减少实例化次数。循环次数越大,优化越明显
在这里插入图片描述

System.out.println(); 换行

System.out.println(); 结尾会多打印一个换行

System.out.print(); 不会打印换行

System.out.printf("%d",a); 格式化打印

return

return直接跳出当前方法,注意其和break的区别。

控制外层循环

在外层循环前面加上标签(要符合标识符规范) 然后用break <标签>控制

在这里插入图片描述

方法和数组

DRY原则

开发原则:Don’t Repeat Yourself(不重复自己的代码)。

原因:维护成本大

方法

方法是依赖于对象的,而函数可以独立存在,所以在Java中函数其实是和方法一样(Method)

方法格式:

				   //方法签名
[修饰符] 返回值的类型 方法名称(形式参数,..,)
{
    方法体;
}

方法定义的位置:

在类中定义(在java中最小的程序单元是类)

方法定义在其它方法之外,方法和方法之间是平行关系

Main方法专门由JVM调用

方法名称:遵循标识符规范,使用动词表示,首字母小写,驼峰表示法

参数列表:参数类型 + 参数个数 + 参数的顺序

在同一个类中,方法签名是唯一的

方法重载设计

重载方法的定义:在同一个类中,某方法允许一个以上的同名方法,但是参数列表不同即可

原则:”两同一不同“:
两同:同类中,方法名相同;
一不同:方法参数列表不同

返回类型无关但是一般要求了返回类型相同

JVM内存模型

在这里插入图片描述
JVM内存划分(人为根据不同内存空间的存储特点以及存储数据):
程序计数器:当前线程执行的字节码的行号指示器
本地方法栈:为虚拟机使用的native方法服务
java虚拟机栈(简称栈内存Stack):栈是一种数据结构(Last In First Out)即LIFO,后进先出。同时栈中由栈帧(即栈中一块小空间。main方法就是一个栈帧)
堆(Heap):所有线程共享的一块内存区域,在虚拟机启动时创建,所有对象实例以及数组都要在堆上分配。(new关键字,)

方法区:线程共享的内存区域,存储被虚拟机加载的类信息,常量,静态变量即时编译器编译后的代码数据等

GC(Garbage Collection):垃圾回收器
Java的自动垃圾回收机制:

程序员不需要手动控制内存释放,当JVM发现内存资源紧张的时候,会自动清理无用对象(未被引用的对象)
在这里插入图片描述

数组定义

数组定义
方式一:数组元素的类型[] 数组名; int[] age (推荐
方式二:素组元素的类型 数组名[]: int age[]

数组要初始化才能使用,因为要先为数组分配内存。

数组初始化
静态初始化:由我们自己为每个数组元素设置初始化,而数组长度由系统决定。
语法:数组元素类型[] 数组名 = new 数组元素类型[](元素1,元素2.元素3,…)int[] nums = new int[]{1,3,5};
简单方式:int[] nums = {1,3,5,7};(此种方式声明后一定要先初始化)
在这里插入图片描述

本质:数组的初始化,即int[]{1,3,5}其本质是在Heap中创建一个连续的内存空间,再讲其首地址赋值的声明的nums数组变量.
类比于:C语言中malloc()函数在堆空间创建连续内存返回地址。
在这里插入图片描述
所以可以得出,num=null;即为空指针,也理解未引用任何空间。
堆中内存空间没有被使用是等着GC回收

动态初始化:由我们来设置数组元素个数,每个数组元素的初始值由系统决定。
语法:数组元素类型[] 数组名= new 数组元素类型[length];
int[] ages = new int[100];
本质:声明时数组nums的值就为null
在这里插入图片描述

注意:无论那种初始化,一旦完成就不能改变,除非重新初始化,所以数组时定长的。
不能同时使用静态初始化和动态初始化

数组的基本操作

  1. array.length求数组的长度
  2. 索引范围:[0,length-1]
  3. 获取:array[index] ;设置:array[index] = 值

操作数组的常见异常

NullPointer Exception:空指针异常(空引用)
为初始化直接操作

ArrayIndexOutOfBoundsException:数组索引越界异常

打印数组元素:

直接打印数组的时候,打印出来的是hashCode值。
可以写出一个打印字符串的方法
在这里插入图片描述

元素出现索引(线性搜索)

int[] arr = {10,20,30,40,10};
获取元素10在arr数组中第一次出现的索引(indexOf)
获取元素10在arr数组中最后一次出现的索引(lastindexOf)
在这里插入图片描述
缺点:数组数据量大,效率低

发布了7 篇原创文章 · 获赞 11 · 访问量 371

猜你喜欢

转载自blog.csdn.net/Archerrrrr/article/details/104524567