2017年9月

java中,当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这一问题,在java中专门提供了一个super关键字用于访问父类的成员(成员变量、成员方法和构造方法)。

使用super关键字调用父类的成员变量和成员方法

方法:

super.成员变量
super.成员方法([参数1,参数2……])

注意:

  1. super不是引用类型,super中储存的不是内存地址。
  2. super代表的是当前子类对象中父类型特征。
  3. 子类和父类都有某个数据时,如果需要在子类中访问父类中的数据,需要使用super。
  4. super可以用在成员方法中,也可以用在构造方法中。
  5. super和this相同,都不能用在静态方法中。

使用super关键字调用父类的构造方法

方法:

super([参数1,参数2……])

注意:

  1. 通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。
  2. 在子类的构造方法中一定会调用父类的某个构造方法,这时可以在子类的构造方法中通过super指定调用父类的哪个构造方法,如果没有指定,在实例化子类对象时,会自动调用父类无参的构造方法。
  3. 通过子类的构造方法去调用父类的构造方法,作用是给当前子类对象中的父类型特征赋值。
  4. super([参数1,参数2……])与this([参数1,参数2……])不能共存。

在java中,允许在一个类的内部定义类,这样的类称作内部类,这个内部类所在的类称作外部类。

内部类的访问规则

  1. 内部类可以直接访问外部类中的成员,包括私有。之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this
  2. 外部类要访问内部类,必须建立内部类对象。

访问格式

  • 成员内部类

1.当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中。可以直接建立内部类对象。
格式:

    外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

2.当内部类在成员位置上,就可以被成员修饰符所修饰。
比如,

  • private:将内部类在外部类中进行封装。
  • 静态内部类

当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。
注意:当内部类中定义了静态成员,该内部类必须是静态的。当外部类中的静态方法访问内部类时,内部类也必须是静态的。
格式:

外部类名.内部类名 变量名 = new 外部类名.内部类名();

当描述事物时,事物的内部还有事物,该事物用内部类来描述。
因为内部事务在使用外部事物的内容。

  • 方法内部类

内部类定义在局部时,
1.不可以被成员修饰符修饰
2.可以直接访问外部类中的成员,因为还持有外部类中的引用。但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。

匿名内部类

1.匿名内部类其实就是内部类的简写格式。
2.定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。
3.匿名内部类的格式: new 父类或者接口(){定义子类的内容}
4.其实匿名内部类就是一个匿名子类对象。可以理解为带内容的对象。
5.匿名内部类中定义的方法最好不要超过3个。

java中,当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这一问题,在java中专门提供了一个super关键字用于访问父类的成员(成员变量、成员方法和构造方法)。

使用super关键字调用父类的成员变量和成员方法

方法:

super.成员变量
super.成员方法([参数1,参数2……])

注意:

  1. super不是引用类型,super中储存的不是内存地址。
  2. super代表的是当前子类对象中父类型特征。
  3. 子类和父类都有某个数据时,如果需要在子类中访问父类中的数据,需要使用super。
  4. super可以用在成员方法中,也可以用在构造方法中。
  5. super和this相同,都不能用在静态方法中。

使用super关键字调用父类的构造方法

方法:

super([参数1,参数2……])

注意:

  1. 通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。
  2. 在子类的构造方法中一定会调用父类的某个构造方法,这时可以在子类的构造方法中通过super指定调用父类的哪个构造方法,如果没有指定,在实例化子类对象时,会自动调用父类无参的构造方法。
  3. 通过子类的构造方法去调用父类的构造方法,作用是给当前子类对象中的父类型特征赋值。
  4. super([参数1,参数2……])与this([参数1,参数2……])不能共存。

在java中,针对类、成员方法和属性提供了四种访问级别,分别是private、default、protected、public。这四种控制级别有小到大依次为:private--default--protected--public。

具体介绍如下:

private(类访问级别):如果类的成员被private访问控制符来修饰,则这个成员只能被该类的其他成员访问,其他类无法直接访问。类的良好封装就是通过private关键字来实现的。
default(包访问级别):默认修饰符,如果一个类或者类的成员不适用任何访问控制的修饰符修饰,则默认是default,这个类或者类的成员只能被本包中的类访问。
protected(子类访问级别):如果一个类的成员被protected访问控制符修饰,那么这个成员能被其所有子类访问(包括同一包下的子类,也包括不同包下的子类).
public(公共访问级别):这是一个最宽松的访问控制级别,如果一个类或者类的成员被public控制修饰符修饰,那么这个类或者类的成员能被所有的类访问。
访问控制级别表:

publicprotecteddefaultprivate
同一个类中
同一个包中
子类
不同包中

在程序开发过程中,需要将编写的类分目录存放便于管理为此引入了包(package)机制,程序可以通过声明包的方式对java类定义目录。

包的定义和使用

定义:通常把功能相同的类存放在相同的包中。在声明包时,使用package语句,具体示例如下:

package pkg1[.pkg2[.pkg3…]];
当编译一个声明了包的java源文件,需要使用命令生成与包名对应的目录,使用“-d”来指定生成的类文件的位置,可以用“.”来表示当前目录,也可写绝对路径,最终。class文件将存放于改目录下,如果该目录不存在,java虚拟机会帮你自动创建。具体示例如下:

javac -d [路径];
注意:

包的声明只能位于java源文件的第一行。

建立定包名不要重复,可以使用url来完成定义,url是唯一的。

java中包的命名规范:全小写字母拼写。

包机制的引入,可以对.class文件进行集中的管理。如果没有显式地声明package语句,类则处于默认包下。
包的定义示例:

 package com.sunxiaoning;
 public class HelloWorld
 {
     public static void main()
     {
         System.out.println("HelloWorld!!!");
     }
 }

使用:在程序开发中,位于不同包中的类会经常需要互相调用。调用时需要使用“包名.类名”的格式来调用,同意包中的类,包名可以省略。在实际开发中,定义的类都是包含包名的,而且还有可能定义很长的包名。为了简化代码,java中提供了import关键字,使用import可以在程序中一次导入某个指定包下的类,这样就不必在每次用到该类时都书写完整类名了,具体格式如下:

import 包名.类名;
注意:

import通常出现在package语句之后,类定义之前。
如果需要用到一个包的多个类时,则可以使用“import.包名.”的方式导入该包下的所有类。建议,不要写通配符 ,需要用到包中的哪个类,就导入哪个类。
jar包

在实际开发过程中,经常需要开发一些类供给别人使用,为了能更好地管理这些类,在JDK中提供了一个jar命令,使用这个命令能够将这些类打包成一个文件,这个文件的扩展名为.jar。它是一种压缩文件,独立于任何操作系统平台,习惯上也将jar文件称为jar包。在使用jar包时,只需要在classpath环境变量中包含这个这个jar文件的路径,java虚拟机就能够自动在内存中解压这个jar文件,根据包名所对应的目录结构去寻找所需要的类。
压缩jar文件

jar -cvf [jar包的名称].jar [需要压缩的文件名]
参数:

-c代表创建归档的文件
-v代表在标准输出中生成详细输出
-f代表指定归档文件名
解压

jar -xvf [jar包的名称].jar
java语言中常用包

java.lang : java的核心包 jdk1.2版本以后,该包中的类自动导入。
java.awt: 用于制作图形界面。
java.io:input output 用于操作设备上的数据。
java.util : 这里定义是java的工具类。集合,日期。
java.net:用于网络通讯的。

find命令

格式:find 搜索范围

搜索文件

find  / -name  install.log

避免大范围搜索,会非常耗费系统资源

find是在系统当中搜索符合条件的文件名。如果需要匹配,使用通配符匹配,通配符是完全匹配。

find  /root  –iname  install.log

不区分大小写

find  /root –user  root

按照所有者搜索

find  /root  –nouser

查找没有所有者的文件

find  /var/log/  -mtime  +10

查找10天前修改的文件

-10 10天内修改文件
10 10天当天修改的文件
+10 10天前修改的文件

atime 文件访问时间
ctime 改变文件属性
mtime 修改文件内容

find  -size  25k

查找文件大小是25kB的文件

-25 小于25kB的文件
25 等于25kB的文件
+25 大于25kB的文件

find  -inum  262422

查找i节点是262422的文件

find  /etc  -size  +20k  -a  -size  -50k

查找/etc/目录下,大于20kB并且小于50kB的文件

-a and 逻辑与,两个条件都满足
-o or 逻辑或,两个条件满足一个即可

find  /etc  –size  +20k  -a  -size  -50k  -exec  ls –lh {}\;

查找/etc/目录下,大于20k并且小于50k的文件,并显示详细信息

-exec/-ok命令{}\;对搜索结果执行操作

搜索字符串命令grep

格式:grep [选项] 字符串 文件名

在文件当中匹配符合条件的字符串

选项:

-i  忽略大小写
-v  排除指定字符串

find命令与grep命令的区别

find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配。
grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式时包含匹配。

由于ubtun系统默认是没有激活root用户的,提示 Authentication failure说明还没有激活root用户,需要我们自己手工进行操作,激活root用户需要在命令行界面下,或者在终端中输入如下命令:

sudo passwd

系统会显示:Password:(输入你当前用户的密码 )

系统会显示:Enter new UNIX password:(重新设置的root的密码 )

系统会显示:Retype new UNIX password:(重复root的密码 )

成功之后就可以使用了。