对象的使用,标准类的制作,API,String类,用户登录案列

90 阅读6分钟

对象的使用

//对象的使用
     //格式   类名 对象名 =  new 类名()
     //范例   Phone p = new Phone();
//使用对象  
    //格式 对象名.变量名
//范例: p.brand;
    //使用成员方法
// 对象名.方法名()
    //范例 : p.call();

public class Application {
    public static void main(String [] args){
        Phone p = new Phone();
        System.out.println(p.brand);
        System.out.println(p.price);
        p.call();
        p.sendMessage();
    }
}


public class Phone {
    String brand ="小米";
    int price = 8000;
    public void call(){
        System.out.println("打电话");
    }
    public void sendMessage(){
        System.out.println("发短信");
    }
}





public class Application {
    public static void main(String [] args){
        Test pofen = new Test();
       System.out.println(pofen.name+" " + pofen.age);
       pofen.age = 20;
       pofen.name ="pofenx";
       System.out.println(pofen.name+pofen.age);
       pofen.study();
       pofen.doHomework();
    }
}




public class Test {
    String name ;
    int age;
    public void study(){
        System.out.println("加油好好干");
    }
    public void doHomework(){
        System.out.println("一年赚个几百万");
    }
}

  • 成员变量: 类中方法外的对象
  • 局部变量:方法中的对象

成员变量和局部变量的区别

区别成员变量局部变量
类中位置不同类中方法外方法内或方法声明上
内存中位置不同堆内存占内存
生命周期不同随着对象的存在而存在,随着对象的消失而消失随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同有默认的初始化值没有默认的初始化值,必需先定义,赋值,才能使用

setter/getter

public class Application {
    public static void main(String [] args){
        Test pofen = new Test();
    pofen.setAge(100);//set设置
     pofen.name="pofenx";
    pofen.show();
    System.out.println(pofen.getAge());//get获取
    }
}


public class Test {
   public String name ;
  private   int age;
  public void setAge(int a){
      if(a<0||a>150){
          System.out.println("输入有误");
      }else{
        age = a;
      }
  }
  public int getAge(){
      return age;
  }
  public void show(){
      System.out.println(name+","+age);
  }
    
    
    
    
public class Test {
   public String name ;
  private   int age;
  public void setAge(int age){
      if(age<0||age>150){
          System.out.println("输入有误");
      }else{
        this.age=age;
      }
  }
  public int getAge(){
      return this.age;//加了this指是成员变量
  }
  public void show(){
      System.out.println(name+","+age);
  }
    public void study(){
        System.out.println("加油好好干");
    }
    public void doHomework(){
        System.out.println("一年赚个几百万");
    }
}


  • this修饰的变量是成员变量

  • this解决局部变量隐藏成员变量的问题

  • 构造方法

格式

public class 类名{

修饰符 类名(参数){

}

}

public class Student{
    public student(){
        //构造方法书写内容
    }
}
public class Application {
    public static void main(String [] args){
      Test s = new Test();
      s.show();
    }
}



public class Test {

    public Test(){
        System.out.println("无参构造方法");
    }
    public void show(){
        System.out.println("ok");
    }
}
  /*
  无参构造方法
  ok

  */
public class Application {
    public static void main(String [] args){
      Test s = new Test();
      s.show();
    Test S2 = new Test("波哥");
    S2.show();
    Test S3 = new Test("帅哥",20);
    S3.show();
    }
}



public class Test {
String name ;
int age;
    public Test(){
        System.out.println("无参构造方法");
    }
    public Test(String name){
        this.name =name ;
    }
    public void show(){

        System.out.println(name+","+age);
    }
    public Test(String name,int age){
        this.name=name;
        this.age= age;
    }
}


 /*
无参构造方法
null,0
波哥,0
帅哥,20


  */

标准类的制作

  • 成员变量
    1. 使用private修饰符修饰
  • 构造方法
    1. 提供一个无参构造方法
    2. 提供一个带多个参数的构造方法
  • 成员方法
    1. 提供每一个成员变量对应的setXxx()/getXxx()
    2. 提供一个显示对象信息的show()
  • 创建对象并为其成员变量赋值的两种方式
    1. 无参构造方法创建对象后使用setXxx赋值
    2. 使用带参构造方法直接创建带有属性的对象
public class Test {
private String name ;
 private int age;
 public Test(){}
    public Test(String name ,int age){this.age=age ;this.name=name;}
public void setName(String name){
    this.name=name;
}
public String getName(){
    return name;
}
public void setAge(int age){
    this.age= age;
}public int getAge(){
    return age;
    }
    public void show(){
    System.out.print(name+","+age);
    }
    }




public class Application {
    public static void main(String [] args){
 Test s1 =new Test();
 s1.setName("大帅哥");
 s1.setAge(100);
 s1.show();
 Test s2 = new Test("大帅哥",100);
 s2.show();
 }
    }

API

