• 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、堆内存:

  • 相关阅读:
    微信小程序HTTPS
    微信商城-1简介
    va_list
    Event log c++ sample.
    EVENT LOGGING
    Analyze Program Runtime Stack
    unknow table alarmtemp error when drop database (mysql)
    This application has request the Runtime to terminate it in an unusual way.
    How to check if Visual Studio 2005 SP1 is installed
    SetUnhandledExceptionFilter
  • 原文地址:https://www.cnblogs.com/songfeilong2325/p/4370337.html
Copyright © 2020-2023  润新知