欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java面向对象

程序员文章站 2022-03-16 23:27:15
1:局部变量和成员变量 ​ (1)在类中位置不同 ​ 成员变量:在类中方法外定义 ​ 局部变量:在方法中定义或方法参数中定义 ​ (2)在内存中的位置不同 ​ 成员变量:在堆内存中 ​ 局部变量:在栈内存中 ​ (3)生命周期不同 ​ 成员变量:随着对象的创建而存在,随着对象的消失而消失 ​ 局部变 ......

 

1:局部变量和成员变量

(1)在类中位置不同

​ 成员变量:在类中方法外定义

​ 局部变量:在方法中定义或方法参数中定义

(2)在内存中的位置不同

​ 成员变量:在堆内存中

​ 局部变量:在栈内存中

(3)生命周期不同

​ 成员变量:随着对象的创建而存在,随着对象的消失而消失

​ 局部变量:随着方法的调用而存在,随着方法的消失而消失

(4)初始化值不同

​ 成员变量:有默认值

​ 局部变量:没有默认值,必须定义、赋值后才能使用

2:形式参数

基本类型:形式参数的改变对实际参数没有影响

引用类型:形式参数的改变直接影响实际参数的值

​ 当看到一个方法需要的参数是一个时,就应该知道这里需要的是一个具体的实例对象

 

3:匿名对象

​ (1)匿名对象就是没有名字的对象 格式: new 类名();

​ (2)应用场景

​ A:单独只调用一次方法的时候 : new 类名().方法();

​ B:可以当做实际对象参数 : StudentTest(new Student());

4:封装、封装的体现

​ (1)封装就是隐藏不需要对外开放的成员属性、方法,对外提供公共的访问方式

​ (2)封装的好处

​ A:隐藏实现细节,提供公共访问方式

​ B:提高代码的复用性

​ C:提高代码的安全性

(3)设计原则 把不想让外界知道的实现细节给隐藏起来,提供公共的访问方式 (4)private是封装的一种体现。 封装:类,方法,private修饰成员变量和成员方法

4.2:private关键字

(1)私有的意义,可以修饰成员变量和成员方法

(2)特点: 被private修饰的后的成员只能在本类中被访问

(3)private的应用: 以后再写一个类的时候: 把所有的成员变量给private了 提供对应的getXxx()/setXxx()方法

5:this关键字

(1)this关键字代表当前类的引用对象

​ 个人理解: this.age == 类的对象名.age (访问的是成员变量)

​ (比如Student类,Student s = new Student(); this.age == s.age )

6:构造方法

(1)构造方法作用:用于对对象的数据初始化

​   (2) 构造方法 格式(特点): A:方法名和类名相同 B:没有返回值类型,连void都不能有 C:没有返回值

(3)构造方法注意事项:

​ A:如果我们没有写构造方法,系统会默认给我们提供一个无参的构造方法

​ B:如果我们给出了构造方法(有无参都算),系统将不再给出 无参构造方法

​ 如果我们要使用无参构造方法,此时必须自己给出

建议:最好永远自己手动给出无参构造方法

(4)思考:构造方法中可不可以有return语句?

​ 可以的,写成这样就行: return;

​ 其次,我们在任何void类型的方法中都可以加return;,表示方法到这结束

7:给成员变量赋值

​ A:setXxx()

​ B: 带参构造方法

8:代码编写及测试:

​ A:学生类的案例

    class Student{
       private String name;
       private int age;
       public Student(){
      }
       public Student(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;
      }
}
calss StudetnTest(){
       public static void main(String[] args){
           Stundet s1 = new Student();
           s1.setName("王祖贤");
           s1.setAge(21);
           System.out.println(s1.getName+"-------"+s1.getAge());
           
           Stundet s2 = new Student("小倩","18");
           System.out.println(s2.getName()+"-------"+s2.getAge());
      }
}

​ B:手机类的案例

class Phone{
   private int  jiage;
   private String color;
   public Phone(){}
   public phone(int jiage,String color){
       this.jage = jage;
       this.color = color;
  }
   public int getJiage(){
       return jiage;
  }
   public void setJiage(String jiage){
       this.jiage = jiage;
  }
   public String getColor(){
       reutrn color;
  }
   public void setColor(String color){
       this.color = color;
  }
}

class PhoneTest(){
   public static void main(String[] args){
       Phone p1 = new Phone();
       p1.setJiage(2000);
       p1.setColor("黑色");
       System.out.println(p1.getJiage()+"----------"+p1.getColor());
       
       Phone p2 = new Phone(1800,"红色");
       System.out.println(p2.getJiage()+"----------"+p2.getColor());
  }
}

​ C:长方形类的案例


class ChangFang{
private int chang;
private int width;
       public ChangFang(){
           
      }
       public ChangFang(int chang,int width){
           this.chang = chang;
           this.width = width;
      }
       public int getChang(){
      return chang;
      }
       public void setChang(int chang){
           this.chang = chang;
      }
       public int getWidth(){
           return width;
      }
       public void setWidth(int width){
           this.width = width;
      }
}

class ChangFangTest{
       public static void main(String[] args){
           ChangFang cf1 = new ChangFang();
           cf1.setChang(38);
           cf1.setWidth(18);
           System.out.println(cf1.getChang()+"--------"+cf1.getWidth());
           
           ChangFang cf2 = new ChangFang(47,32);
           System.out.println(cf2.getChang()+"------"+cf2.getWidth());
      }
}

9:一个类的成员变量初始化过程

​ Student s = new Student();

​ (1)把Student.class文件加载到内存

(2)在栈内存为s开辟空间

(3)在堆内存为学生对象申请空间

(4)给学生的成员变量进行默认初始化。null,0 (String name = "灵儿" int age = 27)

(5)给学生的成员变量进行显示初始化。灵儿,27 (String name = "灵儿" int age = 27)

(6)通过构造方法给成员变量进行初始化。逍遥,30 (Student s2 = new Student("逍遥",30);)

(7)对象构造完毕,把地址赋值给s变量

10:static关键字

(1)静态的意思。可以修饰成员变量和成员方法。

(2)静态的特点:

A:随着类加载而加载

B:优先对象而存在

C:被类的所有对象共享

这其实也是我们判断该不该使用静态的依据。 举例:饮水机和水杯的问题思考

D:可以通过类名调用 既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。

(3)静态的内存图 静态的内容在方法区的静态区

(4)静态的注意事项

​ A:在静态方法中没有this对象 B:静态只能访问静态(代码测试过)

因为它比对象先存在,所以先存在的成员不能访问没有存在的成员

​ 比如: static int age; int age2 = 20; age = age2 (错误的)

因为它随着类的加载而加载,这时 age2还没有存在,所以 age = age2无法赋值

(5)静态变量和成员变量的区别

A:所属不同 静态变量:属于类,类变量 成员变量:属于对象,对象变量,实例变量

B:内存位置不同 静态变量:方法区的静态区 成员变量:堆内存

C:生命周期不同 静态变量:静态变量是随着类的加载而加载,随着类的消失而消失 成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失

D:调用不同 静态变量:可以通过对象名调用,也可以通过类名调用 成员变量:只能通过对象名调用

11:main方法各种修饰符及参数的解释?

​ public: 访问权限最大

static: 不用创建对象调用

void: 返回值给jvm没有意义

main: 就是一个常见的名称。

String[] args: 可以接收数据,提供程序的灵活性 (数据类型保存的都是String类型)

格式:java MainDemo hello world java java MainDemo 10 20 30