Java对象
偷掉月亮的阿硕
这个作者很懒,什么都没留下…
展开
-
Java中的四种内部类
基本介绍一个类的内部又完整的嵌套了另外一个类的结构。被嵌套的类称为内部类,嵌套其他类的类称为外部类,是类的第五大成员(属性,方法,构造器,代码块,内部类)。内部类最大的特点就是可以直接访问私有属性。分类:定义在外部类的局部位置上(比如方法内):局部内部类(有类名),匿名内部类(没有类名)定义在外部类的成员位置上:成员内部类(没有用static修饰),静态内部类(使用static修饰)局部内部类:定义在外部类的局部位置,比如方法中,并且有类名可以直接访问外部类的所有成员,包含私有原创 2022-02-22 20:59:21 · 550 阅读 · 0 评论 -
实现接口VS继承类
首先继承关系我们可以自然的使用父类的功能,而不需要去重写,比如下面的一段的代码,monkey本身的本领就可以爬树,是从父辈上继承过来,而不需要去学习。但是如果悟空还想要飞翔则需要继承一个接口,提供相应的功能,同样悟空还可以学习更多的技能,也就需要更多的接口。public interface Bird { /**小鸟飞翔的功能*/ public void fly();}public class Test { public static void main(String[]原创 2022-02-08 11:08:40 · 412 阅读 · 0 评论 -
Java中的模板设计模式
我们首先来观察以下代码,我们要求统计aa类与bb类的两个任务的执行时间main方法类package Time;public class Main { public static void main(String[] args) { AA aa=new AA(); aa.job(); BB bb=new BB(); bb.job(); }}aa类package Time;public class A原创 2022-02-07 11:08:19 · 330 阅读 · 0 评论 -
Java中的抽象的类
首先抽象的类使用需要abstract来进行注明!!!我们不知道该类中某个方法的具体用途,但是现在需要将其在这个类中展示出来,查看以下代码,我们并不知道eat方法的具体用途,需要将其进行抽象abstract class aa{ public abstract void eat();}抽象类的价值在于,在父类中定义这些抽象的方法,但是让其在子类中进行继承实现抽象类的使用细节抽象类不能进行实例化,运行以下代码,会发现系统报错public class Test { publi原创 2022-02-07 10:28:32 · 148 阅读 · 0 评论 -
Java中代码块的执行
代码块的格式:{执行的语句}代码块的主要用途当我们定义了代码块之后,我们每一次调用构造器,代码块的语句都会被执行一次。我们可以看出代码块在构造器的第一列就被调用执行了。如果有多个代码块则会按照顺序进行调用public class Test { public static void main(String[] args) { aa b= new aa("小明"); aa c= new aa("小明",99); }}class aa{原创 2022-01-29 11:16:23 · 1460 阅读 · 0 评论 -
Java中main方法的语法
理解main方法public static void main(String[] args) Java虚拟机调用类的main方法,所以该方法必须为public类,如果是private类等则运行不通过 Java虚拟机在执行main方法时不必创建实例对象,所以执行方法必须时static 该方法接受String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数(String[] args用来保存参数)。我们来运行以下代码,查看,当我们尝试将参数输出时。我们正常运行,什么也不会输出,但原创 2022-01-29 10:32:01 · 797 阅读 · 0 评论 -
静态方法(工具人)
在程序员开发中,往往会将一些通用的方法,设计成静态方法,这样我们就不需要创建对象就可以使用,比如打印数组,完成排序和我们设计的程序中一些非静态函数需要的功能等。静态方法可以通过不用创建实例对象而进行调用使用,查看以下代码我们并没由去创建一个tets对象实例,而是直接调用这个方法,public class Test extends a{ public static void main(String[] args) { a.printfHello(); }}clas原创 2022-01-29 10:06:52 · 306 阅读 · 0 评论 -
Java中finalize方法的使用(经典白学,新idk已经弃用)
在jdk文档中,其解释为当垃圾回收器确定不存在对该对象的更多的引用时,由对象的垃圾回收器调用此方法。什么情况下会被回收:某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,用垃圾回收机制调用finalize方法垃圾回收的调用时系统决定的,但是我们可以通过System.gc()来主动调用查看以下代码,其实在这种情况下,系统已经自动调用了finalize函数,但是我们不能确定是在什么时候调用的,所以当没有主动运行.gc的情形下,输出语句不会这里输出。public class Test原创 2022-01-27 20:37:06 · 306 阅读 · 0 评论 -
Java中toString方法
tostring方法默认返回:全类名(包名+类名)+@+哈希值的十六进制源码:public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }观察以下代码查看效果:public class Test { public static void main(String[] args) { A a=new A("小钻风原创 2022-01-27 20:18:04 · 1036 阅读 · 0 评论 -
Java中hasCode方法
hasCode可以认为是地址的映射,如果指向同一个对象则其值为相同,如果指向不同的对象,则其值不相同。public class Test { public static void main(String[] args) { A obj1=new A(); A obj2=new A(); A obj3=obj1; System.out.println(obj3.hashCode()); System.out.print原创 2022-01-27 19:59:42 · 869 阅读 · 0 评论 -
Java中重写equals方法,改变其功能
首先我们运行以下代码,比较两个对象是否相等。可以看出,两个person明明完全相等,但是结果却是false,这是因为person1与person2是两个对象,虽然包含内容相等,但是equals的源码将两个不同的对象直接处理为不相等。这个时候我们可以选择重写equals代码,完成我们的需求。package com.zss.Mlearn;public class A { public static void main(String[] args) { Person person1原创 2022-01-27 11:44:58 · 404 阅读 · 0 评论 -
Java中==与equals
==作用:对于基本数据类型,比较值是否相等,对于引用数据类型,比较地址是否相等。equals作用:一般比较地址内存地址是否相等,必要时方法会被重写。首先我们查看以下代码以及运行结果public class Test { public static void main(String[] args) { Integer integer1=1; Integer integer2=1; Integer integer3=1000;原创 2022-01-27 11:34:44 · 649 阅读 · 0 评论 -
Java的动态绑定机制
首先我们运行以下一段代码,结果大家很容易看出来结果为40与30。但是如果我将B类的sum方法注释掉那么他将会输出什么???会发现最终的结果变为30与30,其中间发生了什么??首先输出时检索子类B中没有sum类,就去调用父类A的sum,但是我们会发现A的sum函数包含了getl()函数,我们这个时候使用子类的getl方法还是父类的getl方法??? Java的的动态绑定机制,在这个函数中A a=new B(),其就与B(等号后面的)的地址进行绑定,这个时候B中含有getl函数,就去调用B中的函数。而i=原创 2022-01-26 12:11:51 · 66 阅读 · 0 评论 -
Java面向对象的多态
多态的具体体现在Java中重写和重载都是多态的一种体现,重载我们对相同的函数名输入不同的参数,函数就拥有不同的功能,而重写同一个函数名拥有不同的函数体现,比如返回值不同等等。对象的多态一个对象的编译类型和运行类型可以不一致 编译类型在定义对象时就确定了,不能更改 运行的类型时可以变化的Animal animal=new Dog();//编译类型为Animal,运行类型为Dog animal=new Cat;//编译类型为Animal,运行类型为Cat从上面的代码可以看出,原创 2022-01-26 11:51:57 · 64 阅读 · 0 评论 -
Java中方法重写的注意事项
基本介绍super代表父类的引用,用于访问父类的属性,方法,构造器。基本语法访问父类的属性,但是不能访问父类的private的属性,super.属性名 访问父类的方法,但是不能访问private方法 访问父类的构造器,并且必须放到第一句...原创 2022-01-26 10:16:55 · 75 阅读 · 0 评论 -
Java中继承的本质分析
观察以下代码,当我们运行Son son=new Son();内存中发生了什么public class Test { public static void main(String[] args) { Son son=new Son(); }}class GrandFa{ String name="老头爷爷";}class Father extends GrandFa{ String name="小头爸爸";}class Son extends原创 2022-01-25 10:15:07 · 141 阅读 · 0 评论 -
Java面向对象的继承
详细说明Java中继承以及继承的相关细节原创 2022-01-24 19:59:14 · 191 阅读 · 0 评论 -
Java面向对象的封装
封装概念是把抽象的数据(属性)与对数据的操作方法封装在一起,数据被保存在内部,程序的其他部分只有通过被授权的操作方法,才能对数据进行操作。封装的好处隐藏我们对方法实现的细节,用户只需要知道怎么去使用这个功能,而不需要知道我们如何去实现的这一功能,安全性比较高。 封装还可以对用户输入的数据进行验证,保证数据合情合理,但是用户不会提前了解到规则,造成数据造假。封装的步骤将想要隐藏的数据进行私有化(用户不能直接去修改属性) 提供一个公共的set方法,用于对属性进行判断并且赋值 提供一个公共原创 2022-01-24 18:51:45 · 763 阅读 · 0 评论 -
Java中面向对象四种访问修饰符
公开级别:用public表示,对非本类的包也可用 受保护级别:用protected修饰,仅仅对子类和同一个包中的类公开 默认级别:没有修饰符符号,对同一个包中的类公开 私有级别:用private修饰,只有类本身可以访问,不对外公开访问级别 访问控制修饰符 同类 同包 子类 不同包 公开 public 可 可 可 可 受保护 protected 可 可 可 不可 默认 没有修饰符 可 .原创 2022-01-24 11:11:09 · 94 阅读 · 0 评论 -
Java中this关键字
为什么引入this关键字首先查看一下以下代码,可以发现其中的构造器中pName, pAge不是那么的容易识别如果我们还是可以用name与age来表示就好了,但是这样Java虚拟机并不能准确识别形参中的name与上面定义的name的区别,这样会发生异常。这个时候我们就需要引入this进行区别。class Cat{ String name; int age; public Cat(String pName,int pAge){ name=pName;原创 2022-01-23 20:12:11 · 48 阅读 · 0 评论 -
Java中构造器
基本语法:修饰符 方法名(形参列表){方法体;}作用:主要作用是完成对新对象的初始化,并不去创建对象。构造器举例:public class Test { public static void main(String []args){ //利用构造器进行赋值,完成属性的初始化 Cat test=new Cat("阿华",20); System.out.println(test.name+test.age); }}原创 2022-01-23 11:21:10 · 50 阅读 · 0 评论 -
Java中作用域使用注意细节
Java中,主要的变量就是属性(成员变量)与局部变量 局部变量一般是指成员方法中定义的变量。 作用域分类:全局变量:就是属性,作用域为整个类体,局部变量:也就是除了属性之外的其他变量,作用域为定义他的代码块 全局变量使用可以不赋值,系统自动匹配默认值,而局部变量必须赋值后才能使用。 全局变量可以加上修饰符,但是局部变量不可加修饰符。...原创 2022-01-23 10:55:29 · 144 阅读 · 0 评论 -
Java中可变参数
Java中可变参数的使用原创 2022-01-23 10:20:24 · 63 阅读 · 0 评论 -
Java中方法的重载典型例子
Java中重载的一个典型例子原创 2022-01-23 10:00:50 · 532 阅读 · 0 评论 -
递归方法调用中内存细节以及代码运行顺序
首先运行以下代码块,观察其运行结果,输出1234,4321而不是。public class Test { String name="你好"; public static void main(String []args){ Test test=new Test(); test.function(4); } public void function(int n){ if (n>1){ fu原创 2022-01-22 21:22:20 · 129 阅读 · 0 评论 -
Java中方法传参机制常见陷阱(从最底层讲述)
从底层讲述方法中值传递机制原创 2022-01-22 12:34:58 · 327 阅读 · 0 评论 -
Java对象中的方法调用机制
Java中的方法调用机制原创 2022-01-22 10:40:53 · 213 阅读 · 0 评论 -
Java对象在内存中的存在形式
根据图中可知,Cat类存在于栈中,存储着cat1的地址信息,而cat1在堆中,存储着其属性的地址信息,而真正的属性值在方法区的常量池中。所有类的属性值都存储在方法区中,采用套娃的方式进行存储。...原创 2022-01-21 10:29:44 · 688 阅读 · 0 评论 -
Java中类与对象
Java中对象和类原创 2022-01-21 10:10:40 · 184 阅读 · 0 评论