构造方法+static关键字+Math

一.构造方法

1.概述

创建对象时,给对象中的成员进行初始化

2.特点

方法名与类名相同
没有返回值类型,连void也没有
没有具体的返回值

3.注意事项

如果没有给出构造方法,系统将提供一个无参数的构造方法
如果写出了有参数的构造方法,系统将不再提供无参数的构造方法

4.赋值方式

在写出了全参数和无参数的构造方法后(即构造方法的重载),给成员变量赋值的两种方式
	如果这个时候我们给出了有参数构造方法,系统将不再提供默认的无参构造方法。
	这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法
1)setXxx()方法
2)构造方法

案例:

package org.westos.demo;

public class MyTest2 {
    public static void main(String[] args) {
            Person person=new Person();
            //通过get,set方法来设置值
            person.setName("李四");
            person.setAge(18);
            System.out.println(person.getAge());//18
            System.out.println(person.getName());//李四
            person.show();//李四   18
        System.out.println("=========================");

        //通过构造方法来设置值
        Person person2=new Person("王五",88);
        System.out.println(person2.getAge());//88
        System.out.println(person2.getName());//王五
        person2.show();//王五  88
    }
}

class Person{
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void show(){
        System.out.println(name);
        System.out.println(age);
    }

}

案例一:
定义一个长方形(Rectangle)类,定义求周长(length)和面积(area)的方法,
然后定义一个测试类Test,进行测试。

package org.westos.demo;


import java.util.Scanner;

//定义一个长方形(Rectangle)类,定义求周长(length)和面积(area)的方法,
//			然后定义一个测试类Test,进行测试。
public class MyTest {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入宽");
        int i = sc.nextInt();
        System.out.println("请输入高");
        int j = sc.nextInt();
        Rectangle r=new Rectangle();
        System.out.println(r.getLength(i,j));
        System.out.println(r.getArea(i,j));
    }
}

class Rectangle{
    public int getLength(int width,int hight){
        return (width+hight)*2;
    }
    public int getArea(int width,int hight){
        return width*hight;
    }
}

案例二:
定义一个员工(Employee)类,自己分析出几个成员,然后给出成员变量,构造方法,getXxx()/setXxx()方法,以及一个显示所有成员信息的方法。并测试。

错误示例:
这里错在成员变量与局部变量重名,get和set方法打印完之后就弹栈了,所以set方法并没有改变值

package org.westos.demo;
//定义一个员工(Employee)类,自己分析出几个成员,然后给出成员变量,构造方法,getXxx()/setXxx()方法,
//			  以及一个显示所有成员信息的方法。并测试。
public class MyTest2 {
    public static void main(String[] args) {
        Emploee e=new Emploee("张三",29);
        e.getId();//29
        e.getName();//张三

        e.show();//张三  29

        System.out.println("==========================");
        e.setId(2);
        e.setName("李四");

        e.getId();//29
        e.getName();//张三
        e.show();//张三   29

    }
}

class Emploee{
    String name;
    int id;
    public Emploee(){
    }
    public Emploee(String name,int id){
        this.name=name;
        this.id=id;
    }
    public void getName(){
        System.out.println(name);
    }
    public String setName(String name){
        return  name;
    }
    public void getId(){
        System.out.println(id);
    }
    public int setId(int id){
        return id;
    }
    public void show(){
        System.out.println(name);
        System.out.println(id);
    }
}


正确示例:

package org.westos.demo;

public class MyTest3 {
    public static void main(String[] args) {
        //定义一个员工(Employee)类,自己分析出几个成员,然后给出成员变量,构造方法,getXxx()/setXxx()方法,
        //		  以及一个显示所有成员信息的方法。并测试。

        Employee e=new Employee("张三",29);
        e.getId();//29
        e.getName();//张三

        e.show();//张三  29

        System.out.println("==========================");
        e.setId(2);
        e.setName("李四");

        e.getId();//2
        e.getName();//李四
        e.show();//李四   2
    }
}
class Employee{
    String name;
    int id;
    public Employee(){
    }
    public Employee(String name,int id){
        this.name=name;
        this.id=id;
    }
    public void getId(){
        System.out.println(id);
    }
    public void setId(int id){
        this.id=id;
    }
    public void getName(){
        System.out.println(name);
    }
    public void setName(String name){
        this.name=name;
    }

    public void show(){
        System.out.println(name);
        System.out.println(id);
    }
}

二.static关键字

1.概述:

1. static:静态的,可以修饰成员变量也可以修饰成员方法
2. static修饰成员变量,此变量就作为一个共享变量,位于方法区中,会被该类的所有对象共享

案例:

package org.westos.demo;

public class MyTest4 {
    public static void main(String[] args) {
        Person p1=new Person();
        p1.name="张三";
        p1.age=28;

        Person p2=new Person();
        p2.name="李四";
        p2.age=38;

        Person p3=new Person();
        p3.name="王五";
        p3.age=48;
        System.out.println(p1.name);//张三
        System.out.println(p1.age);//48
        System.out.println("===========");
        System.out.println(p2.name);//李四
        System.out.println(p2.age);//48
        System.out.println("============");
        System.out.println(p3.name);//王五
        System.out.println(p3.age);//48
    }
}

class Person {
    public String name;
    //1. static:静态的,可以修饰成员变量也可以修饰成员方法
    //2. static修饰成员变量,此变量就作为一个共享变量,位于方法区中,会被该类的所有对象共享
    public static int age=18;
}

2.带static对象的内存图

在这里插入图片描述

3. static关键字的特点

(1)随着类的加载而加载
(2)优先于对象存在
(3)被类的所有对象共享
(4)一般推荐通过类名调用(类名.成员变量名),无需new对象来调用
(5)静态修饰的内容一般称为:类成员

public class MyTest5 {
    public static void main(String[] args) {
        System.out.println(Student.age);//0
    }
}

class Student{
    public String name;
    public static int age;
}

4.注意事项:

		a:在静态方法中是没有this关键字的
			如何理解呢?
				静态是随着类的加载而加载,this是随着对象的创建而存在。
				静态比对象先存在。
		b:静态方法只能访问静态的成员变量和静态的成员方法
		简单记:静态只能访问静态,非静态可以访问静态的也可以访问非静态的

案例:

package org.westos.demo;

public class MyTest6 {
   public String name;
   public static int age=18;

   public void show(){
       //非静态方法中可以访问静态变量和静态方法
       System.out.println(name);
       System.out.println(age);
   }

   //静态方法无法访问非静态变量
   public static void show2(){
       //System.out.println(name);//错误,静态方法无法访问非静态变量
       System.out.println(age);
   }

   //非静态方法中可以访问静态方法和非静态方法
   public void show3(){
       show();
       show2();
   }
   
   //静态方法中只能访问静态方法
   public static void show4(){
      // show();报错
       show2();
       //show3();报错
       show4();
   }
}

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

1.内存中位置不同:
		成员变量在堆内存,静态变量在方法区的静态区,局部变量在栈内存
2.所属不同:
		成员变量属于对象,随着对象的加载而加载,随着对象的消失而消失
		静态变量属于类,也被称为类对象,随着类的加载而加载,随着类的消失而消失
		局部变量属于方法,随着方法的加载而加载,随着方法的消失而消失
3.调用不同:
		静态变量可以通过类名调用,也可以通过对象调用,推荐使用类名调用
		成员变量只能通过对象名调用

三.Math类

	1:Math类概述
		类包含用于执行基本数学运算的方法
	2:Math类特点
		由于Math类在java.lang包下,所以不需要导包。
		可以直接通过类名来调用方法
		没有构造方法,因为它的成员全部是静态的。
	3:获取随机数的方法
		public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
		Math.random:是一个(0,1)之间的数
	4:我要获取一个1-100之间的随机数
		int number = (int)(Math.random()*100)+1;

猜数字案例一:

package org.westos.demo;

import java.util.Scanner;

public class MyTest7 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你猜的数字");
        int num = sc.nextInt();

        double random = Math.random();
        System.out.println(random);//是一个(0,1)之间的小数

        int n=(int)random*100+1;
        while (true){
            if (num>n){
                System.out.println("猜大了");
                break;
            }else if (num<n){
                System.out.println("猜小了");
                break;
            }else{
                System.out.println("猜对了");
                break;
            }

        }
    }
}

改进:要求最多猜五次,每次打印出剩余次数

package org.westos.demo;

import java.util.Scanner;

public class MyTest8 {
    public static void main(String[] args) {


        int n=(int)(Math.random()*100+1);
        int count=5;
        while (true){
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入你猜的数");
            int num = sc.nextInt();

            if (num>n){
                System.out.println("猜大了");
                count--;

            }else if (num<n){
                System.out.println("猜小了");
                count--;

            }else{
                System.out.println("猜对了");
                break;
            }
            if (count>0) {
                System.out.println("还有" + count + "机会");
            }else {
                System.out.println("没有机会了");

            }

        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值