final,内部类,Object类,System类

一,final,内部类

1.1 final关键字:
不可改变。可以用于修饰类、方法和变量。 
类:被修饰的类,不能被继承。 
方法:被修饰的方法,不能被重写。 
变量:被修饰的变量,不能被重新赋值。
引用变量:被修饰的引用变量,地址值不能改变。

1.2 使用方式
格式如下:

 修饰符final class 类名 {    
}

比如: public final class String、public final class Math、public final class Scanner等api中的类都被final关键字修饰。

含义:当前这个类不能有任何的子类。(太监类)

注意:一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写(因为没儿子)
1.3修饰方法
格式如下:

修饰符  final  返回值类型  方法名(参数列表) {
     //方法体 
}

注意:重写被final修饰的方法会报错。

1.4修饰局部变量
修饰局部变量—>基本数据类型
基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改。

1.5修饰引用类型的局部变量
引用类型的局部变量,被final修饰后,只能指向一个对象,地址不能再更改。但是不影响对象内部的成员变量值的修改。

1.6修饰成员变量
成员变量涉及到初始化的问题,初始化方式有两种,只能二选一:显示初始化:

public class User {
                 final String USERNAME = "王五";
                 private int age;
              }

构造方法初始化:

  public class User {
    	     final String USERNAME;
    	     private int age;
    	     public User(String USERNAME, int age) {
                   this.USERNAME = USERNAME;
                   this.age = age;
               }
            }
注意事项:
	1. 由于成员变量具有默认值,所以用了final之后必须手动赋值,不会再给默认值
	2. 对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值。
	3. 必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值。

二,内部类

2.1定义:
内部类:将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。
内部类分为两种:成员内部类、局部内部类(包含匿名内部类)

2.2成员内部类(权限修饰符都可以用)
成员内部类:定义在类中方法外的类。
格式:

权限修饰符class 外部类{
		权限修饰符class 内部类{
		}
		}
	使用地方描述:若一个事物内部还包含其他事物,就可以使用内部类这种结构。比如,汽车类Car中包含发动机类Engine,这时Engine 就可以使用内部类来描述,定义在成员位置。
	*访问特点:
	内部类可以直接访问外部类的成员,包括私有成员。 
	外部类要访问内部类的成员,必须要建立内部类的对象。*
	创建内部类对象格式:
  外部类名.内部类名 对象名 = new 外部类型().new 内部类型()
内部类中成员变量同名访问:
访问外部类变量,格式是:`外部类名称.this.外部类成员变量名`

2.3局部内部类(权限修饰符都不能用)
局部内部类:如果一个类是定义在一个方法内部的,那么这就是一个局部内部类。
“局部”:只有当前所属的方法才能使用它,出了这个方法外面就不能用了。
定义格式:

修饰符 class 外部类名称 {
    修饰符 返回值类型 外部类方法名称(参数列表) {
        class 局部内部类名称 {
            // ...
        }
    }
}

注意事项:
1、局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】。(从Java 8+开始,只要局部变量不变,那么final关键字可以省略。)

2.4匿名内部类(不可以有权限修饰符和static)
匿名内部类:是内部类的简化写法。它的本质是一个带具体实现的父类或者父接口的匿名的子类对象。

开发中,最常用到的内部类就是匿名内部类了。以接口举例,当你使用一个接口时,得做如下几步操作,
	1.定义子类 
	2.重写接口中的方法 
	3.创建子类对象 
	4. 调用重写后的方法
	我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?匿名内部类就是做这样的快捷方式。
	使用匿名内部类的前提:匿名内部类必须继承一个父类或者实现一个父接口。 
	格式:
new 父类名或接口名(){
		//所有抽象方法重写
		@Override
		public void method(){
		//代码块
		}
		};
	使用注意:
		1、如果接口的实现类(或者是父类的子类)只需要使用唯一的一次,
通常在方法的形式参数是接口或者抽象类时,也可以将匿名内部类作为参数传递。
注意事项:
	1. 匿名内部类,在【创建对象】的时候,只能使用唯一一次。
	如果希望多次创建对象,而且类的内容一样的话,那么就需要使用单独定义的实现类了。
	   2. 匿名对象(直接new),在【调用方法】的时候,只能调用唯一一次。
	如果希望同一个对象,调用多次方法,那么必须给对象起个名字。
	   3. 匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】
	强调:匿名内部类和匿名对象不是一回事。

三,object类

3.1 概述
java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。
如果一个类没有特别指定父类,那么默认则继承自Object类
3.2 toString
public String toString():返回该对象的字符串表示。
toString方法:
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。
如果直接打印对象的名字,其实就是调用对象的toString p=p.toString();打印的是一个地址值。如果想要得到这个对象的内容,需要重写toString方法。

注意:看一个类是否重写了toString,直接打印这个类的对象即可,如果没有重写toString方法那么打印的是对象的地址值;在我们直接使用输出语句输出对象名的时候,其实通过该对象调用了其toString()方法。

四,System类

1、概述
java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:
public static long currentTimeMillis():返回以毫秒为单位的当前时间。
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定的数据拷贝到另一个数组中。
public static void exit(int status):终止当前运行的Java虚拟机。 该参数作为状态代码; 按照惯例,非零状态码表示异常终止。

 arraycopy方法:`public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)`:将数组中指定的数据拷贝到另一个数组中。数组的拷贝动作是系统级的,性能很高。System.arraycopy方法具有5个参数,含义分别为:
参数序号	参数名称	参数类型	参数含义
1	src	Object	源数组
2	srcPos	int	源数组索引起始位置
3	dest	Object	目标数组
4	destPos	int	目标数组索引起始位置
5	length	int	复制元素个数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值