zoukankan      html  css  js  c++  java
  • Java学习笔记二.2

    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:表达式2
    64          *条件表达式结果为真,运算结果为表达式1;否则为表达式2。
    65         */
    66 
    67     }
    68 }
    Java运算符

    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,for
    38          *需要控制: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 }
    Java流程控制
     1 public class test {
     2     public static void main(String[] args){
     3         int n=0,a=1,b=100;
     4         while(a<b){
     5             if(a%6==0){
     6                 n+=1;
     7             }
     8             a++;
     9         }
    10         System.out.println(n);
    11         
    12         for(int x=1;x<=9;x++){
    13             for(int y=1;y<=x;y++){
    14                 //	是转义字符 制表符,制表符的效果就是 对其显示
    15                 System.out.print(y+"*"+x+"="+(x*y)+"	");
    16             }
    17             System.out.println();
    18         }
    19         
    20         for(int x=1;x<=5;x++){
    21             for(int y=5;y>=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<x;y++){
    30                 System.out.print('-');
    31             }
    32             for(int z=x;z<=5;z++){
    33                 System.out.print("* ");
    34             }
    35             System.out.println();
    36         }
    37     }
    38 }
    Java循环测试

         

     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 }
    Java函数

    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<arr.length;i++){
    20             System.out.println(arr[i]);
    21         }
    22     }
    23 }
    数组
      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;i<arr.length;i++){
     14             System.out.println(arr[i]);
     15         }
     16         int [] arr1={123,234,345,456,567,678};
     17         int a=getIndex2(arr1,45);
     18         System.out.println(a);
     19     }
     20     
     21     public static int getMax(int[] arr){
     22         int max=arr[0];
     23         for(int i=1;i<arr.length;i++){
     24             max=max>arr[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.length;i++){
     35             int min=arr[i],min_index=i;
     36             for(int j=i+1;j<arr.length;j++){
     37                 if(min>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<arr.length;i++){
     50             for(int j=0;j<arr.length-1;j++){
     51                 if(arr[j]<arr[j+1]){
     52                     swap(arr,arr[j],arr[j+1]);
     53                 }
     54             }
     55         }
     56     }
     57     //下面是冒泡排序的优化(for和while实现),即用一个标志来记录是否某次循环中进行了换位,如果没有表示完全排序,程序可以结束.
     58     public static void bubbleSort2(int[] arr){
     59         for(int i=0;i<arr.length;i++){
     60             boolean flag=false;
     61             for(int j=0;j<arr.length-1;j++){
     62                 if(arr[j]<arr[j+1]){
     63                     swap(arr,arr[j],arr[j+1]);
     64                     flag=true;
     65                 }
     66             }
     67             if(flag==false)
     68                 return;
     69         }
     70     }
     71     public static void bubbleSort3(int[] arr){
     72         boolean flag=true;
     73         while(flag){
     74             flag=false;
     75             for(int j=0;j<arr.length-1;j++){
     76                 if(arr[j]<arr[j+1]){
     77                     swap(arr,arr[j],arr[j+1]);
     78                     flag=true;
     79                 }
     80             }
     81         }
     82     }
     83     //这是冒泡算法的进一步优化,用flag标记进行转换的最大角标,之后的数已经排好了可以不进行下一轮排序
     84     public static void bubbleSort4(int[] arr){
     85         int k,flag=arr.length;
     86         do{
     87             k=flag;
     88             flag = 0;
     89                 for (int j = 0; j<k-1; j++)
     90                     if (arr[j] < arr[j+1])
     91                     {
     92                         int temp=arr[j];
     93                         arr[j]=arr[j+1];
     94                         arr[j+1]=temp;
     95                         flag = j+1;
     96                     }
     97         }while(flag>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<arr.length;i++){
    112             if(arr[i]==value){
    113                 return i;
    114             }
    115         }
    116         //这里返回-1是因为规定返回值类型为int,如果没有找到该单元,则上面没有返回值,而此处的数必须为负数,因为角标为>=0,常用-1
    117         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<arr[min_index]||value<arr[max_index]){
    123             return -1;
    124         }
    125         while(arr[mid_index]!=value){
    126             if(arr[mid_index]>value){
    127                 max_index=mid_index-1;
    128             }else{
    129                 min_index=mid_index+1;
    130             }
    131             if(arr[min_index]<value&arr[max_index]>value){
    132                 return -1;
    133             }
    134             mid_index=(min_index+max_index)/2;
    135         }
    136         return mid_index;
    137     }
    138 }
    Java数组常用操作
    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<len;i++){
                if(num!=0){
                    newnum=num&0xf;
                    arr1[i]=arr[newnum];
                    num>>>=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数组实例-进制转换

    题外话:Java内存划分(简单版,详细后叙)

    1、寄存器区

    2、本地方法区

    3、方法区

    4、栈内存:保存局部变量,特点是一旦作用域结束,局部变量消失,所以栈区刷新很快,很少有垃圾

    5、堆内存:

  • 相关阅读:
    Bete冲刺第二阶段
    Beta版本冲刺计划及安排
    Bete冲刺第一阶段
    软件工程实践总结
    用户试用体验报告
    Bata版本冲刺计划及安排
    scrum阶段总结
    关于 微软必应词典客户端 的案例分析
    第三次结对编程
    结对项目之需求分析与原型模型设计
  • 原文地址:https://www.cnblogs.com/songfeilong2325/p/4370337.html
Copyright © 2011-2022 走看看