Java基础知识总结(51)

news/2024/12/29 23:23:05/

(1)内部类

    类内部定义的类就叫做内部类,包含内部类的类也被叫做外部类或者宿主类内部类隐藏在外部类中,不允许同一个包中的其他类访问内部类成员可以直接访问外部类的私有数据,内部类被当成其外部类成员,同一个类的成员之间可以相互访问。但外部类不能访问内部类的实现细节,例如内部类的成员变量。

(2)非静态内部类 /**

  • 外部类

  • @author Ray * */ public class Outer { /**

    • 内部类

    • @author Ray * */ public class Inner{

    } }

/**

  • 外部类

  • @author Ray * */ public class Outer { private int number; public Outer(int number) { this.number = number; } /**

    • 非静态内部类

    • @author Ray * */ public class Inner{ private String name; private int age; public Inner(String name, int age) { super(); this.name = name; this.age = age; } public void test() { //内部类中可访问外部类的私有成员 System.out.println("外部类的私有变量:"+age); } } }

/**

  • 测试类

  • @author Ray * */ public class Test {

    public static void main(String[] args) {

    Inner inner = new Outer(20).new Inner("张三",18);
    inner.test();

    }

} (3)静态内部类:

 当内部类被static修饰后,就成为了静态内部类,和类变量、类方法、静态代码块一样具有同等的地位。static 关键字的作用是把类的成员变成类相关,而不是实例相关,即 static 修饰的成员属于整个类,而不属于单个对象。

/**

  • 外部类

  • @author Ray * */ public class Outer2 {

    static int number = 100;

    int count = 200; /** *内部类

    • @author Ray * */ static class Inner{ public void print() { //访问外部类类成员 System.out.println(number); //编译出错,静态内部类不能访问外部类的实例变量 //System.out.println(count); }

    }

}

public class Test {

public static void main(String[] args) {Inner inner = new Outer2().Inner();
}

}

(4)局部内部类

如果把一个内部类放在方法里定义,则这个内部类就是一个局部内部类,局部内部类仅在该方法里有效。
由于局部内部类不能在外部类的方法以外的地方使用,因此局部内部类也不能使用访问控制符和 static 修饰符修饰。

/**

  • 外部类

  • @author Ray * */ public class Outer3 {

    public void test() { /** * 局部内部类 * @author Ray * */ class Inner{

    }

    }

}

(5)匿名内部类 new 实现接口() | 父类构造器(参数列表){ //内部类实现 }

(6)枚举类: 在特定情况下,一个类的对象是有限且固定的,这种实例有限且固定的类,Java中称为枚举类。 枚举类和普通类的差异: 1、枚举类可以实现一个或多个接口,使用 enum 定义的枚举类默认继承了java.lang.Enum 类,而不是默认继承 Object 类,因此枚举类不能显式继承其他父类。其中 java.lang.Enum 类实现. java.lang.Serializable 和 java.lang. Comparable 两个接口。 2、使用 enum 定义、非抽象的枚举类默认会使用 final 修饰,因此枚举类不能派生子类。 3、枚举类的构造器只能使用 private 访问控制符, 如果省略了构造器的访问控制符。则默认使用 private 修饰; 如果强制指定访问控制符,则只能指定 private 修饰符。 4、枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举类永远都不能产生实例。列出这些实例时,系统会自动添加 public static final 修饰,无须程序员显式添加。

/**

  • 性别 枚举

  • @author Ray * */ public enum Gender {

    //相当于Gender类的对象 MALE("男"),FEMALE("女");

    public String name; private Gender(String name) { this.name = name; }

}

public class SwitchDemo {

public static void main(String[] args) {switch(Gender.FEMALE) {case FEMALE:System.out.println("女性");break;case MALE:System.out.println("男性");}
​
}

}

输出:女性

    枚举类中重要的方法:

/**

  • 测试类

  • @author Ray * */ public class Test {

    public static void main(String[] args) {

    //Values()方法返回该枚举的所有实例,即当前的MALE和FEMALE枚举值
    for(Gender g:Gender.values()) {//返回此枚举实例的名称,这个名称就是定义枚举类时列出的所有枚举值之一。System.out.println(g);//返回枚举值在枚举类中的索引值System.out.println(g.ordinal());//返回枚举常量的名称System.out.println(g.toString());}

    }

}

输出:

MALE 0 MALE FEMALE 1 FEMALE

    枚举类的构造方法:

/**

  • 性别 枚举

  • @author Ray * */ public enum Gender {

    //相当于Gender类的对象 MALE("男"),FEMALE("女"); public String name; //定义构造方法 private Gender(String name) { this.name = name; }

}

    枚举中的抽象方法:

public enum Operation {

PLUS
{public double eval(int a,int b) {return a+b;}
},
MINUS
{public double eval(int a,int b) {return a-b;}
},
TIMES
{public double eval(int a,int b) {return a*b;}
},
DIVDE{public double eval(int a,int b) {return a/b;}
};
​
//定义抽象方法,为不同的枚举值提供实现
public abstract double eval(int a,int b);

}

/**

  • 测试类

  • @author Ray * */ public class Test {

    public static void main(String[] args) {

    System.out.println(Operation.PLUS.eval(5,2));
    System.out.println(Operation.MINUS.eval(5,2));
    System.out.println(Operation.TIMES.eval(5,2));
    System.out.println(Operation.DIVDE.eval(5,2));

    }

}

(7)字符串

    在Java中字符串就是连续的字符序列,Java提供了String,StringBuilder、StringBuffer 3个类来封装字符串

(8)String构造方法

    string类提供了大量的构造方法来创建String对象

public class Test {

public static void main(String[] args) {
​//通过字面量的方式创建字符串对象String s1 = "hello world";//创建一个包含0个字符的String对象String s2 = new String();//使用指定的字符集将指定的byte[]解码成一个新的String对象String s3 = new String(s1.getBytes(),Charset.forName("utf-8"));//根据字符串字面量来创建String对象String s4 = new String("世界你好");//根据StringBuffer对象来创建StringString s5 = new String(new StringBuffer("StringBuffer"));//根据StringBuilder来创建对应的String对象String s6 = new String(new StringBuilder("StringBuilder"));System.out.println(s1);System.out.println(s2);System.out.println(s3);System.out.println(s4);System.out.println(s5);System.out.println(s6);
}

}

    String类是一个不可变类,不可变类即类中的成员变量都使用final修饰,这也就说明一个String对象被创建以后,包含在这里对象中的字符序列是不可改变的,直到整个对象被销毁。并且在Java中所有字符串相关的类都是Charsquence接口的子类。

(9)String类中的API:

equals(String string)   判断两个字符串是否相等
equalsIgnoreCase(String string) 忽略大小写判断两个字符串是否相等
length()    获取字符串长度
charAt(int index)   获取某个索引处的字符判断字符串是否回文:/*** * @author Ray**/public class Palindrome {public static void main(String[] args) {String s1 = new String("levelq");System.out.println(invert(s1));System.out.println(doublePointer(s1));}public static boolean invert(String s) {String temp = "" ;for(int i = s.length()-1;i>=0;i--) {temp+=s.charAt(i);}if(temp.equals(s)) {return true;}return false;   }public static boolean doublePointer(String s) {int left = 0;for(int right = s.length()-1;left<right;--right){if(s.charAt(left)!=s.charAt(right)) {return false;}left++;right--;        }return true;}}
indexOf(String string)  获取字符串第一次出现的位置
indexOf(String string,int startIndex)   从startIndex处查找第一次出现的位置
lastIndexOf(String string)  字符串最后一次出现的位置
startsWith(String string)   判断是否以string开始
endsWith(String string) 判断是否以string结尾
compareTo(String string)    比较字符串大小
toLowerCase()   字符串转小写
toUpperCase()   字符串转大写
subString(int index)    从index位置处截取到字符串末尾
subString(int startIndex,int endIndex)  从startIndex位置开始,到endIndex结束,前闭后开
trim()  去除字符串首尾空格
split(String string)    以string对字符串进行分割,此方法会省略末尾空字符
split(String string,int limit)  对字符串进行分割,此方法不会省略末尾空字符
join(String s,String...str) 以s为连接符,连接str内字符串
concat(String str)  连接字符串
valueOf()   基本类型转字符串
contains(String str)    判断是否包含str
toCharArray()   将字符串转换成字符数组
intern()    判断字符串在常量池中是否存在,如果不存在,则复制,1.6是将实例复制,1.7及以后是将引用复制。
isEmpty()   判断字符串是否为空
​实例:

public class StringDemo {

public static void main(String[] args) {String s1 = new String("http://WWW.baidu.com"); String s2="baidu";//boolean equals(String string) 判断两个字符串是否相等 地址 长度 每个字符 equals只能判断是否相等,而compareTo除了看出是否相等,还等看出大小System.out.println("判断两个字符串是否相等");String s = new String("xyz");System.out.println("xyz".equals(s));//true

    //boolean equalsIgnoreCase(String string)忽略大小写后判断两个字符串是否相等System.out.println("XyZ".equalsIgnoreCase(s));//true

    //int length() 获取字符串的长度System.out.println(s2.length());//5

    //char charAt(int index) 获取字符串对应索引的字符char c = s2.charAt(1);System.out.println(c);//a

    //indexOf(String string) 判断某个子字符串在字符串上第一次出现处的索引System.out.println(s1.indexOf('.')); //10//indexOf(String string,int startIndex)判断某个子字符串在字符串上从指定索引startindex开始第一次出现处的索引System.out.println(s1.indexOf('.', 11));//16

    //lastindexOf(String string) 返回指定子字符串在此字符串中最后一次出现处的索引。System.out.println(s1.lastIndexOf('.')); //16//lastindexOf(String str,int endsIndex) 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引endsIndex开始反向搜索。System.out.println(s1.lastIndexOf('.',15)); //10

    //boolean contains(String string) 判断前面的字符串是否包含后面的字符串System.out.println("helloworld".contains("world"));//trueSystem.out.println(s.contains("https://"));//false//boolean startsWith(String string)   判断当前字符串是否以某个字符串开始System.out.println(s1.startsWith("https://"));//false//boolean endsWith(String string)   判断当前字符串是否以某个字符串结尾System.out.println("test.txt".endsWith(".java"));//falseSystem.out.println("test.txt".endsWith(".txt"));//true//int comparTo(String string) System.out.println("按照字典顺序比较两个字符串大小");int res1 = "abc".compareTo("abc");System.out.println(res1);//0  前后一致 10-10 = 0int res2 = "abcd".compareTo("abcde");System.out.println(res2);//-1 前小后大 9-10 = -1int res3 = "abce".compareTo("abcd");System.out.println(res3);//1 前大后小 10-9 = 1int res4 = "abc".compareTo("bac");System.out.println(res4);//-1 两个字符串对应位置的字符依此按照字典顺序比较,分出胜负就不比较了//toLower() 将字符串转换为小写System.out.println(s1.toLowerCase());//http://www.baidu.com//toUpper() 将字符串转换为大写System.out.println(s1.toUpperCase());//HTTP://WWW.BAIDU.COM//string subString(int index) 将字符串从索引index位置截取到结尾System.out.println(s1.substring(7));//WWW.baidu.com//string subString(int index) 将字符串从索引startsindex位置截取到索引endsindex位置,前闭后开区间System.out.println(s1.substring(7,10));//WWW//trim() 去除字符串前后的空格System.out.println("  xyz  ".trim());//xyz//replace(String string) 返回一个新的字符串,它是通过用 `newChar` 替换此字符串中出现的所有 `oldChar` 得到的System.out.println(s1.replace("http://","https://"));//https://WWW.baidu.com//split(String string) 分割字符String [] time = "2022-5-22".split("-");for(int i=0;i<time.length;i++) {System.out.println(time[i]);}/**  2022522* *///split(String string,int limit) 分割,保留末尾的空字符System.out.println("");String [] time1 = "2022-5-22   ".split("-",3);for(int i=0;i<time1.length;i++) {System.out.println(time1[i]);}/**  2022522   * *///join(String s,str1,str2....) 以s为连接符,连接字符串System.out.println(String.join(".", "www","baidu.com"));//www.baidu.com//concat(String string) 将指定字符串连接到此字符串的结尾。System.out.println(s2.concat(".com"));//baidu.com//char[] toCharArray 将字符串转换为字符数组char [] chars=s2.toCharArray();for(int i = 0;i<chars.length;i++) {System.out.println(chars[i]);}/**  baidu* */

    //intern() 返回字符串对象的规范化表示形式。System.out.println(s1.intern());//http://WWW.baidu.com//isEmpty() 判断某个字符串是否为空字符串 数组长度是length属性,字符串长度是length方法System.out.println(s2.isEmpty());//false    
}

}


http://www.ppmy.cn/news/1415878.html

相关文章

【Kafka】Zookeeper集群 + Kafka集群

Zookeeper 概述 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 Zookeeper 工作机制★★★ Zookeeper从设计模式角度来理解&#xff1a; 1&#xff09;是一个基于观察者模式设计的分布式服务管理框架&#xff1b; 它负责存储和管理大家都关…

灯光1-灯光与阴影的关系

灯光与阴影之间存在密切的关系。在计算机图形学和视觉效果中&#xff0c;灯光是用来模拟现实世界中的光照情况的一种技术。通过设置不同的灯光属性和位置&#xff0c;可以产生各种不同的光照效果&#xff0c;其中之一就是阴影。 当一个物体被照亮时&#xff0c;光线会被物体表…

通过IPV6+DDNS实现路由器远程管理和Win远程桌面控制

前期需要的准备&#xff1a; 软路由&#xff0c;什么系统都可以&#xff0c;要支持IPV6&#xff0c;能够自动添加解析 光猫的管理员账号&#xff0c;能够进入光猫修改配置&#xff0c;拨号上网账号 域名账号和DNS服务 主要步骤&#xff1a; 利用管理员账号&#xff0c;进入…

CentOS7上pt-archiver工具进行数据库表归档——筑梦之路

pt-archiver 是一个用于 MySQL 数据归档和清理的强大工具。它可以将旧数据从原表移动到归档表&#xff0c;同时保持原表的性能不受影响。 前提条件 表有做分区或者有时间字段 在线安装 sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm sud…

【前端】项目Vue2升级Vue3注意事项

代码改动 前言 Vue2项目页面直接迁移到Vue3环境下,依旧2的写法,页面各种报错,尤其element-ui升级 element-plus 组件改动比较大;以下仅供参考: 1、图标 // 旧代码 <el-button type="primary" icon="el-icon-search" @click="handleQuery&…

idea 卡怎么办

设置内存大小 清缓存重启 idea显示内存全用情况 右下角

【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(2)

1.问题描述&#xff1a; 开发服务端推送&#xff0c;客户端能收到离线推送&#xff0c;但是推送收到的通知只能从手机顶部下拉看到&#xff0c;无法收到一个顶部的弹框。请问是什么原因&#xff1f; 解决方案&#xff1a; 可能原因一&#xff1a; 消息提醒的方式与消息类别有…

Vue之列表渲染

总的来说&#xff0c;列表渲染中key最好选择数据中唯一&#xff01;尽量不要默认index <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…