zoukankan      html  css  js  c++  java
  • java day4

    字符串

    1.内容不可改变

    2.可以共享使用

    3.效果上相当于char[]数组,但是底层原理是byte

    三种构造

    public String()

    public String(char[] array)

    public String(byte[] array)

    用双引号直接写的字符串,就在字符串常量池中

    对于基本类型 == 是数值比较

    对于引用类型 ==是地址比较

    public int length () : 返回此字符串的长度。
    public String concat (String str) : 将指定的字符串连接到该字符串的末尾。
    public char charAt (int index) : 返回指定索引处的 char值。
    public int indexOf (String str) : 返回指定子字符串第一次出现在该字符串内的索引。
    public String substring (int beginIndex) : 返回一个子字符串,从beginIndex开始截取字符串到字符
    串结尾。
    public String substring (int beginIndex, int endIndex) :返回一个子字符串,从beginIndex到
    endIndex截取字符串。含beginIndex,不含endIndex。

    public class DemoString {

    public static void main(String[] args) {
      String str1 = "dvvdvdvsdscascavbae";
      int length = str1.length();
      System.out.println( length);


      String str2 = "hello";
      String str3 = "world";
      String str4 = str2.concat(str3);

      System.out.println(str4);
      char ch = str4.charAt(5);
      System.out.println(ch);
      System.out.println(str4.indexOf("llo"));
      System.out.println(str4.indexOf("fe"));
    }

    }

    字符串截取

    subString()

    转换功能的方法

    public char[] toCharArray () : 将此字符串转换为新的字符数组。
    public byte[] getBytes () : 使用平台的默认字符集将该 String编码转换为新的字节数组。
    public String replace (CharSequence target, CharSequence replacement)

    都会创建一个新的string,而不会修改原string

    分割

    public String[] split(String regex)

    regex参数其实是个正则表达式若按照 . 切分, 必须写\.

    练习1

    定义一个方法,把数组{1,2,3}按照指定个格式拼接成一个字符串。格式参照如下:[word1#word2#word3]。

    package Day4.java;

    public class DemoString {

    public static void main(String[] args) {
      int[] array = {1,2,3};
      String s = tranmit(array);
      System.out.println(s);

    }

    public static String tranmit(int[] arr) {
      String string = new String("[");
      for(int i =0;i<arr.length;i++) {
      if(i==arr.length-1) {
        string = string.concat("word"+arr[i]+"]");
      }else {
        string = string.concat("word"+arr[i]+"#");
    }
    }
      return string;
    }
    }

    2....

    键盘录入一个字符,统计字符串中大小写字母及数字字符个数

    import java.util.Scanner;
    public class DemoString {

    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Please input");
      String str = sc.next();
      int Upper = 0;
      int Lower = 0;
      int number = 0;
      int another = 0;

      char[] array = str.toCharArray();
      for(int i = 0;i<array.length;i++) {
        char ch = array[i];
      if('A'<= ch && ch <= 'Z') {
        Upper+=1;
      }else if ('a'<= ch && ch <= 'z') {
        Lower+=1;
      }else if ('0'<= ch && ch <='9') {
        number+=1;
      }else {
        another+=1;
    }
    }
        System.out.println(Upper);
        System.out.println(Lower);
        System.out.println(number);
        System.out.println(another);
    }

    }

    static关键字

    一旦使用了static,这样的内容不再属于自己,而是属于类

    所以凡是本类的对象,都共享一份

    静态方法

    1.可以直接访问类变量和静态方法。
    2.不能直接访问普通成员变量或成员方法(非静态)
    3.不能使用this关键字。

    静态代码快

    第一次用到本类的时候,静态代码快执行唯一一次

    Arrays类
    toString(int[] a) :返回指定数组内容的字符串表示形式。

    sort(int[] a) :对指定的 int 型数组按数字升序进行排序。
    如果是自定义类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持

    将一个随机字符串中的所有字符升序排列,并倒序打印。

    import java.util.Arrays;
    public class Array {

    public static void main(String[] args) {
    String line = "ysKUreaytWTRHsgFdSAoidq";

    char[] ch = line.toCharArray();

    System.out.println();
    Arrays.sort(ch);
    for(int i = ch.length-1;i>=0;i--) {
    System.out.print(ch[i]);
    }
    }

    }

    math小练习
    求-10.8到5.9之间所欲绝对值男足条件的整数个数

    import java.lang.Math;

    public class Array {

    public static void main(String[] args) {
    double min_num = -10.8;
    double max_num = 5.9;
    int Count = 0;
    for(double i = Math.ceil(min_num);i<=max_num;i++)
    {
    if (Math.abs(i)>=6 || Math.abs(i)<=2.1 ) {
    Count+=1;
    }
    }

    System.out.println(Count);




    }
    }

    继承

    解决的问题:共性抽取

    定义 public class 子类名称 extend 类名称{}

    如果子类父类中出现重名的成员变量,这时的访问规则

    直接通过子类对象访问
    等号左边是谁就优先用谁,没有则向上找
    间接通过成员方法访问
    方法属于谁就优先用谁,没有则向上找

    局部变量 直接写
    本类的成员变量 this.成员变量名
    父类的成员变量 super.成员变量名

    public class DemoExtendsFiled {

    public static void main(String[] args) {
    Zi zi = new Zi();
    zi.method();
    }

    }


    public class Fu {

    int num = 10;

    }

    public class Zi extends Fu {

    int num = 20;
    public void method() {
    int num = 30;
    System.out.println(num);
    System.out.println(this.num);
    System.out.println(super.num);
    }
    }

    当父子类的方法重名
    创建的对象是谁,就优先用谁,如果没有则向上找

    无论是成员变量还是方法,找不到的时候,都是向上找父类

    方法覆盖重写: 创建的是子类对象,则优先用子类方法

    @Override 写在方法前面,检测是否为有效的复写
    1,父子类的方法名称相同,参数列表相同
    2.子类的返回值范围必须不超过父类
    3.子类方法的权限必须大于父类的权限修饰符
    public > protect > (default) 空 > private

    重写的应用

    class Phone {
    public void sendMessage(){
    System.out.println("发短信");
    }
    public void call(){
    System.out.println("打电话");
    }
    public void showNum(){
    System.out.println("来电显示号码");
    }
    }
    //智能手机类
    class NewPhone extends Phone {
    //重写父类的来电显示号码功能,并增加自己的显示姓名和图片功能
    public void showNum(){
    //调用父类已经存在的功能使用super
    super.showNum();
    //增加自己特有显示姓名和图片功能
    System.out.println("显示来电姓名");
    System.out.println("显示头像");
    }
    }
    public class ExtendsDemo06 {
    public static void main(String[] args) {
    // 创建子类对象
    NewPhone np = new NewPhone();
    // 调用父类继承而来的方法
    np.call();
    // 调用子类重写的方法
    np.showNum();
    }
    }

    继承后的特点——构造方法
    构造方法的名字是与类名一致的。子类是无法继承父类构造方法。

    1.子类有一个默认的super(),所以一定先调用父
    2.可以通过super来子类构造调用重载构造
    3.super的父类构造,必须是子类方法的第一个语句(即一个子类构造调用多次父类构造)


    public class Fu {

    public Fu() {
    System.out.println("Fu");
    }
    public Fu(int num) {
    System.out.println("FuFu");
    }

    }


    public class Zi extends Fu{

    public Zi() {
    super(20);
    System.out.println("zi");
    }

    }

    public class DEext {

    public static void main(String[] args) {
    Zi zi = new Zi();
    }

    }

    输出:
    FuFu
    zi


    this关键字,用来访问本类内容

     

     继承的特点

     1. Java只支持单继承,不支持多继承。

    //一个类只能有一个父类,不可以有多个父类。
    class C extends A{} //ok
    class C extends A,B... //error

    2. Java支持多层继承(继承体系)。

    class A{}
    class B extends A{}
    class C extends B{}

    顶层父类是Object类。所有的类默认继承Object,作为父类。

    3. 子类和父类是一种相对的概念。

    抽象类

    父类中的方法不确定如何进行{}方法体实现,那么该方法就是一个抽象方法

    如果一个类包含抽象方法,那么该类必须是抽象类

    public abstract void name();并在类名前加abstract

    1.不能直接new创建抽象类对象

    2.必须用一个子类继承父类

    3.子类必须覆盖重写抽象父类方法中所有的抽象方法【去掉abstract,然后补上方法体大括号】

    4.创建使用

    public abstract class Animal {

      public abstract void eat();

    }

    public class Cat extends Animal{

      @Override
      public void eat() {
      System.out.println("cat eat fish");

    }

    }

    public class DemoAnimal {

      public static void main(String[] args) {
        Cat cat = new Cat();
        cat.eat();
    }

    }

    注意事项

    1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
      理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
    2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
      理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。
    3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。


    4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象
    类。

  • 相关阅读:
    拼接数组的几种方法
    小议GetHashCode()方法
    如何在窗体间传递数据!
    设置TextBox控件的滚动条位置
    关于Console.Read()方法的一些误解!
    从内存布局角度谈谈值类型和引用类型!
    在Windows线程中模拟其他用户上下文!
    将文本插入TextBox控件的光标位置!
    用C#实现屏幕键盘!
    CLR的程序集定位算法
  • 原文地址:https://www.cnblogs.com/njuwyx/p/12670107.html
Copyright © 2011-2022 走看看