title: 内部类、String类常量池、常用方法等
date: 2020-08-10 20:00:36
tags: [java基础]
内部类
成员内部类
非静态内部类
- 1.非静态内部类必须寄存在一个外部类对象里, 因此,如果有一个非静态内部类对象那么一定存在对应的外部类对象。非静态内部类对象单独属于外部类的某个对象。
- 2.非静态内部类可以直接访问外部类的成员,但是外部类不能直接访问非静态内部类成员
- 3.非静态内部类不能有静态方法、静态属性和静态初始化块
- 4.外部类的静态方法、静态代码块不能访问非静态内部类,包括不能使用非静态内部类定义变量、创建实例。
测试非静态内部类
package cn.yishan.oop;
public class TestInnerClass {
public static void main(String[] args) {
//创建内部类对象
Outer.Inner inner = new Outer().new Inner();
inner.show();
}
}
class Outer{
private int age = 10;
public void testOuter(){
}
class Inner{
int age = 20;
public void show(){
int age = 30;
System.out.println("外部类的成员变量age:"+Outer.this.age);
System.out.println("内部类的成员变量age:"+this.age);
System.out.println("局部变量age:"+age);
}
}
}
静态内部类
测试静态内部类
package cn.yishan.oop;
public class TestStaticInnerClass {
public static void main(String[] args) {
Outer2.Inner2 inner = new Outer2.Inner2();
inner.speak();
}
}
class Outer2{
static class Inner2{
public void speak(){
System.out.println("hhh ");
}
}
}
匿名内部类
测试匿名内部类
package cn.yishan.oop;
public class TestAnonymousInnerClass {
public static void test01(AA a){
a.aa();
}
public static void main(String[] args) {
TestAnonymousInnerClass.test01(new AA() {
@Override
public void aa() {
System.out.println("TestAnonymousInnerClass.main(...).new AA(){...}.aa()");
}
});
}
}
interface AA{
void aa();
}
局部内部类
服务于方法 用的很少
String基础
测试String类
package cn.yishan.oop;
public class TestString {
public static void main(String[] args) {
String str = "abc";
String str2 = new String("def");
String str3 = "abc" + "defgh";
String str4 = "11" + 20;
String str10 = "yishan";
String str11 = "yishan";
String str12 = new String("yishan");
System.out.println(str10 == str11);
System.out.println(str11 == str12);
//通常比较字符串时,使用equals
System.out.println(str11.equals(str12));
}
}
public class TestString2 {
public static void main(String[] args) {
String s1 = "core java";
String s2 = "Core java";
//提取下标为3的字符
System.out.println(s1.charAt(3));
//字符串的长度
System.out.println(s2.length());
//比较两个字符串是否相等
System.out.println(s1.equals(s2));
//比较两个字符串(忽略大小写)
System.out.println(s1.equalsIgnoreCase(s2));
//字符串s1中是否包含java
System.out.println(s1.indexOf("java"));
//将s1中的空格替换为&
String s = s1.replace(" ","&");
System.out.println(s);
}
}
public class TestString3 {
public static void main(String[] args) {
String s = "";
String s1 = "How are you?";
//是否以How开头
System.out.println(s1.startsWith("How"));
//是否以you结尾
System.out.println(s1.endsWith("you"));
//提取子字符串:从下标为4的开始到字符串结尾为止
s = s1.substring(4);
System.out.println(s);
//提取子字符串:下标[4,7) 不包括7
s = s1.substring(4,7);
System.out.println(s);
//转小写
s = s1.toLowerCase();
System.out.println(s);
//转大写
s = s1.toUpperCase();
System.out.println(s);
String s2 = " How old are you!! ";
//去除字符串首尾的空格。注意:中间的空格不能去除
s = s2.trim();
System.out.println(s);
//因为String是不可变字符串,所以s2不变
System.out.println(s2);
}
}