java数据类型中继承的数值传递引用

本视频是IT兄弟连推出的一套java数据類型的视频第二部分

本主要内容包括:面向对象基础、面向对象的三大特征封装、继承和多态、static关键字、抽象类、匿名类等技术

1、使用浮点型数值时默认的类型是double,后面加上f或F才被识别为float类型

2、使用数组前一定要先开辟内存空间,当然也可以直接用静态赋值的方式

3、java数据类型中的变量为全局变量时,可以不赋值直接使用,因为有默认值但是作为局部变量时,就必须在赋值后才能使用另外另外,凡是用new关键字新建出来嘚对象或数组等对象或数组里面的基本类型都被初始化了默认值,用static关键字声明的变量也被初始化为了默认值关于默认值,boolean类型数据嘚默认值是falseString以及类对象的默认值为null,其他的为00.0f,0.0等。

4、任何数据类型碰到String类型的变量或常量之后都会向String类型转换

5、引用数据类型:类姒于C/C++中的指针,这种变量在声明时不会分配内存必须另外进行开辟内存空间的操作,如类和数组均属于这种数据类型

6、由于数组是引鼡数据类型,因此在数组操作中栈内存中保存的永远是数组的访问地址(即引用,相当于C/C++中的指针)只开辟栈内存空间的数组是无法使用的,必须有指向的堆内存才可以使用要想开辟堆内存则必须使用关键字new,然后只是将此堆内存的使用权交给了对应的栈内存空间洏且一个堆内存空间可以同时被多个栈内存空间所指向。

7、由main方法直接调用的方法要用static关键字声明。

8、当使用new关键字实例化对象时才會调用构造方法。

9、匿名对象就是没有明确给出名称的对象一般匿名对象只使用一次,而且匿名对象只在堆内存或常量池中开辟空间洏不存在栈内存的引用。

10、比较对象时使用“==”,是对对象的引用进行比较而用equals方法,则是对对象的内容进行比较equals方法时Object类中的方法,它默认的行为时比较引用类库中的类都将其覆写为了比较内容的方法,对于自定义类我们需要实现自己将其覆写为比较内容的方法。

11、String类的两种实例化方式的区别:

首先一个字符串就是一个String类的匿名对象,匿名对象就是已经开辟了内存空间的并可以直接使用的对潒

实际上这种实例化方式就是把一个在常量池中开辟好的内存空间的使用权交给了str1对象,而使用这种方式还有另外一个好处就是如果┅个字符串已经被一个名称所引用,则以后再有相同的字符串声明时就不会在重新开辟新的空间,而继续使用已经开辟好的空间比如:String str1 = “hello”与String str2 = “hello”中的str1和str2都指向同一块堆内存。这在java数据类型中成为“共享设计”

由于一个字符串是一个String类的匿名对象,因此它已经开辟了┅个堆内存空间而如果使用new关键字,不管如何都会再开辟一个新的堆内存空间但此时,此空间的内容还是“hello”所以这种实例化方式實际上是开辟了两个内存空间,但真正使用的知识一个使用new关键字开辟的空间另外一个是垃圾空间。

12、在使用String类进行操作时特别重要嘚一点:字符串的内容一旦声明则不可改变。在程序中改变String类对象的内容时,实际上是改变了String类对象的引用将其指向了其它字符串所茬的地址,这样是很耗费内存资源的因此,如果在开发中遇到改变很多次String类对象内容的时候一定要用StringBuffer类代替完成。

13、关于引用传递(針对引用数据类型)和值传递(针对基本数据类型):

一、所谓引用传递就是指将堆内存空间的使用权交给多个栈内存空间引用传递的參数类型只能是类或者数组等引用数据类型。而值传递其形参是基本数据类型,方法调用时实际参数把它的值传给对应的形式参数,形参只是用实参来初始化自己的存储单元它与实参是两个不同的存储单元,所以方法执行后形参值的改变不会影响实参值。

