首页 > 编程语言 >java第三讲-类与对象-ClassAndObjectSourceCode

java第三讲-类与对象-ClassAndObjectSourceCode

时间:2022-10-22 15:02:21浏览次数:96  
标签:初始化 java System 第三 ClassAndObjectSourceCode println obj public out

1.通过对象变量使用对象

  1)直接调用类的方法;(添加和调用get()方法取值)
  2)存取类的字段;(设置公有字段)

public class ClassAndObjectTest {
    public static void main(String[] args)
    {
        //创建类的实例,定义一个对象变量引用这一实例
        MyClass obj = new MyClass();
        //通过对象变量调用类的公有方法
        obj.myMethod("Hello");
        //给属性赋值
        obj.setValue(100);
        //输出属性的当前值
        System.out.println(obj.getValue());
        //直接访问对象公有字段
        obj.Information = "Information";
        //输出对象公有字段的当前值
        System.out.println(obj.Information);
    }
}
 /**
  * 自定义Java类的示例
  */
class MyClass
{
    // 公有字段
    public String Information = "";
    // 自定义公有Java实例方法
    public void myMethod(String argu)
    {
        System.out.println(argu);
    }
    // 定义属性:私有字段+get方法+set方法
    private int value;
    public int getValue()
    {
        return value;
    }
    public void setValue(int value)
    {
        this.value = value;
    }
}

2.引用类型与原始数据类型

  1)引用类型:

  • “引用”一个对象的变量称为“引用类型”的变量,有时又简称为“对象变量”。
  • 当声明一个对象类型的变量时,实际上并没有创建一个对象,此变量=null。
  • 不可以直接用 == 来判断值是否相等。只能是比较这两个变量是否引用同一对象,比较的是保存的地址值是否相等。

  2)原始数据类型:

  • 诸如int,float之类的变量。
  • 定义一个原始类型的变量时,会马上给其分配空间。
  • 可以用 == 来比较变量所保存的数据是否相等。

3.Object类

Object 类是Java的最顶层基类

如果在定义类时,不显式指明他的父类时,则默认是Object

4.Java字段初始化块规律

public class InitializeBlockDemo {
    public static void main(String[] args) {
        InitializeBlockClass obj=new InitializeBlockClass();
        System.out.println(obj.field);
        obj=new InitializeBlockClass(300);
        System.out.println(obj.field);
    }
}
class InitializeBlockClass{
    //下面这句在初始化块之前与之后,会影响到field字段的初始值
//    public int field=100;
    {
        field=200;
    }
    public int field=100;
    public InitializeBlockClass(int value){
        this.field=value;
    }
    public InitializeBlockClass(){
    }
}

分析:

如果是上面这种情况,即在初始块之后,输出的结果是  100   300

如果是在初始快之前,输出的结果是  200   300

5.静态初始化块的执行顺序

package ClassAndObjectSourceCode;
class Root
{
    static
    {
        System.out.println("Root的静态初始化块");
    }
    {
        System.out.println("Root的普通初始化块");
    }
    public Root()
    {
        System.out.println("Root的无参数的构造器");
    }
}
class Mid extends Root
{
    static
    {
        System.out.println("Mid的静态初始化块");
    }
    {
        System.out.println("Mid的普通初始化块");
    }
    public Mid()
    {
        System.out.println("Mid的无参数的构造器");
    }
    public Mid(String msg)
    {
        //通过this调用同一类中重载的构造器
        this();
        System.out.println("Mid的带参数构造器,其参数值:" + msg);
    }
}
class Leaf extends Mid
{
    static
    {
        System.out.println("Leaf的静态初始化块");
    }
    {
        System.out.println("Leaf的普通初始化块");
    }
    public Leaf()
    {
        //通过super调用父类中有一个字符串参数的构造器
        super("Java初始化顺序演示");
        System.out.println("执行Leaf的构造器");
    }
}

public class TestStaticInitializeBlock
{
    public static void main(String[] args)
    {
        new Leaf();
    }
}

结果:

总结:

静态初始化块只执行一次。

创建子类型的对象时,也会导致父类型的静态初始化块的执行。 

6.包装类Integer,为什么数字一模一样却会判断为不相等呢

public class StrangeIntegerBehavior {
    public static void main(String[] args)
    {
        Integer i1=100;
        Integer j1=100;
        System.out.println(i1==j1);
        Integer i2=129;
        Integer j2=129;
        System.out.println(i2==j2);
    }
}

上网查阅:java Integer等号判断_默而生的博客-CSDN博客_integer判断等于1

-128到127之间不会封装对象而是用常量池的值,不在这个范围才会创建对象。

说明:对于Integer var= ?在-128到127范围内的赋值,Integer对象在IntegerCache.cache产生,会复用已有对象,这个区间的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。

所有整形包装类对象之间值的比较,全部使用equals方法比较。

标签:初始化,java,System,第三,ClassAndObjectSourceCode,println,obj,public,out
From: https://www.cnblogs.com/hmy22466/p/16816094.html

相关文章

  • Java的接口和抽象类到底哪个更抽象
    Java的接口和抽象类到底哪个更抽象抽象类抽象方法是是不完整的方法,,它只是进行了声明,没有具体的方法实现逻辑,具体的实现逻辑由子类来完成。包含抽象方法的类是抽象类,通过ab......
  • Java不能继承多个类?内部类帮你解决这个问题
    Java不能继承多个类?内部类帮你解决这个问题内部类在Java中也是一个很重要的概念,很多类中都存在内部类。内部类与内部类的对应的是外围类,内部类可以操作外围类的所有成员,p......
  • 【Java SE】枚举类和注解
    1.枚举类的使用当类的对象由有限个,确定的时候,我们称这种类为枚举类。当需要定义一组常量时,建议使用枚举类。而当枚举类中只有一个对象时,可以使用单例模式。1.1enmu关键......
  • win10本地python第三方库安装成功,但是pycharm项目无法使用解决方案
    一、背景win10本地python第三方库安装成功,但是pycharm项目无法使用解决方案如本地安装的python中的request库,在pycharm项目中居然无法使用,比较郁闷piplist|findstrre......
  • java线程的优先级
    packageA_ShangGuiGu.Thread.ThreadDemo;/***优先级*1.MAX_Priority-----最大优先级为10*2.MIN_Priority-----最小优先级为1*3.NORM_Priority----默认优先级5*4......
  • java基础-->注释
    注释注释:注释起到对代码标注和解释的作用,如果你去看看JDK源码,会发现他们有许多的注释,而且注释是比代码还要多的,可见为代码添加注释是非常重要的,写好注释能让别人更加容易......
  • java第六讲-StreamAndFileSourceCode
    1.PrintStream学习:Java打印流PrintStream类详解_风有点大的博客-CSDN博客_printstream类1.1向文件进行输出PrintStreamps=newPrintStream("helloworld01.txt"......
  • 力扣1235(java)-规划兼职工作(困难)
    题目:你打算利用空闲时间来做兼职工作赚些零花钱。这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。给你一份兼职工作......
  • Java--->集合中常用的ArrayList的使用和介绍
    前段时间一直在说数组,今天说下Java集合中常用的ArrayListArrayList类是一个可以动态修改的数组,与普通数组的区别就是ArrayList没有固定大小的限制,可以添加或删除元素。Array......
  • Java并发编程学习9-并发基础Demo
    构建高效且可伸缩的结果缓存本篇我们将逐步构建一个高效且可伸缩的缓存,用于改进一个高计算开销的函数。1.HashMap+并发机制我们首先能想到的就是,通过HashMap和并发......