zoukankan      html  css  js  c++  java
  • 2019-05-23 java学习日记

    静态static注意事项

     在静态方法中是没有this关键字的

    1,静态是随着类的加载而加载,this是随着对象的创建而存在。

    2,静态比对象先存在。

    静态方法只能访问静态的成员变量和静态的成员方法 

    静态方法:

     成员变量:只能访问静态变量
     成员方法:只能访问静态成员方法

     非静态方法: 

    成员变量:可以是静态的,也可以是非静态的
    成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
     

    简单记:

     静态只能访问静态。

    例子:

     1 class Demo2_Static {
     2     public static void main(String[] args) {
     3         //Demo d = new Demo();
     4         //d.print1();
     5         //Demo d = new Demo();
     6         //System.out.println(d.num1);
     7         System.out.println(Demo.num1);
     8         //Demo.print2();
     9     }
    10 }
    11 
    12 class Demo {
    13     int num1 = 10;                    //非静态的成员变量
    14     static int num2 = 20;                //静态的成员变量
    15 
    16     /*public void print1() {            
    17 //非静态的成员方法,既可以访问静态的成员也可以访问非静态的
    18         System.out.println(num1);
    19         System.out.println(num2);
    20     }*/
    21     public static void print2() {        //静态的成员方法
    22         //System.out.println(this.num1);
    23 //静态的成员方法不能访问非静态的,错误: 无法从静态上下文中引用非静态变量num1
    24         System.out.println(num2);
    25     }
    26 }

     静态变量和成员变量的区别

    静态变量也叫类变量  成员变量也叫对象变量

    所属不同:

      静态变量属于类,所以也称为类变量

      成员变量属于对象,所以也称为实例变量(对象变量)

    内存中位置不同:

      静态变量存储于方法区的静态区

      成员变量存储于堆内存

    内存出现时间不同:

      静态变量随着类的加载而加载,随着类的消失而消失

      成员变量随着对象的创建而存在,随着对象的消失而消失

    调用不同:

      静态变量可以通过类名调用,也可以通过对象调用

      成员变量只能通过对象调用

    public static void main(String[] agrs){}

    public : 被jvm调用,所以权限要足够大
    static : 被jvm调用,不需要创建对象,直接类名.调用即可
    void : 被jvm调用,不需要有任何的返回值
    main : 只有这样写才能被jvm识别,
    main不是关键字
    String[] args : 以前是用来接收键盘录入的,现在用Scanner键盘录入

    注:这里唯一能改的就是agrs,它就是一个变量名,是参数是意思,
    以前是用argument,但是嫌太长了,于是变改成了args。

     如果一个类中的所有方法都是静态的,那么就多做一步,把构造方法私有化,
    目的是不让其他类创建本类对象。

    例子:做一个包含获取数组最大值,数组的遍历以及数组的反转的数组工具类以及说明书。

     1 /**
     2 
     3 这是一个数组工具类,里面封装了查找数组最大值,打印数组,数组反转的方法
     4 
     5 @author fengjia
     6 
     7 @version v1.0
     8 
     9 */
    10 
    11 public class ArrayTool {
    12 
    13     //如果一个类中所有的方法都是静态的,需要再多做一步,私有构造方法,目的是不让其他类创建本类对象
    14 
    15     //直接用类名.调用即可
    16 
    17     /**
    18 
    19     私有构造方法
    20 
    21     */
    22 
    23     private ArrayTool(){} //设计模式:单例模式
    24 
    25     //1,获取最大值
    26     
    27     /**
    28     这是获取数组中最大值的方法
    29     @param arr 接收一个int类型数组
    30     @return 返回数组中最大值
    31     */
    32     public static int getMax(int[] arr) {
    33         int max = arr[0];                //记录第一个元素
    34         for (int i = 1;i < arr.length ;i++ ) {    //从第二个元素开始遍历
    35             if (max < arr[i]) {            //max与数组中其他的元素比较
    36                 max = arr[i];            //记录住较大的
    37             }
    38         }
    39     
    40         return max;                    //将最大值返回
    41     }
    42     //2,数组的遍历
    43     /**
    44     这是遍历数组的方法
    45     @param arr 接收一个int类型数组
    46     */
    47     public static void print(int[] arr) {
    48         for (int i = 0;i < arr.length ;i++ ) {    //遍历数组
    49             System.out.print(arr[i] + " ");
    50         }
    51     }
    52     //3,数组的反转
    53     /**
    54     这是数组反转的方法
    55     @param arr 接收一个int类型数组
    56     */
    57     public static void revArray(int[] arr) {
    58         for (int i = 0;i < arr.length / 2 ;i++ ) {    
    59                 //循环次数是元素个数的一半
    60             /*
    61             arr[0]与arr[arr.length-1-0]    交换
    62             arr[1]与arr[arr.length-1-1]    交换
    63             arr[2]与arr[arr.length-1-2] 交换
    64             */
    65             int temp = arr[i];
    66             arr[i] = arr[arr.length-1-i];
    67             arr[arr.length-1-i] = temp;
    68         }
    69     }
    70 
    71 }
    72 
    73 class Demo1_ArrayTool {
    74 
    75     public static void main(String[] args) {
    76 
    77         int[] arr = {33,11,22,66,55,44};
    78 
    79         /*ArrayTool at = new ArrayTool();
    80 
    81         int max = at.getMax(arr);                //获取最值
    82 
    83         System.out.println(max);        
    84 
    85         System.out.println("---------------");
    86         at.print(arr);                            //打印
    87         System.out.println();
    88         System.out.println("---------------");
    89         System.out.println("反转后:");
    90         at.revArray(arr);                        //反转
    91         at.print(arr);    */
    92     
    93         ArrayTool.print(arr);
    94     }
    95 
    96 }
    例子

    Math.random()方法会生成大于等于0.0并且小于1.0的伪随机数

     1 class Demo2_Math {
     2 
     3     public static void main(String[] args) {
     4 
     5         //double d = Math.random();
     6 
     7         //System.out.println(d);        
     8 
     9         //Math.random()会生成大于等于0.0并且小于1.0的伪随机数
    10         for (int i = 0;i < 10 ;i++ ) {
    11             System.out.println(Math.random());
    12         }
    13     
    14         //生成1-100的随机数
    15         //Math.random()0.0000000 - 0.999999999
    16         //Math.random() * 100 ====> 0.00000 - 99.999999999
    17         //(int)(Math.random() * 100) ====> 0 - 99
    18         //(int)(Math.random() * 100) + 1
    19     
    20         for (int i = 0;i < 10 ;i++ ) {
    21             System.out.println((int)(Math.random() * 100) + 1);
    22         }
    23     }
    24 
    25 }
    例子
  • 相关阅读:
    POJ 3630 Phone List/POJ 1056 【字典树】
    HDU 1074 Doing Homework【状态压缩DP】
    POJ 1077 Eight【八数码问题】
    状态压缩 POJ 1185 炮兵阵地【状态压缩DP】
    POJ 1806 Manhattan 2025
    POJ 3667 Hotel【经典的线段树】
    状态压缩 POJ 3254 Corn Fields【dp 状态压缩】
    ZOJ 3468 Dice War【PD求概率】
    POJ 2479 Maximum sum【求两个不重叠的连续子串的最大和】
    POJ 3735 Training little cats【矩阵的快速求幂】
  • 原文地址:https://www.cnblogs.com/Sherwin-liao/p/10912530.html
Copyright © 2011-2022 走看看