学习Java的Day05

知识点

关键字,经常使用类(super,static,final):

super

  • 子类对父类的引用,只能在非静态方法中使用
  • 引用父类的成员变量的格式为 super.成员变量名称
  • 引用父类的非静态方法的格式为 super.方法名(参数列表)
  • 引用父类的构造方法的格式为 super(参数列表)

final

  • final修饰这个类就不能被继承,但不影响建立对象,如系统的String类
  • final修饰的方法不能被重写,但父类中没有被final修饰方法,子类覆盖后能够加final。
  • final修饰局部变量,只可以赋值一次,当修饰的是引用的类型时,不能被从新赋值,可是能够修改对象的属性
  • final修饰成员变量,最终的变量,常量,固定的值,必定要初始化,不能被二次赋值。

static(开发中慎用,会很耗内存

  • 静态的,成员信息在类中在方法区中,常量池(常量值),静态内存区(静态成员信息)。
  • 不能修饰类,可是能够修饰方法,该方法是静态方法,在类中,经过类区执行调用。
  • 被static修饰的变量,是静态变量,在类中。静态全局变量:静态属性-->在类中存储,被全部对象共享。

思考:super,this 与 static 为何不能共存????

  static静态的,是不变的,在java中static修饰成员属性,方法时,表示该属性/方法能够被类名直接调用,如工具类等java

而this表明本类对象的引用,一般用与成员变量与局部变量重名时。sql

  super表明子类对父类满参构造函数的初始化,也是须要产生对象才能够使用可是考虑到虚拟机加载顺序为先加载类,当被实例化才产生对象。因此若是并存则表示类和对象同时加载,显然是不合逻辑的。数组

 

代码块:

  • 局部代码块
    • 定义在方法中,用户划分区域的。( {}:做用域啊,划定工做区间 )
  • 构造代码块
    • 构造代码块和方法并列,定义在类成员变量位置的代码块,每次建立对象的时候都会执行,优先于构造方法
    • 内容写的是语句,声明变量,不能实现功能体(方法)。
  • 静态代码块
    • 定义在类的成员变量位置的用static修饰的代码块。
    • 它优先于当前类主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。
    • 该类无论建立多少对象,静态代码块只执行一次。
    • 可用于给静态变量赋值,用来给类进行初始化,初始化成员变量,加载一些成员信息。

  执行顺序:父类静态代码块>子类静态代码块>main函数>构造代码块>构造方法函数

 

(注意:方法只能并列使用,不能嵌套使用!!!!!!!!!)工具

访问修饰符

–--------------
public protected default private
同一类中

同一包中this

(子类与无关类)spa

 
不一样包的子类
   
不一样包中的无
关类
     

 

注意:

  • 对于protected不一样包中的子类只能在子类内部调用,在外部子类是没法调用成员变量和方法的

  • 在不一样包下的无关类中,只能访问public修饰的成员信息

  • 在不一样包的子类中,子类的对象是能够访问被protected修饰的父类的成员信息的

 

 

系统经常使用类:

API ---> Application Interface  应用程序接口.net

java中的五大经常使用包: java.lang、 java.util、 java.io、 java.net、 java.sqlcode

object类

equals方法在非空对象引用上实现等价关系:

  • 自反性 :对于任何非空的参考值xx.equals(x)应该返回true
  • 它是对称的 :对于任何非空引用值xyx.equals(y)应该返回true当且仅当y.equals(x)回报true
  • 传递性 :对于任何非空引用值xyz ,若是x.equals(y)回报truey.equals(z)回报true ,而后x.equals(z)应该返回true
  • 它是一致的 :对于任何非空引用值xy ,屡次调用x.equals(y)始终返回true或始终返回false ,没有设置中使用的信息equals比较上的对象被修改。
  • 对于任何非空的参考值xx.equals(null)应该返回false
  • equals类方法Object实现对象上差异可能性最大的相等关系; 也就是说,对于任何非空的参考值xy ,当且仅当xy引用相同的对象( x == y具备值true )时,该方法返回true
  • 请注意,不管什么时候覆盖该方法,一般须要覆盖hashCode方法,以便维护hashCode方法的通用合同,该方法规定相等的对象必须具备相等的哈希码。

toString方法返回一个“textually表明”这个对象的字符串。 结果应该是一个简明扼要的表达,容易让人阅读。 建议全部子类覆盖此方法。

    该toString类方法Object返回一个由其中的对象是一个实例,该符号字符`的类的名称的字符串@对象

    和对象的哈希码的无符号的十六进制表示。

    换句话说,这个方法返回一个等于下列值的字符串:

 getClass().getName() + '@' + Integer.toHexString(hashCode())

string类

  •   String类表明字符串。 Java程序中的全部字符串文字(例如"abc" )都被实现为此类的实例。

  •   字符串不变; 它们的值在建立后不能被更改。 字符串缓冲区支持可变字符串。

  •    由于String对象是不可变的,它们能够被共享。

 

练习代码:

/*
本身建立一个类,写一个静态方法,传入一个int数组,得 到一个字符串[元素1,元素2,….]
 */
public class HomeWork02 {
    public static void main(String[] args) {
        int[]  arr = new  int[]{1,55,66,99,88,74,22,44,32,22};

        System.out.print("[");
        for (int  i = 0;i<arr.length;i++){

            if (i!=arr.length-1){
                System.out.print(arr[i]+",");
            }else {
                System.out.print(arr[i]);
            }
        }
        System.out.println("]");
    }
}

  

public class HomeWork01 {
    public static void main(String[] args) {
        // 在控制台输入字符串,统计出大写的字符的个数,小写的字符个数,数字类型的字符个数,以及其余字符的个数
        Scanner sc = new Scanner(System.in);
        int big = 0;
        int small = 0;
        int num = 0;
        int other = 0;

        System.out.println("请输入一串字符串");
        String str = sc.next();

        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) >= 65 && str.charAt(i) <= 90) {
                big++;
            } else if (str.charAt(i) >= 97 && str.charAt(i) <= 122) {
                small++;
            } else if (str.charAt(i) >= 48 && str.charAt(i) <= 57) {
                num++;
            } else {
                other++;
            }
        }
        System.out.println("大写字母有:" + big + "个");
        System.out.println("小写字母有:" + small + "个");
        System.out.println("数字有:" + num + "个");
        System.out.println("其余字符有:" + other + "个");
    }

}
相关文章
相关标签/搜索