1、java内存结构分为栈、堆、方法区、本地方法区、寄存器等!各结构功能如下:
Java内存结构:
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:数组和对象,通过new建立的实例都存放在堆内存中。
方法区:静态成员、构造函数、常量池、线程池
本地方法区:window系统占用
寄存器:~~
2、堆内存中的数据都有默认初始化值,而局部变量在使用前就必须被赋值。
3、创建数组的两种方式:
1):
int[] arr = new int[3];
2):
int[] arr = new int[]{3,5,2,1,9};
也可简化为:
int[] arr = {3,5,2,1,9};
4、当数组角标越界时,编译可通过,运行时才报错!这说明,在编译的时候,并没有在堆中创建数组的实体,这个时候只检查语法上的错误。
运行时的报错信息为:
5、冒泡排序:
运算结果为:
6、折半查找(二分查找)
public static int halfSearch(int[] arr, int key)
{
int min = 0;
int max = arr.length -1;
int mid = (max+min)/2;
while( arr[mid] != key )
{
if(arr[mid] > key)
max = mid - 1;
else
min = mid + 1;
if( min > max )
return -1;
mid = (max + min)/2;
}
return mid;
}
折半查找的第二种写法:
public static int halfSearch(int[] arr, int key)
{
int min = 0;
int max = arr.length -1;
int mid = (max+min)/2;
while( min <= max )
{
if(arr[mid] > key)
max = mid - 1;
else if(arr[mid] < key)
min = mid + 1;
else
return mid;
mid = (max+min)/2;
}
return -1;
}
7、个人认为视频中提供的进制转换特别的好:
package com.day02;
public class ArrayTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
toBin(-6);
toOct(9);
toHex(60);
}
public static void toBin(int num)
{
trans(num,2,1);
}
public static void toOct(int num)
{
trans(num,8,3);
}
public static void toHex(int num)
{
trans(num,16,4);
}
private static void trans(int num,int base,int offset)
{
char[] chs = {'0','1','2','3'
,'4','5','6','7'
,'8','9','a','b'
,'c','d','e','f'
};
char[] arr = new char[32];
int pos = arr.length;
while( num != 0 )
{
int temp = num & (base-1);
arr[--pos] = chs[temp];
num = num>>>offset;
}
for( int i = pos; i < arr.length; i++ )
System.out.print(arr[i]);
System.out.println();
}
}
运算结果为:
8、java中二维数组中的一个小知识点,先看代码:
int[][] arr = new int[3][4];
System.out.println(arr);
System.out.println(arr[0]);
运算的结果是:
根据运算结果可知,前面"["的个数表示数组的维数;
另一段代码:
int[][] arr = new int[3][];
System.out.println(arr);
System.out.println(arr[0]);
注意,第二段代码的第2个输出结果为null。根据讲解,我认为引用数据类型不单单可以存储在栈中,还可以存储在堆中。示例中的arr是一个引用数据类型,arr[]也是一种引用数据类型。
9、二维数组arr[][],
arr.length是二维数组的行数;
arr[i].length是二维数组第i行的元素个数;
下面是示例代码:
int[][] arr = {{56,89,23}
,{15,96,11,2}
,{78}};
System.out.println(arr.length);
System.out.println(arr[0].length);
System.out.println(arr[1].length);
System.out.println(arr[2].length);
运行的结果是: