Java基础静态变量、静态方法

来源:互联网 发布:网络卫生直报平台 编辑:程序博客网 时间:2024/06/09 19:02
  • 编写带参方法计算两门课程考试成绩的平均分,通过方法的参数传入成绩信息
public class HelloWorld {    public static void main(String[] args) {        // 创建对象,对象名为hello        HelloWorld hello = new HelloWorld();        // 调用方法,传入两门课程的成绩        hello.calcAvg(94, 81);    }    /*     * 功能:计算两门课程考试成绩的平均分并输出平均分     * 定义一个包含两个参数的方法,用来传入两门课程的成绩     */    public void calcAvg(int a,int b){         double avg=0;        // avg = (a + b)/2; //结果是87.0         avg = (a + b)/2.0; // 结果是87.5         System.out.println("平均成绩"+avg);     }

output:平均成绩87.5


Q:将考试成绩排序并输出,返回成绩的个数

import java.util.Arrays;public class HelloWorld {    public static void main(String[] args) {        HelloWorld hello = new HelloWorld();        int[] scores={79,52,98,81};        //调用方法,传入成绩数组,并获取成绩的个数        int count= hello.sort(scores);        System.out.println("共有"+count+"个成绩信息!");    }    /*     * 功能:将考试成绩排序并输出,返回成绩的个数     * 定义一个包含整型数组参数的方法,传入成绩数组     * 使用Arrays类对成绩数组进行排序并输出     * 方法执行后返回数组中元素的个数     */    public int sort(  int [] scores   ){        Arrays.sort(scores);        System.out.println(Arrays.toString(scores));        //返回数组中元素的个数        return scores.length;    }}

output:
[52, 79, 81, 98]
共有4个成绩信息!

debug:注意数组参数 int [] scores


  • Java 重载

  • 判断Java重载的重要依据

    1. 必须在同一个类中
    2. 方法名相同
    3. 方法参数的个数、顺序、类型不同
    4. 与方法的修饰符或返回值没有关系
public class HelloWorld {    public static void main(String[] args) {        // 创建对象        HelloWorld hello = new HelloWorld();        // 调用无参的方法        hello.print();        // 调用带有一个字符串参数的方法        hello.print("name");        // 调用带有一个整型参数的方法        hello.print(15);    }    public void print() {        System.out.println("无参的print方法");    }    public void print(String name) {        System.out.println("带有一个字符串参数的print方法,参数值为:" + name);    }    public void print(int age) {        System.out.println("带有一个整型参数的print方法,参数值为:" + age);    }}

output:
无参的print方法
带有一个字符串参数的print方法,参数值为:name
带有一个整型参数的print方法,参数值为:15


Q:编写一个JAVA程序,创建指定长度的 int 型数组,并生成 100 以内随机数为数组中的每个元素赋值,然后输出数组
要求:
1、 要求通过定义带参带返回值的方法来实现
2、 通过参数传入数组的长度(例如长度为 8),方法执行后返回赋值后的数组
3、 通过 (int)(Math.random() * 100) 生成 100 以内的随机数
注:Math 类是用于进行算术操作的类,Math.random() 生成 0–1 的浮点数。 关于该类的其他应用在后面章节会有详细介绍,先熟悉随机数方法的使用~~
运行效果为: [ 2 , 52 , 8 , 26 , 66 , 32 , 98 , 0 ]

//导入java.util.Arrays;import java.util.Arrays;public class HelloWorld {    public static void main(String[] args) {         // 创建对象,对象名为hello        HelloWorld hello = new HelloWorld();        // 调用方法并将返回值保存在变量中        int[] nums = hello.getArray(8);        // 将数组转换为字符串并输出        System.out.println(Arrays.toString(nums));     }    /*     * 功能:创建指定长度的int型数组,并生成100以内随机数为数组中的每个元素赋值     * 定义一个带参带返回值的方法,通过参数传入数组的长度,返回赋值后的数组     */    public int[] getArray(int length) {        // 定义指定长度的整型数组        int[] nums = new int[length];        // 循环遍历数组赋值        for (int i=0;i<nums.length;i++  ) {            // 产生一个100以内的随机数,并赋值给数组的每个成员        nums[i]=(int) (Math.random()*100);        }        return nums; // 返回赋值后的数组    }}

output:
[40, 51, 97, 33, 81, 75, 32, 75]


Q:编写一个 JAVA 程序,实现输出考试成绩的前三名
要求:
1、 考试成绩已保存在数组 scores 中,数组元素依次为 89 , -23 , 64 , 91 , 119 , 52 , 73
2、 要求通过自定义方法来实现成绩排名并输出操作,将成绩数组作为参数传入
3、 要求判断成绩的有效性( 0—100 ),如果成绩无效,则忽略此成绩

import java.util.Arrays;public class HelloWorld {    //完成 main 方法    public static void main(String[] args) {        int [] scores = { 89 , -23 , 64 , 91 , 119 , 52 , 73};        System.out.println("考试前三名的成绩:");        HelloWorld hello = new HelloWorld();         hello.grade(scores);    }    //定义方法完成成绩排序并输出前三名的功能    public void grade(int [] scores){        // 线进行排序        Arrays.sort(scores);        int count=0;        // 使用for循环打印前三名的成绩        for(int i=scores.length-1;i>=0;i--){            // 如果分数是0到100继续          if(scores[i]<0 || scores[i]>100){                continue;            }            count++;    // 数据记录加1        if(count>3){              break;            }            System.out.println(+scores[i]);        }     }}

output:
考试前三名的成绩:
91
89
73


构造方法:
当我们有了有参数的构造方法之后,就不能继续调用无参数的构造方法。
有参数构造方法的一个好处,处理传值时的安全问题。因为我可以给一个默认的值给它,通过if语句判断,然后默认赋一个值。

静态成员变量:static 字符定义静态变量,静态变量在创建时就会分配存储空间,只有该类被写在时才会垃圾回收处理。
- 建议通过类名来访问

public class HelloWorld {    // 定义静态变量,保存班级名称        static   String className = "JAVA开发一班";    public static void main(String[] args) {        // 访问静态变量,输出班级名称        System.out.println(HelloWorld.className  );    }}

output:JAVA开发一班


  • 静态方法:
    1. 在静态方法中,可以直接调用静态变量,
public class HelloWorld {    static String name="imooc"; // 在类中定义静态变量    public static void main(String[]args){     System.out.println(HelloWorld.name);       }}

output:
imooc
2. 但是不能调用非静态变量,如果要调用静态变量,申请类对象,然后通过对象调用。
3. 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量

public class HelloWorld {    String china = "我爱中国";    String hobby = "Imok";    static String name="imooc"; // 在类中定义静态变量    public static void main(String[]args){    // System.out.println(HelloWorld.name);       HelloWorld hello = new HelloWorld();    hello.print();    }    public void print(){        System.out.println(name); // 在普通成员方法中直接调用静态变量        System.out.println(china); // 在普通成员方法中直接调用非静态变量        System.out.println(hobby); // 在普通成员方法中直接调用非静态变量    }}
  • Q
public class HelloWorld {    // 定义静态变量score1    static int score1 = 86;    // 定义静态变量score2    static int score2 = 92;     // 定义静态方法sum,计算成绩总分,并返回总分    public  static   int sum( ) {      return score1 + score2; // 在静态方法中直接使用静态变量    }    public static void main(String[] args) {        // 调用静态方法sum并接收返回值        int allScore = HelloWorld.sum();        System.out.println("总分:" + allScore);    }}

  • java 静态变量初始化
    static 静态初始化,静态初始化只在类加载时执行,且只会执行一次,同时静态初始化只能给静态变量赋值,不能初始普通成员的变量。
public class HelloWorld {    int num1;   // 声明变量num1    int num2;   // 声明变量num2    static int num3; //声明变量num3    public HelloWorld(){        num1 = 91;        System.out.println("通过构造方法为变量num1赋值");    }    { // 初始化块        num2 = 91;        System.out.println("通过初始化块为变量num2赋值");    }    static { // 静态初始化块        num3 = 95;        System.out.println("通过静态块为变量num3赋值");    }    public static void main(String[]args){   HelloWorld hello = new HelloWorld(); // 创建类对象   System.out.println(hello.num1);   System.out.println(hello.num2);   System.out.println(num3);    HelloWorld hello2 = new HelloWorld(); // 创建类对象hello2,初始化块再次执行    }}

output:
run:
通过静态块为变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
91
91
95
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
BUILD SUCCESSFUL (total time: 0 seconds)


public class HelloWorld {    String name; // 声明变量name    String sex; // 声明变量sex    static int age;// 声明静态变量age    // 构造方法    public   HelloWorld     () {         System.out.println("通过构造方法初始化name");        name = "tom";    }    // 初始化块    {         System.out.println("通过初始化块初始化sex");        sex = "男";    }    // 静态初始化块      static      {         System.out.println("通过静态初始化块初始化age");        age = 20;    }    public void show() {        System.out.println("姓名:" + name + ",性别:" + sex + ",年龄:" + age);    }    public static void main(String[] args) {        // 创建对象        HelloWorld hello = new HelloWorld();        // 调用对象的show方法        hello.show();    }}

output:
通过静态初始化块初始化age
通过初始化块初始化sex
通过构造方法初始化name
姓名:tom,性别:男,年龄:20


  • Java封装实现步骤
    1. 设置数据变量的访问属性,private
    2. 通过getter/setter方法,用于属性的读取
    3. 在getter/setter方法中加入属性控制语句,判断合法性
    4. get方法名通常为get加上属性关键字
public class HelloWorld {    public static void main(String[]args){       Phone iphone = new Phone(); // 一个无参构造方法实例对象iphone    iphone.setScreen(6.0f); // 通过封装的方法赋值    // 通过get方法方法获取属性System.out.println(iphone.getScreen());    }   }---public class Phone {    private float screen;    public float  getScreen(){return screen;}public void setScreen (float newScreen){ // 不需要返回类型,需要参数传值screen = newScreen;}}

output:
run:
6.0
BUILD SUCCESSFUL (total time: 0 seconds)


封装就是隐藏属性,只能通过特定方法访问属性

  • java包的作用
    1. 管理Java文件
    2. 解决同名冲突
  • 定义包:package.包名(建议全部为小写字母)
  • 访问修饰符
    1. private 同类
    2. 默认 同类
    3. protect 同类 子类
    4. public 任意位置
  • Java this关键字
    1. 本类中的对象引用
    2. this.属性,调用成员变量。this.方法,调用类成员方法。什么时候使用,当成员变量被局部变量或者参数覆盖的时候,使用this关键字明确引用的是成员变量还是局部变量,还是参数。
0 0
原创粉丝点击