  • API(Application Programming Interface)应用程序编程接口

  • JAVA API:指的就是JDK中提供的各种功能的java类,这些类见底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用(比如编写一个机器人程序去控制踢足球,程序需要向机器人发处向前跑,射门等信息,机器人厂商一定会提供一些可用于控制机器人的接口类,这些类中定义好了操作机器人的各种方法,其实,这些接口类就是机器人厂商提供给应用编程的接口,大家吧这些类类称为API)

  • 调用方法的时候,如果有明确的返回值,我们变量接收,可以手动完成,也可以使用快捷键 (Ctrl+Alt+v)

String

String内在java.lang包下,所以不需要导入包

String类代表字符串,java程序种所有的字符文字如(“ABC”)都被实现为此类的实例

也就是说,java程序中所有的引用号字符串,都是String类的对象

  • 字符串的特点
  1. 字符串不可变,他的值在创建后不能被更改
  2. 虽然String的值是不能变的,但是他们可以被共享
  3. 字符串效果上相当于(char[]),但是底层原理是数组(byte[])

String 构造方法

方法名说明
public String()创建一个空白字符串对象,不包含任何内容
public String(char[] chs)根据字符数组内容,来创建字符串对象
public String(byte[] bys)根据字节数组内容,来创建字符串兑现
String s ="abc"直接赋值的方式创建字符串对象,内容就是abc
public class Application {
    public static void main(String [] args){
String s1 = new String();
System.out.println("s1:"+s1);
char[] chs = {'a','b','c'};
String s2 = new String(chs);
System.out.println("s2"+s2);
byte[] bys = {97,98,99};
String s3 = new String(bys);
System.out.println("s3:"+s3);
String s4 = "abc";
System.out.println(s4);
 }
    }

/*
s1:
s2abc
s3:abc
abc
*/
  • 推荐使用直接赋值
String s1 = new String(chs);
String s2 = new String(chs);
  • String对象的特点
    1. 通过new创建的字符串对象,每一处new都会申请一个内存空间,谁让雷村相同,但是地址值不同
    2. 以" "方式给出的字符串,只要字符串序列相同(顺序的大小相同),无论在程序代码种出现几次。JVM都会只建立一个String对象,并在字符串中维护
String s3 = "abc";
String s4 = "abc";
  • 字符串的比较

使用==比较

  1. 基本类型:比较值是否相同
  2. 引用类型:比较地址值是否相同

字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫equals

   1. public boolean equalsObject anObject):将此字符串与指定对象进行必交,由于我们比较的是字符串对象,所以参数直接传递一个字符串
public class Application {
    public static void main(String [] args){
        //构造方法得到对象
     char[] chs = {'a','b','c'};
     String s1 = new String (chs);
     String s2 = new String (chs);
     //直接赋值得到对象
        String s3 = "abc";
        String s4 = "abc";
        //比较字符串地址是否相同
        System.out.println(s1==s2);
        System.out.println(s1==s3);
        System.out.println(s3==s4);
        System.out.println("=========");
        //比较字符串内容是否相同
        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
        System.out.println(s3.equals(s4));
 }
    }

/*
false
false
true
=========
true
true
true
*/

用户登录

import java.util.Scanner;

public class Application {
    public static void main(String[] args) {
        String username = "admin";
        String password = "pofenx";
        for (int i = 0; i < 5; i++) {

            Scanner sc = new Scanner(System.in);
            System.out.println("请输入账号");
            String s1 = sc.nextLine();
            System.out.println("请输入密码");
            String s2 = sc.nextLine();
            if (s1.equals(username) && s2.equals(password)) {
                System.out.println("登录成功");
                break;
            } else {
                if ((4 - i) == 0) {
                    System.out.println("账号已经锁定,请联系管理员");
                } else {
                    System.out.println("登录失败你还有" + (4 - i) + "次机会");
                }
            }
        }
    }
}