JAVASE的学习笔记(二))(封装,static,this,new关键字)

JAVASE的学习笔记(二)

抽象与封装

static和this关键字的浅薄认知
static修饰什么?
  • static可以修饰成员变量:静态变量、类变量 示例类名.变量名称(主要作用:数据共享)
  • static可以修饰成员方法:静态方法、类方法 示例 类名.方法名称()
    • 只能使用可以访问静态变量或者静态方法
  • static可以修饰内部类
      this和对象有关,每个类的非静态方法都会隐含一个this关键字。当在方法中使用本类的属性时都会隐含的使用this。this可以看做一个变量,它的值就是当前对象的引用。而abstract修饰方法,子类需要重写去实现,也指向对象,只不过指向的是父类对象; static只和类有关
      static修饰方法,则方法不属于某个对象,属于class,可用class名.方法名(),进行调用;简单的说abstract实例对象; 而static属于类。 所以static方法不能是abstract方法
      this和super都无法出现在static 修饰的方法中,static 修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象.如果使用的是类来调用而不是对象,则 this就无法指向合适的对象.所以static 修饰的方法中不能使用this.
static重要作用:数据共享
class Student{
    private String name;
    private int age;
    public static int count ;//不再存储在堆内存当中,而是存储在方法区中全局数据区域,做到“共享数据”
    
    public Student(String name,int age){
        this.name = name;
        this.age = age;
        count++;
    }
    public String toString() {
        return "name="+name+",age="+age;
    }

}
static:当类在被JVM加载的时候,首先会加载类中由static修饰的所有属性,方
法,代码块。static修饰的内容,在整个程序运行期间,只有一份,而且所有对象
共享。它的生命周期从程序的开始到结束。static变量置于方法区中。

this:this代表当前对象的一个引用。 使用this来调用其他构造方法的时候其必
须是第一条语句

类只要被创建就会加载static修饰的内容,class创建对象在这之后,this指向当前对象,所以二者不可共同使用

this
  • 只能使用在方法的内部,谁调用就代表谁,当前调用的那个对象
  • 可以代表引用数据类型,实际上引用了“堆”内存地址
  • this无法在静态方法中使用
  • 实例方法方法中,可以使用this关键字调用本类中的成员变量和成员方法
  • 构造方法之间不能直接调用,必须通过this互相调用,必须放置第一个语句
  • 若某个构造方法的第一条语句有this(…),那这个构造方法将调用本类其它构造方法
New关键字

只要有new就执行构造方法,构造方法是创建对象的根本途径
使用new关键字创建对象时需注意:

  • 为对象实例分配内存空间
  • 调用构造方法
  • 返回对象实例的引用

在建立一个对象时,从两个地方分配内存:在堆中分配的内存实际建立这个对象;在堆栈中分配的内存只是一个指向该堆对象的指针(引用)而已。

toString()方法

只要输出就默认调用 toString()方法
Object类中有一个toString方法,它是所有类的父类,所以用户创建所有类都继承该方法。在没重写该方法前, toString() 方法 返回(类名 + @ +hashcode)字符串。

方法返回值

方法返回值有以下两种情况:

  • 方法没有返回值,返回类型为void
  • 方法有返回值,必须使用关键字return返回该值,返回类型为该返回值的类型
构造方法与方法类似之处在于它们都包含可执行代码。但区别在于:只有当JVM实
现在创建类的实例时才执行构造方法,构造方法通常包含字段初始化代码。严格来
说,构造方法不是方法,因为它不会返回任何值
访问修饰符

在这里插入图片描述

  • public:公共的,在任何位置都可以访问
  • protected:受保护的,在继承关系或者同包下可以访问
  • default:默认不写,友好的,只有在同包范围才可以访问
  • private:私有,只有在当前类的范围访问有效

在java中封装分为下面两种:

  • 对成员变量的封装,是通过访问控制修饰符进行控制,绝大部分情况下,我们都是使用private修饰实例变量
  • 对成员方法的隐藏,只能通过方法名和返回值类型知道该方法是由什么作用,但是其内部是如何实现的是无法“看到”

访问由“Private”修饰的成员变量,需要用get()与set()方法
访问由Private修饰的构造方法时,需要使用static关键字和getInstance()方法:

Boy boy = Boy.getInstance();
        System.out.println(boy);
class Boy{
     private Boy(){//设置外部无法对其进行实例化操作
         System.out.println("Boy类的无参数的构造方法");
     }

     static Boy getInstance(){//static可以用类来调用,不需要实例了
         return new Boy();
     }
     
 }

static可以用类来调用,不需要实例
在Java中,有些class:

  • 使用private实例字段;
  • 通过public方法来读写实例字段。
      
      这种class被称为JavaBean:JavaBean主要用来传递数据,即把一组数据组合成一个JavaBean便于传输。通过getter和setter来定义属性;使用Introspector.getBeanInfo()可以获取属性列表。

GetInstance()方法与new:

  • new的使用:如Object _object = new Object(),这时候,就必须要知道有第二个Object的存在,而第二个Object也常常是在当前的应用程序域中的,可以被直接调用的
  • GetInstance的使用:在主函数开始时调用,返回一个实例化对象,此对象是static的,在内存中保留着它的引用,即内存中有一块区域专门用来存放静态方法和变量,可以直接使用,调用多次返回同一个对象。

区别:
  大部分类(非抽象类/接口/屏蔽了constructor的类)都可以用new,new就是通过生产一个新的实例对象,或者在栈上声明一个对象 ,每部分的调用用的都是一个新的对象。
  getInstance是少部分类才有的一个方法,各自的实现也不同。getInstance在单例模式(保证一个类仅有一个实例,并提供一个访问它的全局访问点)的类中常见,用来生成唯一的实例,getInstance往往是static的。

  1. 对象使用之前通过getinstance得到而不需要自己定义,用完之后不需要delete;
  2. new 一定要生成一个新对象,分配内存;getInstance() 则不一定要再次创建,它可以把一个已存在的引用给你使用,这在效能上优于new;
  3. new创建后只能当次使用,而getInstance()可以跨栈区域使用,或者远程跨区域使用。所以getInstance()通常是创建static静态实例方法的。
  4. 方法区

在这里插入图片描述

Java内存

在这里插入图片描述

Scanner对象

接收输入内容的方式
  • next():
    1.一定要读取到有效字符后才可以结束输入
    2.对输入有效字符之前遇到的空白,next()方法会自动将其去掉
    3.只有输入有效字符后才将后面输入的空白作为分隔符或结束符
    4**.next()不能得到带有空格的字符串**
  • nextLine():
    1.以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
    2.可以获得空白
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月色夜雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值