内部类和常用类(自用)

内部类和常用类

内部类

成员内部类

package study;

public class Example {
	int age = 1;
	class Inner {
//成员内部类不能定义静态成员  可以用final        
        static int age1=1;//编译报错
		static final int age2=2;
		int age = 15;     
		public void show() {
//外部类和内部类存在重名属性时,会优先访问内部类属性               
			System.out.println(age);//age=15
//如若要访问外部类 外部类名.this.name
			System.out.println(Example.this.age);
		}
	}
}

package study;
//要导入内部类
import study.Example.Inner;

public class Test {
	public static void main(String[] args) {
//内部类名 对象名=new 外部类名().new 内部类名();        
		Inner person = new Example().new Inner();
		person.show();
	}
}


静态内部类

package study;

public class Example {
	int age = 1;

	static class Inner {
		int age = 15;

		public void show() {
			System.out.println(age);
//通过类名直接调用外部类静态成员,调用外部类对象要先创建外部对象            
			Example person = new Example();
			System.out.println(person.age);
		}
	}

}

package study;
//要导入内部类
import study.Example.Inner;

public class Test {
	public static void main(String[] args) {
//直接创建内部类对象        
		Inner person = new Example.Inner();
		person.show();

	}
}

局部内部类

package study;
//定义在外部类方法中,作用范围和创建对象范围仅限于当前方法
//访问局部变量,变量必须是常量final
public class Example {
	String str = "外部类";

	void show() {
		class Inner {//创建在方法中的类
			String str = "内部类";

			void show2() {
                //输出外部类
				System.out.println(Example.this.str);
				System.out.println(str);
			}
		}
		Inner inner = new Inner();//创建外部对象
		inner.show2();//调用局部内部类方法
	}

}

package study;

public class Test {
	public static void main(String[] args) {
		Example example = new Example();
		example.show();
	}
}


匿名内部类

//没有类名的局部内部类(一切特征都与局部内部类相同)
//必须继承一个父类或者实现一个借口
//定义类丶实现类丶创建对象的语法合并,只能创建一个该类的对象
//优点:减少代码量  缺点:可读性较差
package study;

public interface Usb {
	void lianJie();
}

package study;

public class Mouse implements Usb {//实现接口

	@Override
	public void lianJie() {
		System.out.println("鼠标连接成功...");
        
		Usb usb = new Usb() {//匿名内部类
			@Override
			public void lianJie() {
				System.out.println("风扇连接成功...");
			}
		};
		usb.lianJie();
	}

}

package study;

public class Test {
	public static void main(String[] args) {
		Usb usb=new Mouse();
		usb.lianJie();
	}
}

常用类

Object类

//getClass(); 
//判断两个引用中实际存储对象类型是否一致,返回引用中存储的实际对象类型
package study;

public class Student {
	int age;
	String name;
	public Student(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
    
//toString();
//默认返回对象类型和十六进制哈希值    
		@Override
	public String toString() {
		return  age + ", " +name;
	}
//equals();  
//默认实现为(this==obj),比较两个地址是否相同  
//可进行覆盖,比较两个对象的内容是否相同    
    @Override
	public boolean equals(Object obj) {
		if (this == obj)//比较地址
			return true;
		if (obj == null)//判断obj是否为空
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;//强制转换
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
    
//finalize();
//垃圾对象:没有有效引用指向此对象时,为垃圾对象    
//自动回收机制:jvm的内存耗尽,一次性回收所有垃圾对象
//手动回收机制:使用System.gc();  通知jvm执行垃圾回收    
    @Override
    protected void finalize() throws Throwable {
		System.out.println(this+"对象被回收了");
	}
}

package study;

public class Test {
	public static void main(String[] args) {
		Student person1 = new Student(16,"张三");
		Student person2 = new Student(18,"张三");
		Class class1=person1.getClass();//返回参数类型
		Class class2=person2.getClass();
		if (class1==class1) {
			System.out.println("类型相同");
		}
 
//hashCode();
//返回对象的哈希码值
        //赋予相同地址
        Student person3=person1;
		System.out.println(person1.hashCode());
		System.out.println(person2.hashCode());
        //一般情况下相同对象返回相同哈希码,
		System.out.println(person3.hashCode());
        
        //运行结果:17, 李四对象被回收了
		//        16, 张三对象被回收了

        new Student(16,"张三");
		new Student(17,"李四");
		System.gc();//通知jvm执行垃圾回收  
	}
}

包装类

package study;

public class Demo {

	public static void main(String[] args) {
//装箱和拆箱        
		int age=15;
		//装箱:基本类型转换为引用类型的过程
		Integer integer = new Integer(age);
		System.out.println(integer);
        
		//拆箱:引用类型转换为基本类型的过程
		int num=integer.intValue();
		
		//自动装箱
		int age1=30;
		Integer integer1=age1;
//系统自动调用Integer.valueOf();
//将int或String转换为Integer  
        Integer integer3=Integer.valueOf(a1);
		//自动拆箱
		int num1=integer1;

//基本类型和字符串类型的转换
        //int转换String
		int a=15;
		String a1=Integer.toString(a, 16);
		System.out.println(a1);
		//String转换int
		String str="150";
		int a2=Integer.parseInt(str);
		System.out.println(a2);
		//String转换Boolean
		String str2="true1";//非”true“为false
		boolean b=Boolean.parseBoolean(str2);
		System.out.println(b);
	}

}

Integer缓冲区
package study;

public class Demo {

	public static void main(String[] args) {
		Integer integer1 = new Integer(100);
		Integer integer2 = new Integer(100);
        //结果为false,两者地址不同
		System.out.println(integer1==integer2);
		       
		Integer integer3=Integer.valueOf(100);
		Integer integer4=Integer.valueOf(100);
        //结果为true
        //Integer.valueOf()缓冲范围为-128~127,传入数值在此范			围内且数值相同则地址相同
		System.out.println(integer3==integer4);
		
		Integer integer5=200;
		Integer integer6=200;
        //结果为false,超出范围,方法创建新的地址
		System.out.println(integer5==integer6);
	}

}

String类

package study;

public class Demo {

	public static void main(String[] args) {
        //在字符串池创建一个对象,地址指向方法区
		String str1="a";
		String str2="a";
        //结果为true
		System.out.println(str1==str2);
		
        //在堆和方法区各创建一个对象,地址指向堆
		String str3 = new String("a");
		String str4 = new String("a");
        //false
		System.out.println(str3==str4);
        //true
        //equals() 比较内容
		System.out.println(str3.equals(str4));
		//false
		System.out.println(str1==str4);
        //true
		System.out.println(str1.equals(str4));

	}

}

String常用方法

package study;

public class Demo {

	public static void main(String[] args) {
		String str="java,java,java";
//length() 返回字符串长度        
		System.out.println(str.length());
//charAt() 返回指定位置字符,注意从0开始      
		System.out.println(str.charAt(0));
//contains() 判断是否包含某个字符
        //true
		System.out.println(str.contains("j"));
        //false
		System.out.println(str.contains("2"));
        
//toCharArray() 返回字符串对应的数组        
        char a[]=str.toCharArray();
        //访问返回数组a[4]  ,
		System.out.println(a[4]);
//indexOf() 返回字符串首次出现的位置
        //结果为4
		System.out.println(str.indexOf(","));
        //结果为5
        //从第5个位置开始寻找
		System.out.println(str.indexOf(",",5));
//lastIndexOf() 返回字符串最后一次出现的位置
		System.out.println(str.lastIndexOf("a"));
        
        
		String str1="  jAva   ";      
//trim() 去掉字符串前后的空格
        //结果java
        System.out.println(str1.trim());
//toUpperCase() 把小写改成大写
        //结果JAVA
		System.out.println(str1.toUpperCase());
//toLowerCase() 大写改小写
        //java
		System.out.println(str1.toLowerCase());
		
		String str2="hello.java";
//startsWith(str) 判断是否以str开头
        //true
		System.out.println(str2.startsWith("hello"));
//endsWith(str) 判断是否以str结尾
        //true
		System.out.println(str2.endsWith("java"));
        
//replace() 将新字符串替换原来的字符串     
		String str2="hello.java";
        //输出 hello.php
		System.out.println(str2.replace("java","php"));
//split()  将字符串进行拆分       
		String str3="java is the best ,programing language";
        //[]表示选择里面内容进行拆分 
        //+表示可以选个多个[]里的内容进行拆分
		String arr []=str3.split("[ ,]+");
		for (String string : arr) {
            //换行输出每个单词
			System.out.println(string);
		}
		
		String str4="hello";
		String str5="HELLO";
        //结果为false
		System.out.println(str4.equals(str5));
//equalsIgnoreCase() 忽略大小写进行比较
        //结果为true
		System.out.println(str4.equalsIgnoreCase(str5));

//compareTo() 根据编码表位置相减       
		String s1="abc";//97
		String s2="xyz";//120
        //从第一个字母开始比较,如果相同则后延
        //结果为-23
		System.out.println(s1.compareTo(s2));
		
		String s3="abc";
		String s4="abcaa";
        //如字母相同则比较长度
        //-2
		System.out.println(s3.compareTo(s4));
    
//StringBuffer和StringBuilder的使用
//StringBuffer:可变长字符串,JDk1.0提供,运行效率慢丶线程安全     //StringBuilder:可变长字符串,JDk5.0提供,运行效率快丶线程不安全 
//和String区别:1.效率比String高 2.比String节省内存
        StringBuffer str6 = new StringBuffer();
		//StringBuilder str6 = new StringBuffer();
//append() 追加字符串
		str6.append("java");
        //结果 java
		System.out.println(str6.toString());
		str6.append("是最好的编程语言");
        //结果 java是最好的编程语言
		System.out.println(str6.toString());
//insert()  在指定位置添加字符串,注意从0开始 含头不含尾		
		str6.insert(0,"我在最前面");
        //结果 我在最前面java是最好的编程语言
		System.out.println(str6.toString());
//replace() 在指点位置替换字符串		
		str6.replace(0,5,"hello,");
        //结果 hello,java是最好的编程语言
		System.out.println(str6.toString());
//delete()  删除指定位置字符串		
		str6.delete(0,6);
        //结果 java是最好的编程语言
		System.out.println(str6.toString());
        
      	//效率快慢体现
    //  System.out.println(str6.toString());
//System.currentTimeMillis() 获取当前时间
		long start=System.currentTimeMillis();
		String str=" ";//用时17秒
	//	StringBuilder str = new StringBuilder();//用时9毫秒
		for (int i = 0; i < 99999; i++) {
			str+=i;
	//		str.append(i);
		}
		System.out.println(str.toString());
		long end=System.currentTimeMillis();
		System.out.println("用时"+(end-start));
	}

}

BigDecimal的使用

package study;
import java.math.BigDecimal;  //精确计算浮点数
public class Demo {

	public static void main(String[] args) {
        //double数据为近似值
		double q=1.0-0.9;
        //结果 0.09999999999999998
		System.out.println(q);
        //字符串数值最精准
		BigDecimal a = new BigDecimal("1.0");
		BigDecimal b = new BigDecimal("0.9");
//add() 加法
        //因为不是所有的浮点数都能够被精确的表示成一个double 类型		   值,有些浮点数值不能够被精确的表示成 double 类型值,因此			  它会被表示成与它最接近的 double 类型的值。必须改用传入		   String的构造方法。这一点在BigDecimal类的构造方法注释			  中有说明。
		BigDecimal c1=a.add(b);
		System.out.println(c1);
//subtract() 减法		
		BigDecimal c2=a.subtract(b);
		System.out.println(c2);
//multply() 乘法		
		BigDecimal c3=a.multiply(b);
		System.out.println(c3);
//当结果小数位无穷时,要设置保留小数位 
//divide(除数,保留几位小数,保留形式) 除法
//ROUND_HALF_UP  四舍五入        
		BigDecimal c4=new BigDecimal("10").divide(new BigDecimal(3),2,BigDecimal.ROUND_HALF_UP);
		System.out.println(c4);
	}

}

Date类

//表示特定的瞬间,精确都毫秒。大部分方法已经被Calendar类中的方法取代
package study;
import java.util.Date;//导入类
public class Demo {

	public static void main(String[] args) {
       Date date1 = new Date();
        //输出当前时间
        //结果  Wed Apr 14 17:00:32 CST 2021
       System.out.println(date1.toString());
       	//结果	2021-4-14 17:00:32
       System.out.println(date1.toLocaleString());
       //返回昨天时间
       Date date2 = new Date(date1.getTime()-(60*60*24*1000));
      	//结果2021-4-13 17:00:32
       System.out.println(date2.toLocaleString());
//after() 判断date2是否在date1之后   
       boolean b1=date1.after(date2);
        //true
       System.out.println(b1);
beforer() 判断date2是否在date1之前          
       boolean b2=date1.before(date2);
        //false
       System.out.println(b2);
        
//compareTO() 比较date1和date2 相等返回0,大于返回1,小于返回-1
       int d=date1.compareTo(date2);
        // 1
       System.out.println(d);
//比较时间是否相同       
       boolean b3=date2.equals(date1);
        //false
       System.out.println(b3);
	}

}

Calendar类

//提供获取或设置各种字段的方法
package study;
import java.util.Calendar;
public class Demo {

	public static void main(String[] args) {
//构造方法:protected Calendar() 修饰符是protected,无法直接创建	该对象
//getinstance()  使用默认时区和区域获取日历       
       Calendar calendar=Calendar.getInstance();
//getTime()  返回一个Date表示此日历的时间 
//toLocaleString() 输出日历格式        
        System.out.println(calendar.getTime()
                           .toLocaleString());
//getTimeInMillis()  以毫秒为单位返回该日历的时间值        
       System.out.println(calendar.getTimeInMillis());
//get(int field)   返回给定字段(如年丶月丶日)的值      
       int year=calendar.get(Calendar.YEAR);
        //月份从0开始
       int mouth=calendar.get(Calendar.MONTH);
       int day=calendar.get(Calendar.DAY_OF_MONTH);
       int hour=calendar.get(Calendar.HOUR_OF_DAY);
        //分
       int minute=calendar.get(Calendar.MINUTE);
        //秒
       int  second=calendar.get(Calendar.SECOND);
       System.out.println(year+"年"+(mouth+1)+"月"+day+"日"+hour+":"+minute+":"+second);
 
 //set()  修改指定字段的值       
       calendar.set(Calendar.YEAR,2022);
        //输出年份为2022
  System.out.println(calendar.getTime().toLocaleString());
 //add() 指定字段的增加      
       calendar.add(Calendar.YEAR,-5);    
        //结果  2017  (2022-5)
        System.out.println(calendar.getTime().           			toLocaleString());
 
//getActualMaximum();  指定字段最大值      
int max = calendar.getActualMaximum(Calendar.MONTH);
        //11  月份是0~11
//getActualminimum();  指定字段最小值   
        //结果 1
		int min = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
		System.out.println(max + "  " + min);

	}

}

SimpleDateFormat类

//SimpleDateFormat是一个以与语言环境有关的方式老格式化和解析日期的具体类
//进行格式化(日期转文本)丶解析(文本转日期)
package study;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo {

	public static void main(String[] args) throws Exception{//抛出异常
        //y年 M月 d天 H小时 m分 s秒 S毫秒 小大小大小小大 
        //设置日历格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		
		Date date = new Date();
        //sdf.format(date) 	格式化date(把日期转成字符串)
		String str=sdf.format(date);
		System.out.println(str);
		//sdf.parse()   解析(把字符串转成日期)
		Date date2=sdf.parse("1990-05-22");
		System.out.println(date2);
	}

}

System类

//System类内方法是私有属性,可以直接调用
package study;

public class Demo {

	public static void main(String[] args){
		int arr[]= {1,2,3,4,5,6};
		int dest[]=new int[6];
//arraycopy(源数组,从哪个位置开始复制,复制到哪个数组,目标数组位置,复制的长度);
		System.arraycopy(arr,2,dest,1,3);
        //结果 0  3  4  5  0  0  
		for (int i : dest) {
			System.out.print(i+"  ");
		}
//.exit() 退出jvm,参数是0表示正常退出jvm,非0表示异常退出
		System.exit(0);
		System.out.println("程序结束了...");
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值