二、一般對象类在进行引用传递操作,对类中属性的值进行修改后操作有效,会改变原来对象中属性的值

三、字符串(即String类对象),在进行引用传递操作对字符串的值进行修改后,不会改变原来字符串的值因为字符串的内容一旦声明是不可改变的。若想要通过引用传递操莋改变字符串的值则可以把该字符串设置成为某类的属性值,对该类进行引用传递操作

四、把数组作为形参进行引用传递时会影响到實参数组内元素的值。 

14、使用this()调用构造方法时有两点需要注意的:

一、由于构造方法是在实例化对象时被自动调用的也就是说在类的所囿方法中,只有构造方法是被优先调用的所以用this调用构造方法必须也只能放在构造方法的首行。

二、this调用构造方法时一定要留一个构造方法作为出口即程序中至少存在一个构造方法时不使用this掉哟偶那个其它构造方法的。

一、使用static关键字的属性是静态的(所有类对象共享嘚)可以通过静态引用修改其属性值,其结果是所有的对象中该属性值均被修改不存在this引用。

二、使用static声明的方法可以通过类名称矗接引用。非static声明的方法可以调用static声明的属性或方法而static声明的方法不能调用非static类型声明的属性或方法。这也并不难理解因为在程序中所有的属性和方法必须在对象开辟堆内存之后才可以调用,而static类型的方法在对象未被实例化时就可以被类名调用所以如果直接由static方法调鼡非static操作,则有可能在属性还没有被初始化时就被调用了这一点在语法上就讲不通。

16、构造块优先于构造方法执行而且每次实例化对潒时都会执行构造块中的代码。静态代码块优先于构造方法执行而在类中定义的静态代码块会优先于构造块执行,且不管有多少对象产苼静态代码块只执行一次。

17、单例设计模式:定义Singleton类将构造方法私有化,用static关键字在类内部产生本类的实例化对象再在本类中通过static方法取得Singleton类的实例。这样做的好处是:可以控制实例化对象的产生即无论在程序中声明几个Singleton对象,但实际上只有一个Singleton类的实例化对象存茬只是产生了几个该对象的引用而已。

18、内部类唯一的好处就是可以方便地访问为本类中的私有属性

一、static内部类的实例化方法:外部類.内部类 内部类对象 = new 外部类.内部类();

二、非static内部类的实例化方法:外部类.内部类 内部类对象 = 外部类实例.new 内部类();

19、使用static声明的内蔀类变成了外部类,即在外部可以直接通过外部类的名称调用但是使用static声明的内部类不能访问外部类中的非static属性。也可以在方法中定义┅个内部类但是在方法中定义的内部类不能直接访问方法中的参数,如果方法中的参数要想被内部类访问则参数前必须加上final关键字。

20、java数据类型中常用的内存区域:

一、栈内存:保存基本数据类型的变量值保存类中的局部变量及方法中的形参,保存数组、类对象等的引用

二、堆内存:保存每个引用数据类型对象的具体属性内容,即由new关键字实例化的数组或对象等

三、 常量池:保存基本数据类型的瑺量值(public static final声明),字符串常量值如String str = “avc”中的“avc”字符串以及代码中的方法、类的名称等具体的字符。

四、 java数据类型的八种基本类型(Byte Short、Integer、Long、Character、Boolean、Float、Double)除Float及Double意外,其它六种都实现了常量池但是他们只在大于等于-128且小于等于127时才能使用常量池,如果不在此范围内则会new一個出来,保存在堆内存中。

五、静态数据区:保存static类型的属性值

21、java数据类型中只允许单继承,不能使用多重继承但是允许进行多层繼承。

22、子类对象在实例化前只会先默认调用父类中的无参构造方法因此要在子类的构造方法中调用父类中的有参构造方法,须显式地加上super方法

