类对象

Java内部类

孤者浪人 提交于 2020-02-27 21:41:12
从Java1.1开始引入了内部类以来,它就引起了人们的激烈争论。其实任何优秀的语言特性用得不好就是滥用,内部类用得不好就会导致代码像迷宫一样,导致出现毫无重用的综合征。 1、内部类分为成员内部类、静态嵌套类、方法内部类、匿名内部类。 几种内部类的共性: A、内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。 B、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。 2、成员内部类:形式如下 class Outer { class Inner{} } 编译上述代码会产生两个文件:Outer.class和Outer$Inner.class。 成员内部类内不允许有任何静态声明!下面代码不能通过编译。 class Inner{ static int a = 10; } 能够访问成员内部类的唯一途径就是通过外部类的对象! A、从外部类的非静态方法中实例化内部类对象。 class Outer { private int i = 10; public void makeInner(){ Inner in = new Inner(); in.seeOuter(); } class Inner{ public void seeOuter(){ System.out

对象的上转型和下转型 (instanceof关键字)

余生长醉 提交于 2020-02-27 21:06:05
1.对象的上转型,就是多态的一种写法 格式:父类名称 对象名 = new 子类名称();    Animal animal = new Cat(); 含义:右侧创建一个子类对象,把它当作父类来使用 向上转型一定是安全的,从小范围到大范围;  猫是动物,动物不一定是猫 类似于:double num = 100 ps:对象一旦向上转型为父类,就无法调用子类特定内容 2.对象的下转型,其实就是还原的操作 格式:子类名称 对象名 = (子类名称)父类对象; 含义:将父类对象还原为本来的子类对象   Cat cat = (Cat)animal 类似于:int num = (int)10.0 ps:必须保证创建的时候就是猫,才能下转型成猫,否则会报错 类转换错误 ClassCastException 报错的情况类似于:int num = (int)10.5 //精度损失 下转型时,忘记原来子类是什么时 格式:对象 instanceof 类名称 会得到一个 boolean 值,判断前面对象能不能当作后面类型的实例 例子: if (animal instanceof Dog) {   Dog dog = (Dog) animal;   dog.watchHouse(); } if (animal instanceof Cat) {   Cat cat = (Cat) animal;   cat

Java基础 学习笔记4

ぐ巨炮叔叔 提交于 2020-02-27 18:42:45
1.继承 继承是类与类的一种关系;Java中的继承是单继承,只有一个父类。 继承的好处:子类直接拥有父亲的所有属性和方法(private修饰的无效!),可实现代码复用。 语法规则: class 子类 extends 父类 eg:class Dog extends Animal{ … } 2.Java中的方法重写 如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法。 语法规则:返回值类型,方法名,参数类型及个数都要与父类继承的方法相同,才叫方法的重写。 3.Java中的继承初始化顺序 a.初始化父类再初始化子类。(使用构造方法可以看出,虽然仅创建了子类的对象,但是先执行了父类的构造方法,之后才执行子类的构造方法)。 b.先执行初始化对象中的属性,再执行构造方法中的初始化。 4.Java中final的使用 final关键字: 表示“最终的”,即不可修改。 final可以修饰类、方法、属性和变量 a.修饰类:该类不允许被继承 b.修饰方法:该方法不允许被重写 c.修饰属性:则该属性不会进行隐式初始化(不会自动初始化,之前我们没有初始化都是系统帮我们自动初始化),需要手动初始化或者在构造方法中初始化 (但二者只能选一,即只能初始化一次后便不能更改) d.修饰变量,只能在声明的时候赋一次值,成为常量(static final 会使其成为全局常量)。

java基础学习3---面向对象

妖精的绣舞 提交于 2020-02-27 10:59:35
1、面向对象 对象:用来描述客观事物的一个实体,由一组属性和方法构成。 面向对象: 人关注对象 人关注事物信息 类 确定对象将会拥有的属性和方法 类的特点: 类是对象的类型 具有相同属性和方法的一组对象的集合。 类和对象的关系 类是抽象的概念 对象是一个能看到的具体实体 类是对象的类型 对象是特定类型的数据 具体开发中,先定义类再实例化对象。 对象实例化 Cat cat = new Cat ( ) ; 实例化过程分两部分: 声明对象 Cat cat 实例化对象 new Cat() 注意: 1.每次new对象都会产生新的实例化对象。 2.多个对象可以指向同一块实例化空间。 3.对象必须被实例化之后才能使用。 4.对象间的引用,实际上传递的是堆内存的引用。 构造方法 1、构造方法与类同名,没有返回值。 2、只能在对象实例化的时候调用。 3、没有指定构造方法时,系统会自动添加无参的构造方法。 4、当指定构造方法时,无论是有参、无参的构造方法,都不会自动添加无参的构造方法。 5、一个类中可以有多个构造方法。 单一职责原则 单一职责原则(SRP:single responsibility principle),又称单一功能原则。 面向对象的五个基本原则之一(SOLID:SRP、OCP开放封闭原则、LSP里氏替换原则、DIP依赖倒置原则、ISP接口分离原则)。

Java 基础 接口和多态

帅比萌擦擦* 提交于 2020-02-27 08:58:26
接口 接口的概念   接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。   接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。   请记住:一切事物均有功能,即一切事物均有接口。 接口的定义   与定义类的class不同,接口定义时需要使用interface关键字。   定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。这点可以让我们将接口看做是一种只包含了功能声明的特殊类。    定义格式: public interface 接口名 { 抽象方法1; 抽象方法2; 抽象方法3; }   使用interface代替了原来的class,其他步骤与定义类相同:    接口中的方法均为公共访问的抽象方法    接口中无法定义普通的成员变量   类实现接口   类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements。    其他类(实现类)实现接口后,就相当于声明:”我应该具备这个接口中的功能”。实现类仍然需要重写方法以实现具体的功能: class 类 implements 接口 { 重写接口中方法 }   在类实现接口后,该类就会将接口中的抽象方法继承过来

转:String StringBuffer StringBuilder区别

倖福魔咒の 提交于 2020-02-27 04:35:33
转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论。还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸裸的站在我们这些Java色狼面前了。嘿嘿.... 众所周知,String是由字符组成的串,在程序中使用频率很高。Java中的String是一个类,而并非基本数据类型。 不过她却不是普通的类哦!!! 【镜头1】 String对象的创建 1、关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world"); 问题是参数"Hello world"是什么东西,也是字符串对象吗?莫非用字符串对象创建一个字符串对象? 2、当然,String类对象还有一种大家都很喜欢的创建方式:String s="Hello world"; 但是有点怪呀,怎么与基本数据类型的赋值操作(int i=1)很像呀? 在开始解释这些问题之前,我们先引入一些必要的知识: ★ Java class文件结构 和常量池 我们都知道,Java程序要运行,首先需要编译器将源代码文件编译成字节码文件(也就是.class文件)。然后在由JVM解释执行。 class文件是8位字节的二进制流 。这些二进制流的涵义由一些紧凑的有意义的项 组成

2020-02-26(观看视频笔记)

元气小坏坏 提交于 2020-02-26 18:54:22
1、形式参数和返回值的问题   (1)形式参数:       类名:需要该类的对象       抽象类名:需要该类的子类对象       接口名:需要该接口的实现类对象   (2)返回值类型       类名:返回的是该类的对象       抽象类名:返回的是该类的子类对象       接口名:返回的是该接口的实现类的对象   (3)链式编程       对象.方法1().方法2().方法3();       这种用法:其实再方法1()调用完毕后,是一个对象。       方法2()调用完毕后,应该放回一个对象。       方法n()调用完毕后,可能是对象,也可以不是对象。 2、包   (1)其实就是文件夹   (2)作用:     A:区分同名的类     B:对类进行分类管理       a:按照功能分       b:按照模块分   (3)包的定义:     package 包名;          多级包用.分开。   (4)注意事项:     A:package语句必须在文件中的第一条有效语句。     B:在一个java文件中,只能由一个package。     C:如果没有package。默认就是无包名。   (5)带包的编译和运行     A:手动式     B:自动式       java -d . 类名.java 3、导包   (1)格式:    

JAVA中的反射机制

血红的双手。 提交于 2020-02-26 12:02:17
JAVA中的反射机制 文章目录 JAVA中的反射机制 反射机制-获取类对象 什么是类对象? 如何获取类对象 反射机制-创建对象 创建一个对象 通过配置文件创建获取文件 反射机制- 访问属性 通过反射机制来访问和修改对象的属性 反射机制- 调用方法 调用方法 反射机制- 有什么用处 反射机制-获取类对象 什么是类对象? 所有的类,都有一个类对象,这个类对象用于提供类本身的信息。比如有多少构造方法,有多少属性,有哪些普通方法。 如何获取类对象 获取类对象有3种方式 Class.forName 类名.class new 类名.getClass() 在JVM中,一种类只会有一个类对象存在,所以以上三种方式所获取的类对象,都是一样的。 准确的来讲,是一个 ClassLoader 下,一种类只有一个类对象存在 代码实现: package reflection ; /** * @author xsl20 */ public class GetInstanceForClass { public static void main ( String [ ] args ) { String className = "reflection.Hero" ; try { Class pClass1 = Class . forName ( className ) ; Class pClass2 = Hero .

Java基础之RTTI 运行时类型识别

孤者浪人 提交于 2020-02-26 05:15:52
运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息。 多态(polymorphism)是基于RTTI实现的。RTTI的功能主要是由Class类实现的。 Class类 Class类是"类的类"(class of classes)。如果说类是对象的抽象和集合的话,那么Class类就是对类的抽象和集合。 每一个Class类的对象代表一个其他的类。比如下面的程序中,Class类的对象c1代表了Human类,c2代表了Woman类。 public class Test { public static void main(String[] args) { Human aPerson = new Human(); Class c1 = aPerson.getClass(); System.out.println(c1.getName()); Human anotherPerson = new Woman(); Class c2 = anotherPerson.getClass(); System.out.println(c2.getName()); } } class Human { /** * accessor */ public int getHeight() { return this

Java基础之六、Java编程思想(8-10)

五迷三道 提交于 2020-02-25 22:51:14
八、多态 多态 (也称作 动态绑定 、 后期绑定 或 运行时绑定 ) 域(成员变量)是不具有多态性的,只有普通的方法调用是多态的,任何域访问操作都将由编译器解析,因此不是多态的 静态方法也是不具有多态性的   public static void main(String[] args){     Super sup = new Sub(); // Upcast     System.out.println("sup.field = " + sup.field + ". sup.getField() = " + sup.getField() );// sup.field返回父类的成员值,虽然子类也定义了同名成员, sup.getField()访问子类的重写方法   } 九、接口 1:在class前添加abstract关键字,定义成抽象类。 抽象类不能实例化,即不能通过new生成对象,但 注意可以追加{}生成匿名实现类 ,仍然不是它自己的实例化。 抽象类可以有构造函数,但不能直接调用,通常由实现类构造函数调用。 抽象类的方法前添加abstract关键字,定义抽象方法,派生类必须重写该方法,然后才能实例化。Java类中如有抽象方法,则类符号前必须也要添加abstract关键字,定义为抽象类(可以没有抽象方法)。 抽象类中可以没有抽象方法, 即可以全部是含方法体的非抽象方法