Java面向对象

2018-07-16 02:38:14来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

 

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

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Springboot2.X集成redis集群(Lettuce)连接

下一篇:电商促销后台逻辑