封装、构造方法和static

封装:是指隐藏对象的属性和实现细节,仅仅提供对外的公共访问方式。

 

Private 可以用来修饰成员变量或成员方法。被修饰的只能在本类中被访问

 

 

构造方法:给对象的数据进行初始化

构造方法的注意点:

     没有返回值类型,void也没有,没有return

     构造方法的方法名与类名一样

     构造方法不能被调用,当对象实例化后自动执行

1.如果我们没有提供任何形式的构造方法,那么系统将提供一个无参数的构造方法(这里的无参构造不是JVM提供的,是由编译器提供的)

                  2.如果我们提供了一个无参的构造方法,那么系统将不再提供默认的无参的构造方法

                  3.如果我们提供了一个带参数的构造方法,由于系统不再提供无参构造,所以我们需要手动添加一个无参构造

                  4.构造方法可以允许以重载的方式来提供多个构造方法的存在的

       如果使用带参构造,那么对象实例化时也需要带参

 

 

JavaBean:

                 1.类必须是公共的、具体的

                 2.必须提供一个无参构造方法

                 3.隐藏实现细节和成员属性,对外提供公共的方式

                 

 

static的特点:

                 1.可以修饰成员变量和成员方法

                 2.随着的类加载而加载(优先级最高)

                 3.他的出生时机要优先对象,所以可以这样调用变量:类.静态变量

                 4.可以被所有类的对象共享(一旦修改数据,后面的数据也会跟着改变)

 

static的注意事项:

                         1.在静态方法是不能存在this关键字的

                                  如何理解?

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

                                           静态的加载时机要优先于对象的

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

                                           静态方法:

                                                    成员变量:只能访问静态的成员变量

                                                    成员方法:只能访问静态的成员方法

                                           非静态方法:

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

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

                                                   

Student s=new Student()在内存中的过程:

1.     先加载Student类

2.     在栈内存中为Student s开辟空间

3.     在堆内存中为new Student()开辟空间

4.     为Student类中的成员变量赋默认值

5.     再对成员变量赋予初始值,没有初始值的按默认值

6.     加载构造方法,对成员变量再次赋值

7.     数据加载完后将new Student()的地址赋给s



最后附上自己写的关于登录的代码:

//测试类

package test;

import java.util.Scanner;

public class UserDemo {

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc=new Scanner(System.in);

System.out.println("请输入账号:");

String user=sc.next();

System.out.println("请输入密码:");

String passWord=sc.next();

user u=new user();

u.zc(user, passWord);

u.login(user, passWord);

        u.check();

}

}



//这是对象内部

package test;

import java.util.Scanner;

//类名没取好,应该要首字母大写

public class user {

private String []userName=new String [50];//储存用户名

private String []psw=new String [50];//储存密码

public int count=0;//统计输入账号密码次数

public int  a=0;//控制开关  1代表登陆成功   0代表登陆失败

Scanner sc=new Scanner(System.in);

//注册

public void zc(String user,String passWord) {

for(int i=0;i<user.length();i++) {

if(user.equals(userName[i])) {

System.out.println("账号已存在!");

break;

}

else {

//判断是否为空,不空则储存

if(userName[i]==null) {

userName[i]=user;

psw[i]=passWord;

System.out.println("注册成功!");

}

}

}

}







public void login(String user,String passWord) {  

for(int i=0;i<userName.length;i++) {

if(user.equals(userName[i])&&passWord.equals(psw[i])) {

System.out.println("登录成功!");

a=1;

break;

}

}

//再输入

    switch(a) {

    case 0:

    count++;

    System.out.println("你还剩下"+(5-count)+"次机会");

    if(5-count>0) {

    System.out.println("请重新输入账号:");

    String user1=sc.next();

    System.out.println("请重新输入密码:");

    String passWord1=sc.next();

    login(user1,passWord1);

    }

   

    break;

    case 1:

    break;

   

    }

}

public void check() {

if(count==5) {

System.out.println("滚啊!");

}

}

//内置一个变量测试

public user() {

userName[0]="sb";

psw[0]="123";

}



}


猜你喜欢

转载自blog.csdn.net/deekuu/article/details/80498010