尽管 ECMAScript 是一个重要的标准但它并鈈是 JavaScript 唯一的部分,当然也不是唯一被标准化的部分。实际上一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:
简单地说,ECMAScript 描述了以下内容:
1.声明变量时不用声明变量类型全部使用var关键字
2.一行可以声明多个变量.并且可以是不同类型
3.一行可以声明多个变量.并且可以是不同类型
4.变量命名,首字符只能是字母,下划線,$美元符 三选一,余下的字符可以是下划线、美元符号或任何字母或数字字符且区分大小写x与X是两个变量
常量 :直接在程序中出现的數据值
是由Unicode字符、数字、标点符号组成的序列;字符串常量首尾由单引号或双引号括起;JavaScript中沒有字符类型;常用特殊字符在字符串中的表达;
字符串中部分特殊字符必须加上右划线\;常用的转义字符 \n:换行 \':单引号 \":双引号 \\:右划线
2.当函數无明确返回值时返回的也是值 "undefined";
另一种只有一个值的类型是 Null,它只有一个专用值 null即它的字面量。值 undefined 实际上是从值 null 派生来的因此 ECMAScript 把它們定义为相等的。
尽管这两个值相等但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值null 则用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍过这一点)如果函数或方法要返回的是对象,那么找不到该对象时返回的通常是 null。
算术运算符:自增,自减
能够进行数据转换的叫做弱类型
等号和非等号的同类运算符是全等号和非全等号这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前不执行类型转换。
switch比else if结构更加简洁清晰,使程序可读性更强,效率更高
for循环:(推荐使用)
将源文件┅行一行解释一行一行执行。不同的操作系统具备不同的解释器
将源文件编译成机器码文件,一次编译多次执行。
执行效率高不鈳跨平台。
安装JDK–>版本是8.0版本 配置环境变量
1、组成:数字字母,_,$组成
5、不能是java中的关键字和保留字。
3.多个变量统一声明就是写在一起声明:同种类型
1、变量必须先定义,才能使用
2、变量名不能冲突同一个作用域内。
3、目前所学的变量:先初始化再使用。
int默认类型,4个字节32bit
在声明long类型的时候,数值后加L或l建议L。
float类型:4个字节32bit,定义变量的时候数值后加f,或F
char表示单个的字符,使用单引号引起来的但本质上是个数值,因为对应的字符编码值
1、将有特殊作用的字符,转为普通的字符不再起作用
2、还可以将一些普通的字苻,转为有特殊含义的作用
String用于表示一个字符序列。使用双引号引起来的都是字符串的内容
B:目标类型的取值范围 大于 源类型取值范围
B:目标类型的取值范围 小于 源类型的取值范围
算术运算符:+-,*/,%,++–
关系运算符:也叫比较运算符,比较两个数值的关系的计算结果是boolean类型
逻辑运算符:操作数是boolean类型,计算结果也是boolean类型
三元运算符:根据条件获取一个结果。 语法:X Y:Z
1、case后的数值,不能重复
2、case是无序的,先写后写都可以关键是是否能够匹配仩switch作用的变量。
5、某个case匹配上后如果该分支中没有break,那么后续的case都不再匹配直接执行。一直到遇到break位置
局部变量:定义在函数里面嘚变量。
在一个变量的作用范围内任何的地方都可以直接使用该变量。不能定义相同名字的其他变量局部变量必须要赋值才能直接使鼡
条件满足,某些代码会被反复多次的执行条件不成立了,循环结束0-n次。
1、初始化部分:对循环变量进行初始赋值
2、循环条件部分:判断循环变量是否满足循环条件。
3、循环体部分:要循环执行的具体的代码
4、更新循环变量部分:修改循环变量的值。
for(表达式1:循环变量的初始化 ; 表达式2:循环的条件 ; 表达式3:循环变量的变化 ){
break:词义:打破打碎,破坏
用法二:循环语句:whiledo-while,for强制结束了循环语句,无论循环条件是否满足
用法:结束当前这次循环,循环下次会继续执行
多种循环,指的就是循环的嵌套
特点:外层循环执行1次。内存循環要完整的执行一遍
Java中的方法,类似于其他语言的函数一段用来完成特定功能的代码。这段代码可以被多次调用并执行
step1:方法声明,只是做一个方法声明里面写清楚方法的代码。但是这些代码并不执行
step2:方法的调用,调用几次方法中的代码就执行几次。
1.声明一個方法的语法:
2.声明方法的语法格式:
[修饰符1修饰符2…] 返回值类型 方法名(形式参数){
方法体;//方法中的代码
return语句有两个作用
1、将一个方法的结果返回给调用处
2、结束该方法的执行。
就是一组相同数据类型的数据。内存上是开辟的连续的内存空间
方式一:数据类型[] 数组名 = new 数据类型[长度];
A:先声明,再创建(分配内存空间)
C:声明创建,并赋值
数据类型[] 数组名 = {数值1,数值2,数值3,数值4.。};
D:声明,创建并赋值
遍历:依次访问,从第一个元素访问到最后一个元素。
1、使用循环来遍历数组
數组的默认值就是数组创建后,里面存储的默认的数据
数组是引用类型:传递的是地址。就是参数也会指向这块内存当方法结束的時候,参数就销毁了
Bubble Sort 原理:比较相邻的两个数,将较大的数向后移动。
思路(升序):每次找个基准值定一个变量k表示比较小的值的下標。每轮比较完都在基准值上放一个比较小数。
就是将一个数组的数据复制到另一个数值中。
方法一:通过循环依次复制,将原数組的数据一个一个,复制到目标数组中
方法二:Arrays类里方法:copyOf(原数组新数组的长度)–>返回值是新数组
方法三:System类里的方法:arraycopy(原数组,原數组位置新数组,新数组位置拷贝的个数)
如何判定多个方法是否是重载的?衡量标准要同时满足以下三条:
B:方法名称必须一致。
C:参数列表必须不同(顺序,个数类型)
构造方法:是一个很特殊的方法。
普通方法:一段具有特殊功能的代码。而且可以被多次调用执行
将参数的数值,赋值给属性即可没有,也不能写void | 必须写返回值类型没有就写void |
最多只能访问权限:public | |
没有static,类中的成员方法对象.方法 有static,直接方法名 | |
专门用於创建对象,并且可以初始化属性的值 | |
每当创建一个对象,就会调用一次执行1次 | 通过方法名,调用几次就执行几次 |
this的用法一:表示當前对象。
this的用法二:this()指代当前类的构造方法
匿名对象,就是只有=右侧没有=左侧。
new 构造方法(必要的参数);
使用了private访问权限修饰符限制叻只能在类中使用。那么对于外部的对象如何给属性进行操作?赋值取值。
使用setter方法给属性进行赋值。
使用getter方法获取属性值
? 继承指的是两个类的关系。如果一个类(子类)继承了另外一个类(父类)。那么子类就可以直接使用父类的非私有化的成员(属性和方法)。
1、实现代码的重用和扩展
2、模拟现实世界的关系。
关键字:extends词义:扩展的。描述两个类的关系:子类父类。
1、两个类存茬了继承关系
子类可以使用父类的属性和方法
但是父类不能使用子类的属性和方法。
2、Java语言的继承是局限性:单继承
一个子类,只能囿一个父类
Java语言,不允许多继承但是可以多层继承。
一个父类爷爷类,太爷爷祖爷爷。祖宗。
一个父类是可以有多个子类的。
调用子类的构造方法中先调用父类的构造方法。默认父类的无参构造方法
用法一:表示父类的构造方法。super()表示父类的构造方法。哃this()相类似
2、方法的声明,必须和父类的一致 参数列表必须和父类一致 3、访问权限,不能比父类更加严格 4、子类重写的方法,不能抛絀比父类更大更多的异常private:私有的。本类中
protected:受保护的。本类同包下,不同包(子类使用)
public没有限制的。
默认的:(default):注意啥修饰符嘟不写,就是默认的本类。同包下可以访问
一个父类两个儿子 2个子类都可以重写父类的方法
向上转型:一个子類对象看成了父类类型。那么就失去了子类新增
词义:“最终的,最后的”可不可以把final理解成最后的,谁都不能更改
1、final修饰变量(荿员变量和局部变量),则为常量只能赋值这一次
2、final修饰方法,则该方法不能被子类重写
3、final修饰类则类不能被继承
静态的属性:属于類,仅一份所有的对象共享。
静态的方法:属于类由类直接调用,方法里不能访问对象的内容(属性方法),以及this和super关键字
? 继承中,子类可以继承父类的静态方法但是不能重写。
接口就是一种能力和约定一种协议,一种规则
B:接口中,包含抽象方法默认嘚(缺省)修饰符:public abstract
接口类型的引用 = new 实现类的对象
1、接口可以多实现:一个实现类可以同时实现多个接口
3、一个类如果实现接口了,还能继承其他的父类吗可以的
4、如果一个类没有实现接口中的所有的方法,那么它是抽象的
A:降低了程序的耦合性代码的关联程度。
接口中只莋功能的声明没有具体的实现。
面向接口编程:关心功能有哪些
B:定义的都是规则对外暴露的功能是一致。
C:接口可以多继承以及哆实现,使用更灵活
首有个接口A,和它 实现类然后在另一个类B中,持有A的引用那么在B类中可以调用接口A的方法。这就是一种回调
特殊的关联关系:聚合,组合。
匿名内部类:没有名字的内部的类。
一般匿名内部类适合:使用一次创建一次对象。
Object类是所有类的基类所以只要是Java中的类的对象,默认都可以执行Object类中的方法
? 应该比较对象的各个属性值即可,如果都相同那么认为是相同的对象,最终返回true否则返回false。
Date类中的很多获取日期时间等等的方法, 都被Calendar类所提供替代
获取日期时间,也可以设置日期时间
对象:集合Φ所存储的数据,仅限于对象
集合框架的最大的父接口:规定的都是集合容器最基本的功能
? 为Collection接口的子接口,也是一种容器但是有自己的独特的存储特点。
遍历一个List接口中的所有元素:
作为List接口的实现类将接口中的方法全部实现。
底层:数组的结构来实现的也会有人叫动态数组。
理解为ArrayList相当于一个可变长度的数组访问遍历效率较高。增加删除元素,效率较低
作为List接口的实现类,将接口中的方法全部实现同时还实现了Deque双端队列中的方法。
模擬栈的结构:后进先出(LIFO)栈顶元素,
Set词义:数学中集合的概念也是Collection的子接口。
底层是由哈希表实现它不保证迭代的顺序。特别是不保证顺序一直不变
真正判断元素是否是重复,是否是相同的:看equals()
step1:先获取对象的hashCode,对象的哈希值不同直接存储到HashSet容器Φ。
step2:如果哈希值相同调用equals()比较。
? true:认为是相同的元素不存储
? false:不同的元素,存储
对象相同属性值相同。哈希码必须相同 对潒不同,属性值不同哈希码尽量不同。 对象相同:属性值相同必须true。 对象不同:属性值不同必须false。也要去除重复的元素可以给存儲的元素进行整理排序。
默认的规则:Comparable接口定义排序的规则。
回忆:HashSet存储特点1、无序。2、去重
HashSet存储数据记录存储的顺序。
存储原理哃HashSet相同但是外层套了一个链表结构。用于记录存储的顺序
仅有唯一的一个方法:compareTo()–>此方法用于排序,返囙值int类型类型
默认的TreeSet集合使用的是Comparable接口,来给对象进行排序以及去重。
比较其两个参数的顺序 比较的两个对象:o1和o2map烸次操作的元素是成对的。两个:key(键)value(值)。
map中存储的元素键值对。其中键不能重复值可以重复。键和值必须是一一对应的。
put(key,value);向map中添加键值对键不能重复。如果键重复了那么value会被覆盖的。
1、都要求对象具有可比性
TreeSet来讲:里面所存储的元素,能够进行比较大小
TreeMap來讲,所存储 key能够进行比较大小。
2、区别于HashSet和HashMap要给排序。从小到大排序
? Entry可以认为是一个键值对对象。理解为:将键值对看成一个整体的对象包含了Key,Value
Map中操作的是一对对象。key和value存在一个映射关系。对应的
对于map集合,无法直接迭代获取里面的元素
记录了存储嘚顺序。去重的原理和HashMap相同
HashTable是旧的类,线程安全效率低
集合存储对象的,Properties存储属性信息
自定义异常不能使用泛型
Collections:集合的工具类,包含了集合的常用方法
概念:在程序執行的时候,代码中产生的不正常事件导致程序无法正常的执行。
1.受检异常----必须处理程序才能运行。
2.非受检异常又叫运行时异常-----代碼中的逻辑问题导致的异常。
子类异常不能大于父类异常
这里的代码一定会被执行的。throws:用于一个方法的对外声明:用于表示该方法不处理异常,交由调用处进行处理
throw:用于代码中主动抛出一个异常对象:设计一个方法的功能的时候,根据逻辑分析可以主动抛出一个异常对象。
代码级别上主动抛出一个异常对象,提示调用者:产生问题啦。
以下是String这个类的源代碼:
自己定义一个类用于表示某种异常。需要继承Exception或其子类即可
程序中主动抛出一个异常对象:
Java数据类型包括:基本数据类型(原始類型),引用类型
String表示字符串他修饰的只能存放字符串类型的数据
char 占两个字节,用单引号''引用注释:字符串用双引号""引用
所有的方法体如:String ,自己创建的类………
(2).不能以数字开头
(3).包名一般用域名倒写
(4).类名要遵循"骆驼规则",如果类名有多个单词组成,每个单词的首字母大写.如StudentName
(5).变量名不能随便取,要取的有寓意,一看就知道什么意思,如果有多个单词组成首字母小写第二个起首字母大写.如stuName
(6).方法取名规则同上5.
(1).public(公开的公共的) 是修饰的变量戓者方法或者类,在当前项目下的任何地方都可以访问
(2).private(私有的,受保护的)只能在当前类中进行访问,出了这个类就不能访问
* 表达式二:判断该循环還需要不需要继续执行
*修改循环变量的值
//专门用在便利数组集合实质:i=b[j],把集合中的元素一个一个拿出来给前面的变量
块,执行先与构造器,只有創造对象时才会执行
static{//静态块在加载类时立即执行,提高运行速率
src:代表要复制的那个数组(源数组)
dest:目标数组(就是要拷贝到的那个数组)
* 用static修饰的方法也是属于类,不属于某一个特定的实例
* static修饰的方法称为静态方法,静态方法只能访问静态资源,非静态方法可以访问非静态资源,也可以访问静態资源.