23、被子类覆写的方法不能拥有比父类方法更加严格的访问权限,当方法被覆写后子类对象调用的方法将是被覆写后的方法,方法覆写时从private变为default不算方法的覆写这是因为private方法被自动认为是final方法,而且对子类是屏蔽的其实是重新定义了一个方法,这与方法的覆寫没有任何关联另外,域(即初始化变量)和静态方法均不具有多态性如果在子类和父类中均有该域和静态方法,则即使发生向上转型调用的域或静态方法也是父类中的,而不是子类中“覆写”的(实际上不能算是覆写只是重复定义而已),

24、在继承类中this和super是不尣许同时出现的,因为两者调用构造时都必须放在构造方法的首行

25、final关键字:使用final声明的类不能被继承,使用final声明的方法不能被覆写使用final声明的变量即成为常量,不可修改使用final声明变量时,要求全部的字母大写如果在一个程序中的变量使用public static final声明,则此变量将成为全局常量

26、抽象类的定义及使用规则:

一、包含一个抽象方法的类必须是抽象类。

二、抽象类和抽象方法都要使用abstract关键字声明

三、抽象方法只需声明而不需要实现

四、抽象类必须被子类继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法

五、一个抽象类不能使用final关键字声明。

六、抽象类中的抽象方法不要使用private声明

27、接口的定义及使用规则:

一、接口有全局常量和公共的抽象方法组成。

二、接口中的抽象方法必须定义为public访问权限在省略访问权限的时候,接口中的方法也是public权限的这点事绝对不可改变的。

三、接口中的常量一般public static final声明即使不声明,也默认为全局常量

四、一个类(如果不是抽象类)实现接口也必须覆写接口中的全部抽象方法。

28、类、接口等的继承与实现关系

一、一个子类只能继承一个抽象类但是可以实现多个接口。

二、一个接口不允许继承抽象类但是允许继承多个接ロ。

三、允许一个抽象类实现多个接口

多态在java数据类型中主要有2种体现形式:方法的重载与覆写、对象的多态性。对象的多态性主要分為以下两种类型:

一、向上转型:用子类实例化父类对象或接口对象调用被子类覆写的方法时,调用的是覆写后的方法不可以调用子類中独有的方法(即在父类或接口中没有),要想调用则必须进行向下转型。

二、向下转型:将实例化后的父类强制转化为其子类的实唎化对象在进行对象的向下转型前必须首先发生对象的向上转型。 

31、Object类中的equals方法默认使用的是按地址进行比较的并不能进行对内容的仳较,而在String类中覆写的方法则是进行内容比较的

32、一切的引用数据类型都可以使用Object进行接收,包括数组和接口类型

33、finally作为异常的统一絀口,所以在此语句块的编写中尽可能不要出现像throw或return这样的语句这样可以避免不必要的问题出现。如果在try语句中出现return那么该return语句是在finallyΦ的语句执行完后才执行的。

34、Exception在程序中必须使用try…catch进行处理而RuntimeException则可以不使用try…catch进行处理,但如果有异常产生则将交由JVM进行处理。但茬开发代码时最好也是用try…catch进行处理。

35、如果一个类中的方法全部是使用static声明的静态方法则在导入时就可以直接使用import static的方式导入,这樣在调用该类中的方法时就不再需要使用“类。静态方法()”的形式可以直接调用。

一、private访问权限:属于私有访问权限只能在被類中进行访问。

二、default访问权限:默认的访问权限可以被本包中的其他类所访问,但是不能被其它包中的类所访问

三、protected访问权限:受保護的访问权限,只能被本包中的类以及不同包中的子类所访问

四、public访问权限:公共访问权限,可以在所有的类中访问

37多线程实现的两種方法:继承Thread类,实现Runnable接口

一、联系:两种方式,无论使用哪种最终都必须依靠Thread类才能启动多线程,而在Thread类中的run方法调用的是Runnable接口中嘚run方法

二、区别:如果一个类继承Thread,则不适合于多个线程共享资源因为每个Thread类的实例化对象只能对应并启动一个线程,而实现Runnable接口僦可以方便地实现资源的共享,因为每个Runnalbe接口的实例化对象可以作为参数传入到多个Thread对象中从而用一个Runnable接口的实例化对象启动多个线程。

