封装、构造方法、private、Static与this关键字、main()_Day07

1:成员变量和局部变量的区别(理解)

   (1)定义位置区别:

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

       局部变量:定义在方法中,或者方法声明上。

     (2)初始化值的区别:

      成员变量:都有默认初始化值。

     局部变量:没有默认初始化值。要想使用,必须先赋值。

   (3)存储位置区别:

     成员变量:存储在堆中。

     局部变量:存储在栈中。

  (4)生命周期区别:

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

    局部变量:随着方法的调用而存在,随着方法调用完毕而消失。更严谨地说当局部变量的作用域结束时,即被销毁。

  (5)就近原则:局部变量有,就用局部变量,局部变量没有,就找成员变量。如果成员变量也没有就报错

  (6)成员变量与局部变量的区别:有所属关系,使用成员变量,否则使用局部变量,详细见下面的例子:

  /*

    成员变量与局部变量的使用区别,有所属关系,使用成员变量,否则使用局部变量

*/

class Demo3

{

    public static void main(String[] args)

    {

       GetSumTool gst = new GetSumTool();

       System.out.println(gst.getSum(2,3));

       Rec rec = new Rec();

       rec.height = 10;

       rec.width = 20;

       System.out.println("周长为:"+rec.getZhouChang());

       System.out.println("面积为:"+rec.getMianJi());

    }

}

//求两个数的和的工具,第二种好,因为a与b不是这个工具必须有的属性!没有所属关系!

class GetSumTool

{

    //方式一

    //int a;

    //int b;

    //public int getSum(){

    //  return a+b;

    //}

    //方式二

    public int getSum(int a,int b) {

       return a+b;

    }

}

//定义长方形类,求周长与面积

class Rec

{

    //方式一

    int height;

    int width;

    public int getZhouChang(){

       return 2*(height+width);

    }

    public int getMianJi(){

       return height*width;

    }

    //方式二

    //public int getZhouChang(int height,int width){

    //  return 2*(height+width);

    //}

    //public int getMianJi(int height,int width){

    //  return height*width;

    //}

}

2、匿名对象

   (1)匿名对象是对象的简化形式,即没有名字直接创建的对象。

     Person p=new Person; //有名字的对象,对象为p

      new Person();        //没有名字的对象

   (2)匿名对象的使用:

     对象方法只调用一次时。

    作为实际参数传递时。

    作为返回值返回时。

3:封装(理解)

     (1)隐藏实现的细节,提供公共的访问方式。 类,方法等其实都是封装的具体体现。

    (2)private关键字

       A:用于修饰成员变量和成员方法。

      B:被修饰的内容在其他类中是不可以被访问的。

     (3)常见的应用:(掌握)

       类中的所有成员变量私有,给出对应的get/set方法。其他的方法用Public修饰。代码体现:

  class Student

       {

           private String name;

           private int age;

           public Student(){}

           public Student(String name,int age)

           {

              this.name = name;

              this.age = age;

           }

           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;

           }

       }

    (4)定义一个封装类的步骤:

       a. 私有成员属性

       b. 至少一个空参的构造方法

      c. 普通方法

      d. 公共的get/set方法通常手动放在最后

  (5)创建对象使用对象的步骤:

     a. 定义引用类型变量用来引用对象

      b.使用new关键字与构造方法完成对象创建

      c. 在构造方法的同时对成员变量赋值

     d. 使用get/set方法操作成员变量

     e. 使用对象名.方法名(参数)调用对象函数

  (6)创建对象时JVM所作动作:

      A:栈内存开辟空间存储引用变量

     B:使用new创建内存空间

     C:调用构造方法

     D:成员变量默认初始化

     E:成员变量显示初始化

     F:构造函数初始化

    H:对象创建结束,将地址赋值给引用变量

具体过程:对象内存图

  (7)为成员变量赋值的方式:

     A:使用构造方法

     B:使用set方法

  注意:

      构造方法与set方法均能为成员变量赋值,并不冲突。

       构造方法只在创建对象时进行成员变量初始化。

     对象创建后由set方法依据需求修改成员变量值。

4:构造方法(掌握)

    定义: 用来创建实例对象时调用的方法。

   作用之一:  创建同时可以给属性赋值

  (1)格式及特点

      格式:

    访问权限修饰符 类名(参数...){}

    访问权限修饰符:

       public,private,一般用public

       特点:

      A:方法名和类名相同

     B:没有返回值类型

    C:没有具体的返回值

  (2)注意事项:

    A:如果你不给构造方法,jvm会自动给你一个无参构造方法。多个构造方法使用重载的方式给出。

     B:如果你给出了构造方法,那么,jvm将不再提供无参构造方法。

    这个时候,你如果要使用无参构造方法:只能自己提供

     推荐:永远手动给出无参构造方法。

