Java语言的三种技术框架:EE,SE,ME(学SE,企业用EE)
框架 | 应用方向 |
---|---|
JavaSE | 基础,应用于桌面程序开发 |
JavaEE | 高级,针对于企业级开发 |
JavaME | 高级,针对于嵌入式软件开发 |
java基础知识1
JRE(Java Runtime Environment) : java运行环境=jvm+核心类库
JDK(Java Development Kit) : java开发工具包=开发工具+JRE
jvm:如果你配置了虚拟机的classpath,则会在你配置的classpath找类,如果没有,会在当前目录下找
重载(overload):发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。
重写(overwrite):发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为 private 则子类就不能重写该方法。
基本数据类型:byte,short,int,long,float,double,char,boolean
引用数据类型: class,interface,数组
//正确,a+=1,会进行自动类型转换,所以不会报错
byte a=3;
a+=1;
System.out.println (a);
//错误,1的类型是int,a的类型是byte,可以会发生损失,编译期出错
byte a=3;
a=1+a;
System.out.println (a);
位运算符:与或非,异或
逻辑运算符:与或非,&&,||,!
/**
* &:不管前面的条件是否正确,后面都执行
* &&:又称为短路运算符,当前面为false时,后面不会执行
*/
int i = 1;
if(i==2 & i++==2){}
System.out.println(i);
int j=1;
if(j==2 && j++==2){}
System.out.println(j);
异或:相同为0,不同为1
/**
* 2个数字的交换
*/
int a=3;
int b=4;
//使用中间变量
int temp;
temp = a;
a = b;
b = temp;
System.out.println (a+" "+b);
//使用异或,利用3^4^4=3
a = a^b;
b = a^b;
a = a^b;
System.out.println (a+" "+b);
a=a+b;
b=a-b;
a=a-b;
System.out.println (a+" "+b);
循环使用: for,while,do-while
进制转换:将一个数字转换为任意进制的数字
//16进制的转换
public static void main(String[] args){
int num=60;
String str_eight=toEight(num);
System.out.println(str_eight);
String str_two=toTwo(num);
System.out.println(str_two);
String str_hex=toHex(num);
System.out.println(str_hex);
}
public static String toEight(int num){
return "8进制"+trans(num,7,3);
}
public static String toTwo(int num){
return "2进制"+trans(num,1,1);
}
public static String toHex(int num){
return "16进制"+trans(num,15,4);
}
public static String trans(int num,int base,int offset){
//建立表
char [] chs= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'};
//创建临时容器
char [] arr = new char[32];
//创建临时容器的角标
int index = arr.length;
//循环
while(num!=0){
int temp = num & base;
System.out.println (temp);
arr[--index] = chs[temp];
num=num >>> offset;
}
String temp1="";
for(int i = index;i<arr.length;i++){
temp1=temp1+arr[i];
}
return temp1;
}
java基础知识2
jvm内存区划分:
区域 | 作用 | 线程是否私有 |
---|---|---|
程序计数器 | 指向下一条需要执行的字节码指令 | 是 |
虚拟机栈 | java方法执行的区域 | 是 |
本地方法栈 | Native方法执行的区域 | 是 |
堆 | 对象实例存放的区域 | 否 |
方法区 | 常量池和类型的卸载 | 否 |
sun使用的HotSpot虚拟机将虚拟机栈和本地方法栈放在一起,将堆和方法区放在一起实现。
选择排序+冒泡排序+二分查找:设整数数组长度为10,下标0—9
内容 | 思路 |
---|---|
选择排序 | 外层for控制循环次数,内层for查找最小的元素 |
冒泡排序 | 外层for循环控制循环次数,内层for循环控制相邻的两个元素进行比较 |
二分查找 | 针对有序数组,将要查找的值与mid比较,小则表明值在左边,反之亦然 |
//0-arr.length-1
//i+1-arr.length
public static void select1(int[] arr){
for(int i = 0;i < arr.length-1;i++){
for(int j = i + 1;j < arr.length;j++){
if(arr[i]>=arr[j]){
// int temp = arr[i];
// arr[i] = arr[j];
// arr[j] = temp;
swap(arr,i,j);
}
}
}
}
//0-arr.length-1
//0-arr.length-1
//冒泡排序——相邻之间进行比较
public static void select2(int [] arr){
for(int i = 0 ;i < arr.length-1;i++){
for(int j = 0;j<arr.length-1;j++){//角标越界的问题
if(arr[j]>arr[j+1]){
// int temp = arr[j];
// arr[j] = arr[j+1];
// arr[j+1] = temp;
swap(arr,j,j+1);
}
}
}
}
//发现排序方法,位置置换代码重复,进行抽取.
public static void swap(int [] arr ,int a,int b){
int temp = arr[a];
arr[a] = arr [b];
arr[b] = temp;
//代码抽取
}
//
public static int binarySearchKey(int [] arr,int key){
int max,min,mid;
min = 0;
max = arr.length-1;
mid = (min+max)>>1;
while(arr[mid]!=key){
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
if(max < min)
return -1;
mid = (min+max)>>>1;
}
return mid;
}