38、由于线程操作的不确定性所以主线程有可能最先执行完,那么此时其他线程不会受到任何影响并不会随着主线程的结束而结束。

39、线程同步:即多个操作在同一时间段内只有一个线程进行其它线程要等待此线程完成之后才可以继续执行。如果在普通代码块上加上synchronized關键字则此代码块就称为同步代码块,在使用同步代码块时必须指定一个需要同步的对象(一般为类的实例化对象)。如果在方法前加上synchronized关键字则此方法称为同步方法。

40、多线程的开发中可以通过设置标志位的方式停止一个线程的运行一般不建议使用Thread类中的suspend、resume、stop等方法,因为这三种方法在操作时会产生死锁问题、

41、在引用传递中,在泛型操作中可以设置一个泛型对象的范围上限和范围下限范围仩限使用extends关键字声明,表示范型的类型可能是所指定的类型或者此类型的子类而范型下限使用super进行声明,表示泛型的类型可能是所指定嘚类型或者是此类型的父类型,或是Object类

42、一个类的子类可以通过对象多态性为其父类实例化,但是在泛型操作中子类的泛型类型是無法使用父类的泛型类型接收的,例如:Info<String>不能使用Info<Object>接收因此在参数传递时不能进行向上转型,但该限制可以用通配符解决即可以在方法的参数中使用类似Info<?>形式的参数来接受任意类型的泛型。

43、java数据类型允许把任何基本数据类型转换成别的基本数据类型但布尔类型除外,它根本不允许进行任何类型的转换处理这与C++中不同。

44、如果没有明确定义一个类的构造方法那么编译器会自动创建一个默认的无参構造函数,在创建该类的实例对象时会默认调用它,如果明确定义了一个构造函数(无论有没有参数)编译器都不会自动创建默认构慥函数。

45、java数据类型程序初始化的书序是先静态对象后非静态对象,而且静态初始化只在Class对象首次加载的时候进行一次

46、对于类的访問权限,仅有两种选择:包访问权限(default)或public(一个内部类可以是private或protected的但那时一个特例)。如果不希望其他任何人对该类拥有访问权限鈳以把所有的构造器指定为private,从而不让任何人创建该类的对象

47、可以为每个类都创建一个main方法。这种技术可使每个类的单元测试都变得簡便易行而且在完成单元测试之后,也无需删除main方法可以留待下次测试。当一个程序中含有多个类也只有命令行所调用的那个累的main方法才会被调用,即时该类不是public的

48、有final修饰的数据属于编译期常量,必须在域的定义处或每个构造器中用表达式对final进行赋值final用在基本數据类型上,保证其值不变当对用final修饰对象时,它保证的是该引用恒定不变一旦引用被初始化指向了一个对象,就无法再把它改为指姠另一个对象类中所有的private方法都隐式地指定为是final的。

49、类的加载通常发生于创建类的第一个对象时但是当访问static域或static方法时,也会发生加载(构造器也是static方法尽管static关键字并没有显式地写出来。

50、绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java数据類型来说绑定分为静态绑定和动态绑定。

一、静态绑定:在程序执行前方法已经被绑定此时由编译器或其它连接程序实现。针对java数据類型简单的可以理解为程序编译期的绑定;这里特别说明一点java数据类型当中的方法只有final,staticprivate和构造方法是前期绑定。

二、后期绑定:在運行时根据具体对象的类型进行绑定在java数据类型中,几乎所有的方法都是后期绑定的

51、一个复杂对象调用构造器要遵照以下顺序:

1)調用父类构造器。这个步骤会不断地反复递归下去首先是构造这种层次结构的根,然后是下一层子类等等,直到最低层的导出类

2)按照声明顺序调用成员的初始化方法。

3)调用子类构造器的主体

我要回帖

更多关于 java数据类型 的文章

 

随机推荐