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 }
    例子
  • 相关阅读:
    @configuration 和 @bean
    js中关键字 const , let , var 的用法区别
    springboot+vue项目demo地址
    快速开发框架下载地址(github)
    搭建vue项目并启动vue项目
    export default{} 和 new Vue()都是什么意思
    反向代理
    [转]python类方法
    linux中waitpid及wait的用法
    mount
  • 原文地址:https://www.cnblogs.com/Sherwin-liao/p/10912530.html
Copyright © 2011-2022 走看看