5、运算符:变量的意义就在于可以进行运算,运算需要用运算符来表示,分为以下几种
1 class test 2 { 3 public static void main(String[] args) 4 { 5 //赋值运算符 =(赋值) +=,-=,*=,/= 6 int a=1234,b; 7 8 /*算数运算符 +(加) -(减) *(乘) /(除) %(取余) ++(自增) --(自减) +(字符串连接) 9 *1、除法运算结果自动转换为int型。10 *2、取余结果的正负取决于被除数11 *3、任何类型变量和 字符串 进行+操作,都是连接操作,结果为字符串类型12 *4、++和--如果在变量前先运算再自增(减);在变量后则相反。这里的先后是在有其他运算时,否则效果相同13 */14 a=a/-1000*1000;15 a=a%333;16 b=++a;17 System.out.println("a="+a);18 /*19 *a+=1==>a=a+1,其他赋值运算类似;20 *但是有一点需要注意:前者是赋值运算,后者是算术运算+赋值运算21 *!!!赋值运算在赋值前会进行类型检测,如果类型内存较高,就会强制类型转换而且进行高位去除22 *!!!而算数运算符在有变量进行计算时不能确定类型,就会使用默认类型23 *!!!总结:两者区别在于前者自动强制转换24 */25 26 /*27 *比较运算符 ==(等于) !=(不等于) >(大于) <(小于) >=(大于等于) <=(小于等于) instanceof(是否是类的对象)28 *运算都有结果,比较运算的结果是true或false,即boolean值。29 */30 System.out.println(3>2);31 32 /*33 *逻辑运算符:用于连接两个boolean类型的表达式34 * &(与,一假则假) |(或,一真则真) !(非,取反) ^(异或,两边不同则真)35 * &&(与,一假则假) ||(或,一真则真)36 *!!!单双&|的区别在于37 *1、后者有短路效果,即当满足判断条件(&时第一个为假,|时第一个为真)时,后面的表达式不进行计算38 *2、&,|还可以用位运算,而&&,||更常用连接boolean表达式39 *40 *41 */42 int c=3;43 System.out.println(c>2&c<5);44 /*45 *!!!异或有一个特点:一个数异或另一个数两次,得到自身值46 *有一个例子就是不用第三个变量交换两变量的值47 */48 c=c^3^3;49 System.out.println("c="+c);50 int d=3,e=5;51 System.out.println("开始时d="+d+",e="+e);52 d=d^e;53 e=d^e;54 d=d^e;55 System.out.println("交换后d="+d+",e="+e);56 57 /*58 *位运算符:用于对数据按位byte进行运算,详见下图59 */60 System.out.println(~6);61 62 /*63 *三元运算符:(条件表达式)?表达式1:表达式264 *条件表达式结果为真,运算结果为表达式1;否则为表达式2。65 */66 67 }68 }
6、语句:所有语言都只包含三种结构的语句,顺序结构、选择结构、循环结构。这三种结构控制着程序的流程
1 class test 2 { 3 public static void main(String[] args) 4 { 5 //循环结构就是一条条语句从上到下排列,一条语句以;结束。 6 7 /* 8 *选择结构是将条件表达式的值进行判断,如果为真则执行指定语句,(否则执行另一部分语句) 9 *有if和switch两种:10 *if用于 1、对具体值判断,2、对区间判断,3、对boolean类型表达式判断11 *switch用于1、对具体值判断,2、值的个数确定(非区间)3、12 */13 int a=3;14 if(a>5){15 System.out.println("a大于5");16 }else if(a>3){17 System.out.println("a小于5但大于3");18 }else{19 System.out.println("a小于3");20 }21 /*1、switch代码块中的顺序没有关系,但是执行时会先按顺序执行case语句,最后执行default语句22 *2、break用于结束case语句和default语句,如果在}之前省略,后面还有代码,即使已经正确,23 * 还是会向后执行直到break或者}24 */25 switch(a){26 default:27 System.out.println("a非1,3,5");break;28 case 3:29 System.out.println("a等于3");30 case 1:31 System.out.println("a等于1");break;32 case 5:33 System.out.println("a等于5");break;34 }35 36 /*37 *循环结构:while,do...while,for38 *需要控制:1、循环条件,2、循环体。39 *格式见下图40 *!!!for和while的区别在于:41 *for中的初始化表达式中可以进行变量定义,而且这个变量只在循环内部有效42 *while中则只能用外部定义的变量,所以循环之后不能销毁,如果只用一次会浪费内存43 */44 45 //上面的语句可以嵌套使用46 47 /*48 *Java的代码是保存在代码块中的,即{}之中,最简单是下面这种单独的代码块49 *还有就是上面依附在if,switch,while之后的代码块,依附在函数/类之后的代码块50 *!!!代码块在遇到和开始的{对应的}时就会将生成的变量空间释放,即销毁变量51 *所以代码块内可以访问外部代码块中的变量,但是外部不能访问内部变量。52 *!!!并且注意代码块内部同样不能重复前面定义过的变量,但是可以在其后重新使用该变量标识。53 *54 *由于用后即销毁的特性,可以节省内存,如果当变量只用一次时可以节约空间,因为Jvm内存有限。55 */56 {57 int i=2;58 System.out.println("i="+i);59 }60 int i=3;61 System.out.println("i="+i);62 63 }64 }
1 public class test { 2 public static void main(String[] args){ 3 int n=0,a=1,b=100; 4 while(a =x;y--){22 System.out.print(y);23 }24 System.out.println();25 }26 27 //倒三角形,可以看做两个三角形的组合,一个由空格组成,就是效果中的-,另一个是*空格构成28 for(int x=1;x<=5;x++){29 for(int y=1;y
7、函数:Java中的函数都是在类内,也就是类的方法。简介如下
1 public class Function { 2 //!!!注意Java中不允许嵌套函数。 3 4 //main函数没有返回值,用void标示,即空,这是特殊的返回值。可以用return;来结束函数块,也可以直接省略 5 public static void main(String[] args){ 6 int a=3,b=4,c; 7 c=add(a,b); 8 System.out.println(c); 9 draw(2,2);10 }11 12 /*!!!需要注意的几点13 * 1、这里有一点需要注意:就是由static修饰的函数调用的函数必须也要用static修饰,稍后解释14 * !!!2、函数的参数就相当于函数代码块的局部变量,初始化过程在调用时进行,当函数块结束局部变量消失15 * !!!而且Java中不允许普通变量的引用传递(即&a的使用方式);只能传值赋值,即将值复制一份赋值16 * !!!引用和传值的区别是:只要引用的关系存在,变量就不会消失17 * 3、函数封装一定要明确要求,不要过度操作,像下面如果只要和的返回值,就不要输出。18 */19 static int add(int a,int b){20 return a+b;21 }22 23 /*24 * 同一个类中,变量标识符不能多次使用,但是函数标识符可以,只要满足下面条件即可25 * 1、参数个数不同,2、参数类型不同26 * !!!注意是判断参数而不是返回值27 * 称为函数重载。Java会自动判断应该调用那个函数。28 */29 static int add(int a,int b,int c){30 return a+b+c;31 }32 33 static void draw(int a,int b){34 if(a<=1||b<=1){35 System.out.println("不能构成矩形!");36 return;37 }38 for(int x=1;x<=a;x++){39 System.out.print("*");40 }41 System.out.println();42 if(b>2){43 for(int z=1;z<=b-2;z++){44 System.out.print("*");45 for(int y=1;y<=a-2;y++){46 System.out.print(" ");47 }48 System.out.print("*");49 System.out.println();50 }51 }52 for(int x=1;x<=a;x++){53 System.out.print("*");54 }55 }56 57 }
8、数组:下图为简介。注意数组也是对象。
1 public class array { 2 public static void main(String[] args){ 3 //main函数的参数就是字符串数组类型的,值是通过Java。exe运行时传入的 4 //System.out.println(args[0]); 5 6 /*数组的 定义有三种格式:其中[]为数组标识 7 * 1、元素类型[] 数组名=new 元素类型[数组单元个数]; 8 * 2、元素类型[] 数组名=new 元素类型[]{值1,,值2,。。。}; 注意不能再][]中标明数组个数 9 * 3、元素类型[] 数组名={值1,,值2,。。。};10 */11 int[] arr={1,2,3};12 13 /*定义数组的主要目的就是 存/取 值14 * 存值可以使用上面的2,3两种方式,也可以在定义后,通过 角标 来保存值15 * 取值只能通过 角标 来进行,取值的一个常用操作就是遍历,通过循环控制角标来实现,16 * 数组的角标是从0开始的17 */18 arr[2]=5;19 for(int i=0;i
1 public class arrayFunction { 2 public static void main(String[] args){ 3 /*数组常见操作: 4 * 1、获取最大/小值 5 * 2、数组排序 6 * 3、折半查找(二分查找) 7 */ 8 int[] arr={123,2345,31,353,1,35,8111}; 9 int max=getMax(arr); 10 System.out.println(max); 11 //Arrays.sort(arr); 12 bubbleSort4(arr); 13 for(int i=0;iarr[i]?max:arr[i]; 25 } 26 return max; 27 } 28 29 30 /*选择排序:就是选择所有数中最小(大)值和最左端值交换;循环执行直到最后一个数 31 * 和获取最大小值的不同点是需要知道该值的角标来进行交换操作 32 */ 33 public static void selectSort(int[] arr){ 34 for(int i=0;i arr[j]){ 38 min=arr[j]; 39 min_index=j; 40 } 41 } 42 if(min_index!=i){ 43 swap(arr,min_index,i); 44 } 45 } 46 } 47 //冒泡排序:就是从左到右两两进行比较,大数放左,小数放右。最简单的是循环数组长度次,必然可以完全排序 48 public static void bubbleSort1(int[] arr){ 49 for(int i=0;i 0); 98 } 99 //交换数组单元100 public static void swap(int[] arr,int a,int b){101 int temp=arr[a];102 arr[a]=arr[b];103 arr[b]=temp;104 }105 106 107 /*查找操作:108 * 109 */110 public static int getIndex(int[] arr,int value){111 for(int i=0;i =0,常用-1117 return -1;118 }119 //二分法查找:数组单元值必须按顺序排列120 public static int getIndex2(int[] arr,int value){121 int min_index=0,max_index=arr.length-1,mid_index=(min_index+max_index)/2;122 if(value value){127 max_index=mid_index-1;128 }else{129 min_index=mid_index+1;130 }131 if(arr[min_index] value){132 return -1;133 }134 mid_index=(min_index+max_index)/2;135 }136 return mid_index;137 }138 }
public class ArrayFunction{ public static void main(String[] args){ int a=60; toOctal(a); } public static void toHex(int num){ char[] arr=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}, arr1=new char[8]; int len=arr1.length,newnum=0,i=0; /*注意下面程序中for和while循环的不同 for(int i=0;i>>=4; } } */ while(num!=0){ newnum=num&15; arr1[i++]=arr[newnum]; num>>>=4; } for(int j=len-1;j>=0;j--){ if(arr1[j]=='\u0000') continue; System.out.print(arr1[j]); } } //这个函数是从上面总结出来的,因为只需要修改一小部分内容,所有进制转换都可以通过该函数实现, public static void trans(int num,int base,int offset){ char[] arr=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}, arr1=new char[8]; int len=arr1.length,newnum=0,i=0; while(num!=0){ newnum=num&base; arr1[i++]=arr[newnum]; num>>>=offset; } for(int j=len-1;j>=0;j--){ if(arr1[j]=='\u0000') continue; System.out.print(arr1[j]); } } public static void toHex2(int num){ trans(num, 15, 4); } public static void toBinary(int num){ trans(num, 1, 1); } public static void toOctal(int num){ trans(num, 7, 3); } }
题外话:Java内存划分(简单版,详细后叙)
1、寄存器区
2、本地方法区
3、方法区
4、栈内存:保存局部变量,特点是一旦作用域结束,局部变量消失,所以栈区刷新很快,很少有垃圾
5、堆内存: