TDK是什么,在线免费网站建设时的关键要素?
摘要:在线免费网站建设,网站的tdk指的是什么,东营网站建设dysem,wordpress 获取作者名前言从现在开始进入高级部分的学习,鼓励自己一下!画个大饼&#xff1
在线免费网站建设,网站的tdk指的是什么,东营网站建设dysem,wordpress 获取作者名前言从现在开始进入高级部分的学习#xff0c;鼓励自己一下#xff01;画个大饼#xff1a; 常用类-集合框架-IO流-多线程-网络编程 -注解与反射-GUI很重要的东西#xff0c;不能不会#xff01;Object类祖宗类#xff0c;主要方法#xff1a;t…前言从现在开始进入高级部分的学习鼓励自己一下画个大饼 常用类-集合框架-IO流-多线程-网络编程 -注解与反射-GUI很重要的东西不能不会Object类祖宗类主要方法toString()getClass()equals()clone()finalize()clone ( protected )分配一个和源对象同样大小的空间在这个而空间创造一个对象。调用时的代码就是super.clone()clone和new的区别new()clone()分配空间根据new后面的类型分配空间根据clone对象的大小分配空间初始化调用构造函数填充对象的域初始化使用源对象的域填充新对象的域发布对象的引用把对象的引用发布到外部clone方法返回把新的对象引用发布到外部clone和copy的区别clone是复制域是新建了一个区域内容和原对象一样copy就是 是引用是两个名字指向内存的同一个object复写clone()但clone也有问题因为java中除了八大类型是值传递其他类对象传参数都是引用。比如某对象中有一个引用对象clone就是复制了一个引用指向的还是同一个内存object。克隆类和原始类共享一块区域这不是我们想要的。clone的保护机制clone是protected的需要改写为public综上实现深克隆需要以下几步类要实现cloneable接口成员中的类对象在类中写个clone()clone()重写为public调用super.clone()实现复制类的clone重写为深复制将clone()重写为publicclone()中先浅复制一下整体再调用给类中涉及到的其他类的clone如Employee类中包含SchoolInfo类。实现Employee类的深度clone首先这两个类都要implement cloneable其次SchoolInfo里写一个public clone(), 返回SchoolInfo对象这个对象是(SchoolInfo)super.clone()来的然后Employee里写一个public clone(), 返回Employee对象这个对象也是(Employee)super.clone()来的同时这个对象的schoolInfo成员也要是schoolInfo.clone()来的Employee代码package com.Object.CloneTest;public class Employee implements Cloneable {String name;int age;SchoolInfo schoolInfo;// getter setterpublic String getName() {return name;}public int getAge() {return age;}public SchoolInfo getSchoolInfo() {return schoolInfo;}public void setSchoolInfo(SchoolInfo schoolInfo) {this.schoolInfo schoolInfo;}public void setName(String name) {this.name name;}public void setAge(int age) {this.age age;}// constructorpublic Employee(String name, int age, SchoolInfo schoolInfo){this.name name;this.age age;this.schoolInfo schoolInfo;}public Employee(){}// clone重点在于super.clone() 和 schoolinfo.clone()public Employee clone(){Employee employee null;try {employee (Employee) super.clone();employee.schoolInfo (SchoolInfo) schoolInfo.clone();}catch(CloneNotSupportedException e){e.printStackTrace();}return employee;}}
SchoolInfo代码package com.Object.CloneTest;public class SchoolInfo implements Cloneable {String schoolName;int graduateYear;public String getSchoolName() {return schoolName;}public void setSchoolName(String schoolName) {this.schoolName schoolName;}public int getGraduateYear() {return graduateYear;}public void setGraduateYear(int graduateYear) {this.graduateYear graduateYear;}public SchoolInfo clone(){SchoolInfo schoolInfo new SchoolInfo();try{schoolInfo (SchoolInfo) super.clone();}catch(CloneNotSupportedException e){e.printStackTrace();}return schoolInfo;}
}
Test代码package com.Object.CloneTest;public class Test {public static void main(String[] args) {// 初始化原始类SchoolInfo info new SchoolInfo();info.schoolName 清华大学;info.graduateYear 2023;Employee Cindy new Employee(Cindy, 22, info);// 新建一个EmployeeEmployee Wind Cindy.clone();System.out.println(Wind.schoolInfo.graduateYear);Wind.schoolInfo.setGraduateYear(20);System.out.println(Cindy的毕业年份: Cindy.schoolInfo.graduateYear);System.out.println(Wind的毕业年份: Wind.schoolInfo.graduateYear);}
}
改变Wind中SchoolInfo对象的值并没有改变Cindy中对应的值可见实现了深度复制clonetoString ( public )返回字符串类名对象哈希码的无符号十六进制表示Test中测试 // toString/*如果Employee的clone中没有调用schoolInfo的clone()函数则这里输出的是com.Object.CloneTest.SchoolInfo3941a79ccom.Object.CloneTest.SchoolInfo3941a79c如果Employee的clone中调用schoolInfo的clone()函数则这里输出的是com.Object.CloneTest.SchoolInfo3941a79ccom.Object.CloneTest.SchoolInfo506e1b77可见调用成员变量所在类的clone的确是新建了一个域实现了深复制*/System.out.println(Cindy.schoolInfo.toString());System.out.println(Wind.schoolInfo.toString());getClass( public )一般和getName()配合使用// getClassSchoolInfo schoolInfo new SchoolInfo();System.out.println(schoolInfo.getClass().getName());equals比较调用equals的对象和形参obj所引用的对象是否是同一个// equalsSystem.out.println(Wind.schoolInfo.equals(Cindy.schoolInfo));如果像比较内容则需要重写equals函数比如String类中就重写了hashCode()返回对象哈希值如果对象equals为true那么hashCode可推出为true但hash相等不一定equalswait()调用该方法后线程进入睡眠状态直到其他线程调用了该对象的notify其他线程调用了该对象的notifyAll其他线程调用了interrupt中断该线程时间间隔到了此时该线程可以被调度如果是被中断的话会InterruptedException异常notify()和notifyAll()唤醒在该对象上等待的某个线程/所有线程包装类介绍基本数据类型所对应的包装类可采用面向对象技术继承Object类. 所有的包装类都是Number抽象类的子类可以互换装箱基本类型 -包装类拆箱包装类 - 基本类型byteByteshortShortintIntegerlongLongcharCharacterfloatFloatdoubleDoublebooleanBoolean应用int-integerpublic static void main(String[] args) {// 新建Integer对象int m 500;Integer iObject new Integer(m);int n iObject.intValue();System.out.println(n);/*.equals 比较的是值*/Integer iObj1 new Integer(500);System.out.println(iObj1.equals(iObject)); // trueSystem.out.println(iObj1.equals(m)); // trueInteger iObj2 new Integer(300);System.out.println(iObj2.equals(iObject)); // false/*toString 得到的也是值不是class Name 哈希码*/System.out.println(iObj1.toString()); // 500System.out.println(iObj2.toString()); // 300/*hashCode 得到的也是值*/System.out.println(hash Obj1 iObj1.hashCode()); // 500System.out.println(hash Obj2 iObj2.hashCode()); // 300}源码 int m 500;Integer iObject new Integer(m);System.out.println(iObject.equals(m)); // true所以int m 5; 和new一个Integer对象对象value 5 这两个变量判断equals时int如果是实参会自动把int转换为Integer类字符串转化为整数Integer.parseInt(String s, int radix)public static void main(String[] args) {/*hello不能被parseInt1234可以被parseInt为123432daj不能被parseInt*/String[] ss {hello, 1234, 32daj};for (String s:ss){try {int m Integer.parseInt(s, 10);System.out.println(s 可以被parseInt为 m);}catch(Exception e){System.out.println(s 不能被parseInt);}}}整数转换为字符串Integer.toString()整数后面加即可自动拆箱和装箱Integer i 100; // 自动装箱等同于Integer I new Integer(i)
int j i; // 自动拆箱,等同于int j i.intValue()java1.5以后不用显式写出new Integer()Math类 public static void main(String[] args) {System.out.println(sqrt(a): 4的平方根 Math.sqrt(4));System.out.println(cbrt(a): 8的立方根 Math.cbrt(8));System.out.println(pow(a,b): 计算次方, 4 的 2 次方 Math.pow(4,2));System.out.println(Max(a,b): 最大值 Math.max(4,3));System.out.println(Min(a,b): 最小值 Math.min(4,3));System.out.println(abs(a): 绝对值 Math.abs(-102) Math.abs(3.4));System.out.println(ceil(a): 2.4的最小整数值 Math.ceil(2.4));System.out.println(floor(a): 3.2的最大整数值 Math.floor(3.2));System.out.println(random(): [0.1)随机 Math.random());System.out.println(rint(): 四舍五入但0.5时取偶数整数,返回double Math.rint(4.5));System.out.println(round(): 四舍五入但0.5时取偶数整数返回int输入float/ long(输入double) Math.round(4.5));}Random类两种java.lang.Math.Random[0.0,1.0) 下的带正号的double值random(): [0.1)随机0.0077570396888585472. java.util.RandomRandom(): 创建一个随机数生成器Random( Long Seed): 使用单个Long种子创建一个新的随机数生成器 public static void main(String[] args) {Random r new Random();int iRandom r.nextInt(120); // [0, 120) 的整数 每次生成都不一样System.out.println(iRandom);Random rSeed new Random(20);for(int i 0; i 10; i){ // 生成的这十个数每次运行程序生成的序列都一样System.out.println(rSeed.nextInt(120)); }}日期时间类Date类构造函数Date() 当前日期和时间Date(long millisec) 1970.1.1 起的毫秒数我看还可以通过Date(23,1,2) 来新建Date对象创建对象后有:getTime()函数返回自1970.1.1以来的毫秒数setTime(long time) 用1970.1.1后的毫秒数设置日期toString() 将对象转换为 dow mon dd hh:mm:ss zzz yyy public static void main(String[] args) {// 获取当前时间// Thu Mar 02 15:36:57 CST 2023Date date new Date();System.out.println(date.toString());// 获取自1970.1.1的毫秒数// 比较两个毫秒数falseDate date1 new Date();long time date.getTime();long time1 date1.getTime();System.out.print(比较两个毫秒数);System.out.println(timetime1);// 比较日期// falseDate date2 new Date(23,01,3);System.out.println(date.before(date2));}SimpleDateFormat格式化日期 yyyy-MM-dd hh:mm:ss大小写的原因MM月份mm分钟 HH为24小时制hh为12小时 public static void main(String[] args) {// 24小时制SimpleDateFormat f new SimpleDateFormat(yyyy年MM月dd日 HH:mm:ss);// 12小时制SimpleDateFormat f1 new SimpleDateFormat(yyyy年MM月dd日 hh:mm:ss);Date date new Date();System.out.println(f.format(date)); //2023年03月02日 15:46:19System.out.println(f1.format(date));//2023年03月02日 03:46:19}还有一种printf public static void main(String[] args) {Date d new Date();// %tc 全部日期信息// 周四 3月 02 15:49:43 CST 2023System.out.printf(%tc, d);System.out.println();// %tF 年-月-日// 2023-03-02System.out.printf(%tF, d);System.out.println();// tD 日/月/年2位// 03/02/23System.out.printf(%tD, d);System.out.println();// %tr // 03:52:26 下午System.out.printf(%tr, d);System.out.println();// %tt // 15:52:26System.out.printf(%tT, d);System.out.println();// %tR // 15:52System.out.printf(%tR, d);System.out.println();}休眠sleepThread.sleep(1000*3) // 休眠3秒Calendar类获取日期的特定部分、在特定部分进行加减Calendar比Date强大创建不是new出来的是类的一个.getInstance() 方法得到的Calendar calendar Calendar.getInstance();String类创建方法直接复制 String s “hello”开辟堆内存空间自动入池new一个对象String s new String(hello)先开辟一个堆空间放hellonew的时候又开辟一个s指向后一个之前的堆空间变成垃圾不会自动入池 public static void main(String[] args) {String s hello;String s0 hello;String s1 new String(hello);String s2 s1;// s1是引用类型所以 是比较的地址System.out.println(s s1); // falseSystem.out.println(s1 s2); // true// s 和 s0都是基本数据类型所以比较的是内容System.out.println(s s0); // true}常量池、享元模式StringBuilder 和 StringBuffer线程非线程的跳过没看
