插播: 快捷键: 鼠标放在红线上,然后alt+回车,选第一项implement methods,回车
B字节(Byte):每逢八位一个字节,数据存储的最小单位。 b位 100Mbps宽带,b:位 百度云速度:15MB/s B:字节
1Byte=8bit 1KB(kilo千(kilometers(千米)))=1024Byte字节 1MB=1024KB 1GB=1024MB 1TB=1024GB 1PB=1024TB 1EB=1024PB 这是一个亿, 参见祖师爷 一个亿,用王健林的话说,这是一个小目标 100,0000,0000.00 一百亿,一百个小目标 正斜杠:上坡/ 反斜杠:下坡 启动:win+R,输入cmd回车 切换盘符 盘符名称 进入文件夹 cd文件夹名称 进入多级文件夹 cd文件夹1\cd文件夹2\文件夹3 返回上一级 cd … 返回根路径 cd 查看当前内容 dir 清屏 cls 退出 exit
JVM:java虚拟机,实现跨平台,但本身不是跨平台,相当于韩语翻译机(Lin版JVM),日语翻译机(win版JVM),分别在韩国、日本实现翻译 JRE:JAVA runtime environment java程序运行时的环境,包含JVM和运行时所需要的核心库 JDK:java程序安装开发工具包,包含JRE和开发人员使用的工具 运行一个已有的java程序,只需安装JRE 开发一个全新的JAVA程序,必须安装JDK public class HelloWorld { public static void main(String[] args){ System.out.println(“Hello,W”); } }
//#HelloWorld与所在文件名相同 //#String的string注意大写 /第一行:public class后面代表定义一个类的名称,类是java中所有源代码的基本组织单位/ /*第二行固定写法 ,代表main方法,代表程序的起点 */
public class HelloWorld { public static void main(String[] args){ System.out.println(“Hello,W”); } }
黑色界面是为了晚上敲代码的时候不会打扰到女朋友,说的好像就有女朋友一样 对于所有源代码,写在project的src下(external libraries相当于JDK)
包是一组文件夹的名称 cn是一个大包,里面包含了itcast,itcast包含了day04,day04包含了demo01 定义方法的完整格式: 修饰符 返回值类型 方法名称(参数类型 参数名称,…) 修饰符:现阶段固定写法public static 返回值类型:方法最终产生的数据结果是什么类型 方法名称:方法的名字,规则和变量一样,小驼峰 参数类型:进入方法的数据是什么类型 参数名称:进入方法的数据对应的变量名称 方法体:方法需要做的事情,若干行代码 return:1、停止当前方法 2、将后面的结果数据返回值还给调用处。 返回值:方法执行后最终产生的数据结果 方法的重载是指方法的名称相同而参数列表不同的方法。 这里的参数列表不同主要包括:
参数的类型不同 参数的个数不同(个数不同一定构成重载) 具有多个且类型不同的参数,其顺序不同构成重载 第三种情况是最容易被忽视的。比如 这里的getMax()方法,参数的个数相同参数的类型种类也相同,但是由于参数的顺序的不同也 构成重载。 这个在笔试题中可能会出现。
方法重载与下列因素有关: 1、参数个数不同 2、参数****类型不同 3、参数的多类型顺序不同
另外,方法的重载和访问修饰符以及返回值类型无关。关于返回值类型无关我们可以从构造函数的重载去理解。 我们知道构造函数是可以实现重载的,或参数类型不同或个数不同。同时我们也清楚构造函数是没有返回值类型的(连void也不能写),而构造函数有能实现重载,因此我们可以很容易的得出,方法的重载和返回值类型无关。
方法重载与啥无关: 1、与参数的名称无关 2、与方法的返回值类型无关 v )
定义一个类时所使用的修饰符有哪几个?每个修饰符的作用是什么?是否可以混用? 1、有四个,分别为public、abstract、final、缺省, 2、作用: public:将一个类声明为公共类,它可以被任何对象方法。 abstract:将一个类声明为抽象类,没有实现方法,需要子类提供方法的实现,所以不能创建该类的实例。 final:将一个类声明为最终类即非继承类,表示他不能被其他类继承. 缺省:缺省修饰符时,表示只有在相同包的对象才能使用这样的类.
6.4成员变量的修饰符有哪些?各修饰符的功能是什么?是否可以混用? 成员变量的修饰符有八个,功能分别为: Public:公共访问控制符,指定该变量为公共时,它可以被任意对象访问. Private:私有访问控制符,指定该变量只允许自己类的方法访问,其他任何类(包括子类)的方法均不能访问此变量. Protected:保护访问控制符,指定该类只可以被他自己的类及其子类 缺省:同一个包中的其他变量其他类可以访问此成员变量,其他包中的类则不能. Final:最终修饰符,指定此变量的值不能改变. Static:静态修饰符,指定该变量被所有对象共享,即所有的实例都可以使用该变量 Transient 过度修饰符,指定该变量是一个系统保留暂无特别作用的临时性变量 Volatile 易失修饰符,指定该变量可以同时被几个线程控制和修改
6.5成员方法的修饰符有哪些?各修饰符的功能是什么?是否可以混用? Public:公共访问控制符,指定该方法为公共,它可以被任何对象的方法访问. Private:私有访问控制符,指定该方法只能自己类的方法访问,其他任何类(包括子类)中的方法都不能访问. Protected:保护访问控制符,指定该方法只可以被他自己的类及其子类或同一包中的其他类访问。 缺省:同一包中的其他类可以访问此成员方法其他包中的类不可以. Final:最终修饰符,指定该方法不能重载. Static:静态修饰符,指定不需要实例化一个对象就可以调用的方法. Abstract:抽象修饰符,指定该方法只声明方法头,而没有方法体,抽象方法需在子类中被实现。 Synchronized:同步修饰符,在多线程程序中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程访问,运行结束后解锁. Native:本地修饰符,指定此方法的方法体是用其他语言(如c)在程序外部编写的.
成员变量与局部变量的区别有哪些? 1、从语法形式上看,成员变量属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public、private、static等修饰符所修饰,而局部变量则不能被访问控制修饰符及static所修饰;成员变量和局部变量都可以被final所修饰 2、从变量在内存中得存储方式上看,成员变量是对象的一部分,而对象是存在于堆内存的,而局部变量是存在于栈内存的。 3、从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而产生,随着方法调用的结束而自动消失 4、成员变量如果没有被赋初值,则会自动以类型的默认值赋值(有一种情况例外,被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值,必须显式地赋值后才能使用。
创建一个对象使用什么运算符?对象实体与对象的引用有何不同? 创建一个对象使用new运算符,对象实体是实在存在于堆内存中,而对象的引用是管理对象实体的,句柄存在于栈内存中.
对象的成员如何表示? 对象的成员通过对象名.对象成员来访问
在成员变量或成员方法前加上关键字this表示什么含义? this特指成员变量
成员方法:无static 压栈:后来的人把前面的人压在下面 光标在变量上,shift+F6可以重新地给所有同名变量改名 凡是new出来的东西,都是在堆的, 关键字小写,类大写
引用类型的一般使用步骤(只要不是基本类型,那就是引用类型) (如scanner是一个类,为引用类型) 1、导包 import 包路径.类名称; 若需要使用的目标类和当前类位于同一个包下,则可以省略导包语句不写; 只有java.lang包下的内容不需要导包,其他的包都需要import语句 (导包语句要在package后面写,在public前面写) 2、创建 类名称 对象名 =new 类名称(); 3、使用 对象名.成员方法名()
创建对象的标准格式: 类名称 对象名=new 类名称(); 匿名对象:只有右边的对象,没有左边的名字和赋值运算符 注意事项:匿名对象只能使用唯一一次,下次再用不得不再创建一个对象 使用建议:如果确定有一个对象只需要使用唯一的一次,就可以使用匿名对象
使用匿名对象作为参数和返回值都是可以的
Random类:用来生成随机数字 使用起来亦然三个步骤 1、导包 包 import java.util.Random; 2、创建 构造方法 Random r = new Random(); 3、使用 成员方法
1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用 2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用。
每个单词首字母都大写,故为类(米大,所以类)
数组的长度不可以发生变化 但ArrayList集合的长度是可以随意改变的
泛型
对于ArrayList来说有一个代表泛型。 泛型:也就是装在集合当中的所有元素,全都是统一的什么类型
注意:泛型只能是引用类型,不能是基本类型
package a.b.c.d02; import java.util.ArrayList; public class demoArray { public static void main(String[] args) { // 首先创建一个长度为3的数组,里面用来存放person类型的对象 Person2[] array = new Person2[3]; System.out.println(array[0]); Person2 one = new Person2("迪丽热巴", 18); Person2 two = new Person2("李白", 25); Person2 three = new Person2("李黑", 27); // 将one中地址值赋值到数组的0号元素位置 。 array[0]=one; array[1]=two; array[2]=three; System.out.println(array[0]); System.out.println(array[1]); System.out.println(array[2]); Person2 person = array[1]; System.out.println(person.getName()); System.out.println(array[0].getName()); // 创建了一个ArrayList集合,集合的名称是list,里面装的全是string字符串类型的数据。 // 备注:从JDK1.7+开始,右侧的尖括号内部可以不写内容,但是<>本身还是要写上的。 ArrayList<String> list = new ArrayList<>(); System.out.println(list);//[] // 注意事项:对于ArrayList集合来说,直接打印得到的不是地址值,而是内容. // 若内容为空,得到的是空的中括号:[] //向集合添加一些数据,需要使用add方法 list.add("赵丽颖"); list.add("赵"); list.add("赵丽"); list.add("赵丽颖0"); System.out.println(list); } }
除了基本类型,就是引用类型 集合里面保存的都是地址值,基本类型的数据没有地址值,故ArrayList=泛型只能是引用类型
若希望向集合ArrayList当中存储基本类型,必须使用基本类型对应的“包装类”。
基本类型 包装类(引用类型,包装类都位于java.lang包下) byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean 从JDK1.5开始,支持自动装箱、自动拆箱 自动装箱:基本类型->包装类型 自动拆箱:包装类型->基本类型
空指针.方法 会报错,所以推荐"…".equals(str); 数组.length无括号 变量名.fori 上页则不行,输出lengh=0 下页才成功 如果没有static关键字,那么首先创建对象,然后通过对象才能使用他 对于静态方法,可以通过对象名进行调用,也可以直接通过类名称来调用 方法区:存储.class相关信息,如main方法,。。。,其中,方法区当中有一块独立的空间,叫静态区,专门存储static的数据
new出来的对象都在堆上
静态的内容不用new,直接通过类名称就能点 chars.fori 正序:生成: for(int i=0;i<chars.length;i++){ }
chars.forr 倒序:生成: for(int i=chars.length-1;i>=0;i–){ }
面向对象三大特征:封装性、继承性、多态性 继承是多态的前提,没有继承就没有多态
案例: Extends.class
package a.b.c.d02; /* 在继承的关系中,子类就是一个父类,也就是说,子类可以被当作父类看待 例如,若父类是员工,子类是讲师,那么,“讲师就是一个员工”。关系:is-a 定义父类的格式:(一个普通的类定义) public class 父类名称{ 成员变量、构造方法、成员方法。。。 } 定义子类的格式: public class 子类名称 extends 父类名称{ 。。。 } */ public class Extends { public static void main(String[] args) { // Teacher teacher = new Teacher(); teacher.method(); //Teacher类虽然什么都没写,但继承了来自父类的method方法。 //创建另一个子类助教的对象 Assistance assistance=new Assistance(); assistance.method(); } }Assistance.class
package a.b.c.d02; //定义了员工的另一个子类:助教 public class Assistance extends Teacher { }Employee.class
package a.b.c.d02; //定义一个父类:员工 public class Employee { public void method(){ System.out.println("方法执行!"); } }teacher.class
package a.b.c.d02; //定义了一个员工的子类:讲师 public class Teacher extends Employee { }在父子类继承关系当中,若成员变量重名,在创建子类对象时,访问有两种方式: 直接通过子类对象访问成员方法 直接:new上一个子,然后点它 等号左边是谁就优先用谁,没有则向上找;到处都没有,编译报错 间接通过成员方法访问成员变量
案例:
直接:new上一个子,然后点它,等号左边是谁就优先用谁,没有则向上找;到处都没有,编译报错
案例2 案例3: 父类当中的成员变量:
子类当中成员变量 int num 子类方法的局部变量(method里面的num)
/* 局部变量: 直接写成员变量名 本类的成员变量: this.成员变量名 父类的成员变量: super.成员变量名 */案例四 方法: 注意:
不报错,但若Zi方法是Object,Fu的方法是String,则会报错。
public class string0 { public static void main(String[] args) { int[][] a = new int[5][5]; int k = 1; for (int i = 0; i < 5; i++) { for (int j = 0; j <= i; j++) { a[i - j][j] = k++; /* 刚好就是成题目的角度赋值 */ } } for (int i = 0; i < 5; i++) { for (int j = 0; j < 5 - i; j++) { System.out.print(a[i][j] + " "); } System.out.println(); } } }Ctrl + D 复制光标所在行 或 复制选择内容,并把复制内容插入光标位置下面 (必备)
2、 先父类,后子类
继承关系中,父子类构造方法的访问特点: 1、子类构造方法当中,有一个默认隐含的“super()”调用,所以一定先调用的父类构造,后调用子类构造… 有无super();都一样 2、可以通过super关键字来子类构造调用父类重载关键字 (赠送的super()一定是无参,所以调用父类的重载方法会)
3、super的父类构造调用,必须是子类构造方法的第一个语句.,不能一个子类构造调用多次super构造. 如:
总结:子类必须调用父类构造方法,不写则赠送super().写了则用写了的super调用.,且super只能有一个,还必须是 第一个 语句的位置
super关键字的用法有三种 1、在子类的成员方法中,访问父类的成员变量.
2、在子类的成员方法 中,访问父类的成员方法
3、在子类的构造方法中,访问父类的构造方法.
super是访问父类,this是访问本类
this关键字用法也有三种: 1、在本类的成员方法中,访问本类的成员变量.
2、 在子类的成员方法中,访问本类的另一个成员方法 3、在本类的构造方法中,访问本类的另一个构造方法. 上面死亡循环,不可执行
80.min (父类中num为10)
覆盖重写override
内存图:栈、堆、方法区 程序要想运行,方法区最先有东西 main方法先运行,所以先进栈,而new的东西都在堆里。
调用show方法,show进栈
zi.method进栈 其中,因为zi.method中有特殊的一行,super.method(),所以让method.fu()进栈 method (fu)运行完后 xx method (zi)运行完后 xx show() 运行完后 xx Zi zi 运行完后xx 栈空,运行完毕
java是单继承,一个类的直接父类只能有一个 如上图报错就是因为抽象方法所在的类不是抽象类 如何使用抽象类和抽象方法。 1、不能直接创建new抽象类对象,必须具体 2、必须用一个子类来继承抽象父类. 3、子类必须覆盖重写抽象父类当中所有的抽象方法. 4、创建子类对象进行使用 覆盖重写(实现):去掉抽象方法的abstract关键字,然后补上方法体大括号
//猫吃鱼
快捷键: 鼠标放在红线上,然后alt+回车,选第一项implement methods,回车
这就是你需要覆盖重写的,回车就出来了 (因为子类当中赠送了super)
29min54发红包 接口 接口使用步骤 1、接口不能直接使用,(不能直接new),必须有一个“实现类”(即子类)来“实现”(与extends差不多)该接口 格式: (子类继承父类:public class 类名称 extends 父类) 子类继承父类:public class 实现类名称 implements 接口名称{ 。。。。 } 2、接口的实现类必须覆盖重写(实现)接口中的所有抽象方法。 实现:去掉abstract关键字,再加上方法体{} 3、创建实现类的对象,进行使用。 注意事项:如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是抽象类
接口升级了,增加了一个抽象方法,导致实现类都报错了 一个个添加覆盖重载较为繁琐,所以可以将新添加的abs2方法拥有一种默认的方法体。 将新添加的方法,改为默认方法 默认方法会被实现类继承下去 上图即实现类覆盖重写了接口的methodDefault,调用时会执行实现类的methodDefault
 减少重复代码,但有所不妥
正确改造代码: methodcommon的修饰符变成了private,此时如下图报错 这时只有接口内的两个类可以使用methodcommon
若是静态方法: 产生了重复代码,现进行改造,
只有methodstatic1、2才能用methodstaticcommon,其他人都用不了 (静态的东西用起来非常简单,接口名称.方法名)
package lian; /* 接口当中也可以定义“成员变量”,但必须使用public static final三个关键字进行修饰. 从效果上看,这就是接口的【常量】 public static final 数据类型 常量名称=数据值; 此为接口当中常量的定义格式. 注意: 1、接口当中的常量,可以省略public static final,注意:不写也照样是这三个 2、接口当中的常量,必须进行赋值 3、接口常量的名称,用大写字母和下划线分隔(推荐) */ public interface MyinterfaceConst { public static final int NUM=10; //这其实就是一个常量,一旦赋值,不可修改. public是指接口里面外边、实现类都可以用 //用了static便与对象无关了,直接接口名称.就可以点出来了;一旦使用final关键字修饰,说明不可改变 } package lian; public class Myinterfaceconst1 { public static void main(String[] args) { System.out.println(MyinterfaceConst.NUM); } }3中,若覆盖重写了,则用实现类的,否则用接口里的.
直接父类只有一个,而接口可以有很多个
如果实现类
最终sout父类方法,故父类方法优先,接口其次。
4、多态
示例:
首先,method是成员方法,右边new的谁就运行谁的方法,故输出子类方法 多态:左父右子 多态存在要有三个必要条件:继承,方法的重写,父类引用指向子类的对象。没有实现接口
继承关系中,我们了解了成员变量访问特点,若用了多态的写法,那么成员变量的访问特点,也没有任何变化. 如: 故输出10;(没有则向上查找,不会向下查找的,若Fu中没有age这个成员变量,则错误)
注意:成员变量不能进行覆盖重写.只有成员方法才可以. 2、间接通过成员方法访问 java的话, int 是基本类型,不在面向对象体系之内,不存在继承 / 方法 / 多态 这些概念,所以Object a=new int();左父 若覆盖重写了,则子类 多态和不是多态没有任何不同.
成员方法的规则也没有变化.(如上上的示例)
成员方法:编译看左边,运行看右边 (成员变量不是如此) 成员变量:编译看左边,运行还看左边 (左右指的是new的左右) 编译看左,运行看右 38min多态重点------------------------------------- 46min 向下转型示例: 56min笔记本 object祖宗类,所有类不写都继承之
final关键字代表最终、不可改变的 因为abstract一定要覆盖重写,而final不可以被覆盖重写
地址值不能变,但方法可变
7.4构造方法有哪些特性? 1、 构造方法的方法名与类名相同 2、 构造方法没有返回值,但不能写void 3、 构造方法的主要作用是完成对类对象的初始化工作 4、 构造方法一般不能有编程人员显式地调用,而是用new来调用 5、 在创建一个类的对象的同时,系统会自动调用该类的构造方法为新对象初始化
7.5在一个构造方法内可以调用另一个构造方法吗?如果可以,如何调用? 可以;通过this来调用,而且this关键字必须写在构造方法内的第一行位置.
7.6静态变量与实例变量有哪些不同? 静态变量是隶属于类的变量,而不是属于任何一个类的具体对象,静态变量不需要实例化就可以使用。 实例变量是隶属于对象的变量,是属于具体的一个类的,是需要把类实例化为对象才可以使用的
7.7静态方法与实例方法有哪些不同? 静态方法实质是属于整个类的方法,而实例方法是属于某个具体对象的方法
7.8在一个静态方法内调用一个非静态成员为什么是非法的? 静态方法是属于整个类的,所以它不能 操纵和处理属于某个对象的成员,而只能处理属于整个类的成员,即静态方法只能访问静态成员变量或静态成员方法 报错 ctrl+/注释所有 构造方法赋值:
注意: sub是demo02的子包,但Myson和Myclass不在同一个包中!,只要不是严格的同一个包,要调用那就得导包 以后构造方法不用自己打,可以如下 则直接重写好了 1:“==”如果前后比较的是对象,则比较的是对象的地址,如果前后为数字,则比较的是值;
2:“equals”如果前后是对象,比较的是对象的地址,如果比较的对象重写了“equals”方法,则比较的是值;
(八个基本数据类型的封装类:Byte,Short,Integer,Long,Float,Double,Boolean,Character比较的都是值,还有File,Date等)
修改版
也可以自己覆盖重写 即可直接生成: 直接就给调用了ToString方法 为什么str是输出abc,而s是输出地址 this代表当前的一个字符串对象,所以string已经对Tostring进行了重写 而Student类没有覆盖重写,则默认调用object类, object类中ToString的覆盖重写方法不一样,所以返回包名+类名+@+hashcode的方法,即为地址值 对Student的ToString中进行覆盖重写
自动生成ToString方法 一个true一个false 的原因: String重写了,所以比较的就是两个字符串内容 而学生类的没有重写,所以继承了object类的equals方法 ==号可以比较基本数据类型和引用数据类型 比较基本数据类型比较的就是两个具体的值,若比较引用数据类型,比较的就是两个地址值 而两个new出来的都在堆里,(牛堆),所以地址值必然不同 objects中: 所以不会报安全问题,通过objects覆盖重写: object:出问题 方法外边,直接在类内部就为成员
内部类命名格式 this.num:20 super.num却用不了:因为内部类并不是继承外部类,其继承的仍然是object类 外界要访问inner做不到,因为只有当前所属 方法才能使用,出了就不能用了,所以先创建一个Inner
相当于调用一个普通的外部类对象methidOuter
因为外部类已经最外面了,所以没有子类,所以只能public/(default) 局部classInner只有自个才能访问,所以什么都不写 匿名内部类: 抽象方法不能直接用,需要一个实现类实现它 若用多态(左父右子),亦没有问题 之前说过接口不能直接new
所以我们new了后在后面多点东西 此方法可以省略类的单独创建 亦可实现 秀我一脸
DATE类 在这里插入图片描述 鼠标选中此方法,alt+回车 而main方法调用了此方法,所以也得抛出异常
package com.company; import java.util.Calendar; /* java.util.Calendar类:日历类 Calendar类是一个抽象类,里面提供了许多操作日历字段的方法(如YEAR、HOUR、DAY of MONTH、HOUR) Calendar类无法直接创建对象使用,里面有个静态方法叫getInstance,该方法返回了Calendar的子类对象 static Calendar getInstance()使用默认时区和语言环境获得一种日历 */ public class calendar { public static void main(String[] args) { Calendar c=Calendar.getInstance();//多态 System.out.println(c); } }
输出结果: java.util.GregorianCalendar[time=1607512570473,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“Asia/Shanghai”,offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=344,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=7,HOUR_OF_DAY=19,MINUTE=16,SECOND=10,MILLISECOND=473,ZONE_OFFSET=28800000,DST_OFFSET=0]
Process finished with exit code 0
package com.company; import java.util.Date; public class data { public static void main(String[] args) { //空参构造方式 Date d=new Date(); System.out.println(d); } }可以按照我们熟悉的时间格式
package com.company; import java.util.Date; public class data { public static void main(String[] args) { //空参构造方式 Date d=new Date(); System.out.println(d.toLocaleString()); } } package com.company; import java.util.Date; public class data { public static void main(String[] args) { //空参构造方式 Date d=new Date(3000L);//三千毫秒 System.out.println(d.toLocaleString()); } }时间起点英国的1970.1.1.0.0 中国东八区,所以八点 3000L故3秒 package com.company; import java.text.SimpleDateFormat; import java.util.Date; public class data { public static void main(String[] args) { //空参构造方式 Date d=new Date(3000L);//三千毫秒 SimpleDateFormat sdf=new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”); System.out.println(d.toLocaleString()); String f= sdf.format(d); System.out.println(f); } } 可自动生成代码 会有异常,先将其抛出
package com.company; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class data { public static void main(String[] args) throws ParseException { //空参构造方式 Date d=new Date(3000L);//三千毫秒 SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); System.out.println(d.toLocaleString()); String f= sdf.format(d); System.out.println(f); String str=("2088年08月08日 08:08:80"); Date parse = sdf.parse(str); System.out.println(parse); } }注意:国外的月份是从0到11,所以MONTH要加1 输出2088年 输出20990年(也可以add负数) 方法重载 getTime把日历对象转化为日期对象
有课后 一看到缓冲区,则可以提高操作效率 append返回值是StingBuilder,所以new一个StringBuilder的bu2接收 比较地址值,两者地址值相等 bu1调用的,所以返回bu1(即this) 应用currentTimeMillis、arraycopy: 为工具类,里面都是静态的方法,所以首先不用创建这些对象 当前时间距1970年 字符串是引用型变量,而基本数据类型是数值变量, 引用型变量就像C语言里面的指针存放的是该字符串的地址。计算机存储的数据都有一个编号就是地址。字符串就是存放的地址; 比如有两个数值型的数据判断是否相等,直接用‘’就行了, 但是引用变量就不一样了。比如String s1=“123”;假设这个字符串在计算机的地址&s1=Oxffa00fff; String s2=“123”; 假设这个字符串在计算机的地址是&s2=Oxffa000f0; 如果你像这样比较 s1==s2 返回的是false;因为你这样比较就是他们地址的比较 Oxffa00fff=Oxffa000f0 ? 明显不等,这时就要调用java中字符串的方法equals(); s1.equals(s2) 返回true 就是一个字符串,所以直接连接而不是加法 数字格式化异常
public class Employee { private String name; private int age; private double salary; public Employee(String newName,int newAge,double newSalary){ this(newAge,newSalary); System.out.println("三个参数的构造方法被调用"); name=newName; } public Employee(int newAge,double newSalary){ this(newSalary); System.out.println("两个参数的构造方法被调用"); age=newAge; } public Employee(double newSalary){ this.getAge(); System.out.println("一个参数的构造方法被调用"); } public Employee(){ System.out.println("没有参数的构造方法被调用"); } void setAge(int newAge){ int age=0; age=newAge; } int getAge(){ return age; } public static void main(String[] args) { Employee s1=new Employee("李四",31,8000); s1.setAge(31); System.out.println("年龄是"+s1.getAge()); } } public class Ca { int a; static int b; public static void m1() { Ca s1=new Ca(); s1.a=10; b=10; } public static void m2() { Ca s1=new Ca(); s1.a=5; b=5; } public static void m3() { m1(); Ca s1=new Ca(); s1.m2(); } }静态方法不能访问类的其他成员(成员变量或成员方法),除非这些成员也被声明为static,即静态方法不能直接处理费静态的成员,非静态成员只能通过对象来访问,即在访问非静态成员前需先创建一个对象,创建对象后,再去通过对象访问非静态成员(如上) (因为静态的先有,非静态后有)
数组长度不可变,所以学了ArrayList集合() set反而无序
打印的不是地址,所以重写了方法
使用迭代器取出集合中元素的代码,是一个循环的过程 所以我们可以使用循环优化 不知道集合中有多少元素,使用while循环 循环结束条件:hasNext方法返回false
new了一个ArrayList,所以内存的堆中有的ArrayList
取出元素,然后指针后移
List下面的可以索引,而set下面的不可以,所以使用一种两者都可的遍历方式:迭代器、增强for. A、通过集合对象获取迭代器对象 B、使用循环遍历迭代器 C、判断迭代器对象中是否还有元素 D、有元素则获取 拿到第一个元素,赋值给i,拿到第二个元素,赋值给i
只要遍历,就增强for循环
import java.util.ArrayList; import java.util.Iterator; public class iteractor2 { public static void main(String[] args) { show01(); } /*创建集合对象,不使用泛型: 好处:集合不使用泛型,默认的类型就是object类型,可以存储任意类型的数据. 弊端:不安全,引发异常. * */ private static void show01() { ArrayList list=new ArrayList(); list.add("ddd"); list.add(1); //获取迭代器,使用迭代器遍历list集合 Iterator it=list.iterator(); //使用迭代器的方法hasNext和next遍历集合 while(it.hasNext()){ Object obj=it.next(); System.out.println(obj); //上面没问题,但若想要使用String特有的方法,length获取字符串的长度,不能使用多态,Object obj="ddd", // 多态的弊端,不能使用子类特有的方法,需要向下转型,把Object变成字符串 //会抛出ClassCastException异常,不能把Integer类型转换为String类型,"ddd"转成功了,但1不能 String s=(String)obj; System.out.println(s.length()); System.out.println(((String) obj).length());//或者第二种写法 } } }可以使用length方法 改为泛型:所有使用数据类型的地方,都改为泛型 **************************uihuh
--------------死神 222222222222222222 44min 调用父类构造方法 类型不太确定,所以改用通配符?表示,方正确
?定义的时候不能用,但作为参数传递可用 不是同步的=》多线程=》快
50min