5:this关键字(掌握)

  (1)是一个关键字。代表当前对象的引用。

    //简单记:在方法中,哪个对象调用方法,this就代表谁。

    (2)应用场景:

     a.解决局部变量隐藏成员变量问题,this关键字调用成员变量。

  例子:

 class Person(){

            private name;   //成员变量

            public void eat(String name){  //局部变量

            this.name=name;

            }

       }

       b.在构造方法中调用其他的构造方法(必须写在第一行)  this();

       例子:

           //定义了一个空参的构造方法

    public Person(){

       System.out.println("我是空参的构造方法!");

    }

    //定义了一个有参的构造方法

    public Person(String name){

       this.name = name;

       System.out.println("我是有一个参数的构造方法!");

    }

    //定义了两个参数的构造方法

    public Person(String name,int age) {

       this(name);     //必须放在第一行

       //this.name = name;

       this.age = age;

       System.out.println("我是有两个参数的构造方法!");

    }

       c.在其他方法中可以使用this.普通方法名()调用普通方法

       public void showMe(){

           System.out.println("name:"+this.getName()+" age:"+this.getAge());

    }

6:static关键字(理解)

   (1)是一个关键字。可以修饰成员变量和成员方法。

   (2)静态的特点:

       A:随着类的加载而加载

      B:优先于对象存在

    C:被类的所有对象共享

     D:可以通过类名调用

   (3)静态的注意事项:

      A:在静态方法中是没有this关键字的。因为this关键字是对象的引用,随对象的创建而生,而静态方法随着类的加载而加载,早于对象的创建。

     B:静态方法只能访问静态的成员变量和静态的成员方法。因为非静态的可能还没有创建。

   (4)静态内容的调用:

     A:被对象调用

     B:被类名调用

     推荐被类名调用。

   (5)什么时候该用static呢?

    如果某个内容是所有对象共享的,就用静态修饰。

   (6)静态关键字的内存图:

8:主函数main()

  主函数是静态的   public static void main(String[] args){}

     A.static为固定修饰,与对象无关是JVM的入口

    B.public公共访问权限允许外界调用

    C.无返回值,定义返回值类型没有意义

    D.参数为String数组类型,用来接收字符串参数

    E.函数名main()为JVM固定查找的字符串不能修改

     F.形参名可以修改并使用

时间: 2024-10-12 07:49:16

封装、构造方法、private、Static与this关键字、main()_Day07的相关文章

面向对象、类与对象、成员与局部变量、封装、private、构造函数、this、static、extends、super、final、abstract、interface、多态、内部类、异常【5】

  本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ 本文版权归作者和博客园共有,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接 ,否则保留追究法律责任的权利. 面向对象概念 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 •强调的是功能行为 面向对象 •将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向过程   在一个结构体中定义窗口的大小

函数构造前面的关键字的区别是什么?public construct private static

1. public  construct  private  static  public function index(){ ... }

Java之面向对象概述,类,构造方法,static,主方法,对象

一.面向对象概述 面向过程 "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想.这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响.与面向对象明显的不同就是封装.继承.类. "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想."面向过程"也可称之为"面向记录"编程思想,他们不支持丰富的"面向对象"特性(比如继承.多态),并且它们

private static final long serialVersionUID = 1L;

作者:郭无心链接:https://www.zhihu.com/question/24852886/answer/117314768来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 其实答主想问的是serialVersionUID的作用. 简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的. 在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionU

浅析java修饰符之public default protected private static final abstract

浅析java修饰符之public default protected private static final abstract 一   修饰符的作用:用来定义类.方法或者变量,通常放在语句的最前端 二   分类(大致分两类) 1.访问修饰符,包括:public default protected private 2.非访问修饰符,包括:static final abstract 三 访问修饰符--Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java支持4种不同的访问权

Java之static与final关键字

static关键字:可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类 static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量:一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量值也会随之发生变化,如果一个成员变量是static的,那么我们可以通过类名.成员变量名来的方式来使用它(Java推荐使用这种方式) package com.yuanzijian01; class MyStatic{    static int a; } public c

Java的static和final关键字的用法

static关键字的用法 static的意思是"'静态的",在java里面可用于修饰属性和方法. static关键字的应用应注意以下几种情形: 1.static作用于某个字段,一个static字段对每个类来说只有一份存储空间,而非static字段是每个对象有一份存储空间. 2.static作用于方法的重要用法是不需要创建任何对象直接调用该static方法,这对于main()方法很重要. 3.static不能应用于局部变量. 4.Java中禁止使用全局方法,所以引入static方法通过类

static 和 final 关键字 对实例变量赋初始值的影响

static 和 final 关键字 对实例变量赋初始值的影响 最近一直在看<深入理解Java虚拟机>,在看完了对象内存分配.Class文件格式之后,想深扒一下实例变量是如何被赋上初始值的这个问题的细节. 在2.3.1小节中讲对象创建的时候,讲到内存分配有两种方式:一种是指针碰撞:另一种是空闲列表. 而选择哪种分配方式是由JAVA堆是否规整决定,而JAVA堆是否规整则由虚拟机所采用的垃圾收集器是否带压缩整理功能决定. 我们不管内存分配采用何种方式,当内存分配完成后,虚拟机将分配到的内存空间都初

【Java_基础】java中static与final关键字的区别

1.static关键字 经由static关键字修饰的成员为类成员,被所有对象所共享,通常通过类名来引用static成员.类加载的连接阶段将会为静态成员变量在jvm内存的方法区分配空间,并在类的初始化阶段赋初值. 一个类的static成员变量只有“一份”(存储在方法区),无论该类创建了多少对象.看如下的示例: public class StaticDemo { public static void main(String[] args) { People p1 = new People(18);