相当于乘以2的n次幂
>>n:
相当于除以2的n次幂
&和&&的区别
1.&和&&都可以用作逻辑与(and)的运算符,当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
2.&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。
==与equals的区别
==和equals都是比较的,而前者是运算符,后者则是一个方法,结果都是boolean类型的。
基本数据类型和引用数据类型都可以使用运算符==,如果是基本数据类型,比较的是==两边的值,如果是引用数据类型,比较的是引用变量指向的那个地址值。
而只有引用类型数据才可以使用equals,equals方法是用于比较两个独立对象的内容是否相同。
如果是比较字符串的内容是否相同就用equals方法。
switch中case穿透问题
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束
switch(表达式){
case常量:
语句;
break;
default:
语句;
break;
}
Java:
从入门到放弃
(二)
访问控制权限
1.private属于私有访问权限,可以用在属性的定义、方法的声明上,一旦使用了private关键字声明,则只能在本类中进行访问。
2.default(默认)访问权限,如果一个类中的属性或方法没有使用任何的访问权限声明,则就是默认的访问权限,默认的访问权限可以被本包中的其他类所访问,但是不能被其他包的类所访问。
3.protected属于受保护的访问权限,一个类中的成员如果使用了protected访问权限,则只能被本包及不同包的子类访问。
4.public属于公共访问权限,如果一个类中的成员使用了public访问权限,就可以在所有类中被访问,不管是否在同一个包中。
数组概念:
数据就是存储数据长度固定的容器,保证多个数据类型要一致。
数组的定义
数据类型[]数组名=new数据类型[长度];
=new数据类型[]{元素1,元素2};
={元素1,元素2};
定义类,就是定义类的成员,包括成员变量和成员方法。
成员变量的默认值
数据类型 默认值
整数(byte,short,int,long) 0
浮点数(float,double) 0.0
字符(char) '\u0000'
布尔(boolean) false
数组、类、接口 null
成员变量和局部变量的区别
成员变量默认初始化,局部变量必须赋值才能使用
成员变量在堆内存中,局部变量在栈内存中
构造方法的定义
方法名与类名相同,首字母大写,没有返回值类型
Scanner类:
一个可以解析基本类型和字符串的简单文本扫描器
Scannersc=newScanner(System.in);
inti=sc.nextInt();
Strings=sc.next();
匿名对象:
没有变量名的对象
创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。
虽然是创建对象的简化写法,但是应用场景非常有限。
Random类:
该类的实例用于生成伪随机数
Randomr=newRandom();
inti=r.nextInt();
ArrayList类
大小可变的数组的实现,存储在内的数据称为元素。
ArrayListlist=newArrayList<>();
publicbooleanadd(Ee):
将指定的元素添加到此集合的尾部。
publicE remove(intindex):
移除此集合中指定位置上的元素。
返回被删除的元素。
publicEget(intindex):
返回此集合中指定位置上的元素。
返回获取的元素。
publicintsize():
返回此集合中的元素数。
遍历集合时,可以控制索引范围,防止越界。
基本类型 基本类型包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
String类
字符串不变:
字符串的值创建后不能改变。
构造方法
publicString():
初始化新创建的String对象,以使其表示空字符序列。
publicString(char[]value):
通过当前参数中的字符数组来构造新的String。
publicString(byte[]bytes):
通过使用平台的默认字符集解码当前参数中的字符数组来构造新的String。
判断功能的方法
publicbooleanequals(ObjectanObject):
将此字符串与指定对象进行比较。
publicbooleanequalsIgnoreCase(StringanotherString):
将此字符串与指定对象进行比较,忽略大小写。
获取功能的方法
publicintlength():
返回此字符串的长度
publicStringconcat(Stringstr):
将指定的字符串连接到该字符串的末尾。
publiccharcharAt(intindex):
返回指定索引处的char值。
publicintindexOf(Stringstr):
返回指定子字符串第一次出现在该字符串内的索引。
publicStringsubString(intbeginIndex):
返回一个字符串,从beginIndex开始截取字符串到字符串结尾。
publicStringsubString(intbeginIndex,intendIndex):
返回一个子字符串(左闭右开)。
转换功能的方法
publicchar[]toCharArray():
将此字符串转换为新的字符数组。
publicbyte[]getBytes():
使用平台的默认字符集将该String编码转换为新的字节数组。
publicStringreplace(CharSequencetarget,CharSequencereplacement):
将与target匹配的字符串使用replacement字符串替换。
CharSequence是一个接口,也是一种引用类型。
作为参数类型,可以把String对象传递到方法中。
分割功能的方法
publicString[]split(Stringregex):
将此字符串按照给定的regex(规定)拆分为字符串数组。
static关键字
被static修饰的成员可以并且建议通过类名直接访问。
静态代码块:
定义在成员位置,使用static修饰的代码块{}
执行:
随着类的加载执行且仅执行一次,优先于main方法和构造方法执行
Arrays类
publicstaticStringtoString(int[]a):
返回指定数组内容的字符串表示形式
publicstaticvoidsort(int[]a):
对指定的int型数组按数字升序进行排序
Math类
publicstaticdoubleabs(doublea):
返回double值的绝对值
publicstaticdoubleceil(doublea):
返回大于等于参数的最小的整数
publicstaticdoublefloor(doublea):
返回小于等于参数最大的整数
publicstaticlonground(doublea):
返回最接近参数的long(相当于四舍五入)
Java:
从入门到放弃(三)
Java中4个系统定义的常量:
NaN非数值、lnf无穷大、-lnf负无穷大、null空。
继承:
就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。
子类可以直接访问父类中的非私有的属性和行为。
好处:
1.提高了代码的复用性。
2.类与类之间产生了关系,是多态的前提。
子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用super关键字。
父类中的成员变量私有时,子类是不能直接访问的,可以通过父类中提供的公共的get和set方法。
子类对象调用方法时,会优先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。
方法重写:
子类中出现与父类一模一样的方法时,会出现覆盖效果,也称为覆写。
(声明不变,重新实现)
子类可以根据需要,定义特定于自己的行为,即沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从而进行扩展增强。
重写的注意事项
1.必须要保证子类方法权限大于等于父类权限
2.函数名和参数列表一模一样
3.子类方法的返回值必须小于等于父类方法的返回值范围
super:
代表父类的存储空间标识(父类的引用)
this:
代表当前对象的引用
每次创建子类对象时,先初始化父类空间,再创建子类对象本身,如果父类成员非private修饰,则子类可以随意使用父类成员。
子类构造方法调用时,一定先调用父类的构造方法。
(子类的每个构造方法中均有默认的super(),调用父类的空参构造。
手动调用父类构造会覆盖默认的super()。
super()和this()都必须是在构造方法的第一行,所以不能同时出现。
)
抽象类
我们把没有方法主体的方法称为抽象方法,把包含抽象方法的类称为抽象类。
修饰符abstract返回值类型方法名(参数列表);
继承抽象类的子类必须重写父类所有的抽象方法,否则该子类也必须声明为抽象类。
抽象类中也可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。
接口:
Java语言中的一种引用类型
接口的内部主要就是封装了方法,包含抽象方法(JDK7及以前),默认方法和静态方法(JDK8),私有方法(JDK9)。
接口使用interface关键字定义,它也会被编译成.class文件,但是它和类不是同一种引用数据类型。
接口不能创建对象,实现接口的类需要实现接口中所有的抽象方法,否则它必须是一个抽象类。
抽象方法:
publicabstract返回值类型方法名(参数列表);//默认publicabstract
默认方法:
publicdefault返回值类型方法名(参数列表){}//默认public
静态方法:
publicstatic返回值类型方法名(参数列表){}//默认public,只能通过接口名调用
私有方法:
只有默认方法可以调用
私有静态方法:
默认方法和静态方法可以调用
接口的多实现:
在继承体系中,一个类中只能继承一个父类。
而对于接口而言,一个类是可以实现多个接口的,这叫做接口的多实现。
在接口的多实现中,如果抽象方法有重名的,只需要重写一次。
如果默认方法有重名的,必须重写一次。
接口中存在同名的静态方法不会冲突。
继承的优先级高于实现。
多态:
同一行为具有不同的表现形式
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后的方法。
引用类型转换
向上转型:
子类类型向父类类型向上转换的过程
向下转型:
父类类型向子类类型向下转换的过程(要求是已经向上转型的子类对象,将父类引用转为子类引用)
instanceof关键字
变量名instanceof数据类型
如果变量属于该数据类型,返回true,如果变量不属于该数据类型,返回false.
final关键字
修饰类:
被修饰的类不能被继承
修饰方法:
被修饰的方法不能被重写
修饰变量:
被修饰的变量不能被重新赋值
对于final修饰的成员变量,要么直接赋值,要么通过构造赋值,只能二者选其一。
引用类型的局部变量被final修饰后,只能指向一个对象,地址不能再更改。
但是不影响对象内部成员变量值的修改。
代码块
普通代码块:
直接在方法或者是语句中定义的代码块
构造代码块:
直接写在类中的代码块,每次实例化对象都会执行构造块中的代码,而且优于构造方法执行
静态代码块:
静态代码块优先于主方法执行,而且只执行一次
类的权限修饰符
外部类:
public/(default)
成员内部类:
public/protected/(default)/private
局部内部类:
什么都不能写
内部类:
将一个类定义在另一个类里面
成员内部类:
定义在类中方法外的类
访问特点:
内部类可以直接访问外部类的成员,包括私有成员。
外部类要访问内部类的成员,必须要建立内部类的对象。
内部类对象格式:
外部类名.内部类名对象名=new外部类型().new内部类型();
内部类仍然是一个独立的类,在编译之后内部类会编译成独立的.class文件,但是前面冠以外部类的类名和$符号。
匿名内部类:
本质是一个带具体实现的父类或者父接口的匿名的子类对象。
(匿名内部类必须继承一个父类或实现一个父接口)
局部内部类:
如果一个类是定义在一个方法内部,那么这就是一个局部内部类。
(只有当前所属的方法才能使用它,出了这个方法就不能用了)如果希望访问所在方法的局部变量,那么这个局部变量必须是有效final的(从java8开始,只要局部变量事实不变,final关键字可以省略)
new父类名(父接口名)(){
//方法重写
};
Java:
从入门到放弃(四)
Object类
java.lang.Object是Java语言中的根类,即所有类的父类。
如果一个类没有特别指定父类,那么默认继承Object类。
publicStringtoString():
返回该对象的字符串表示。
(对象的类型+@+内存地址值)
publicbooleanequal(Objectobj):
指示其他某个对象是否与此对象相等。
我们直接输出对象名的时候其实通过该对象调用了toString()方法
Objects类
publicstaticbooleanequals(Objecta,Objectb):
判断两个对象是否相等
Date类
java.util.Date类:
表示特定的瞬间,精确到毫秒。
publicDate():
分配Date对象并初始化此对象,已表示分配它的时间(精确到毫秒)
publicDate(longdate):
分配Date对象并初始化此对象,以表示自动标准基准时间(1970年1月1日00:
00:
00GMT)以来的制定毫秒数。
publiclonggetTime()把日期对象转换成对应的时间毫秒数。
DateFormat类
java.text.DateFormat是日期/时间格式化子类的抽象类,我们通过这个类可以完成Date对象和String对象之间的来回转换。
由于DateFormat为抽象类,所以需要一个常用的子类java.text.SimpleDateFormat
publicSimpleDateFormat(stringpatten):
用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat
publicStringformat(Datedate):
将Date对象格式化为字符串
publicDateparse(Stringsource):
将字符串解析为Date对象
Calendar类
java.util.Calendar是日历类,在Date后出现,替换掉了许多Date的方法。
该类将所有可能用到的时间信息封装为静态成员变量
publicstaticCalendargetInstance():
使用默认时区和语言环境获得一个日历(静态方法创建Calendar类的对象)
publicintget(intfield):
返回给定日历字段的值
publicvoidset(intfield,intvalue):
将给定的日历字段设置为给定值
publicabstractvoidadd(intfield,intamount):
根据日历的规则,为给定的日历字段添加或减去指定的时间量
publicDategetTime():
返回一个表示此Calendar时间值的Date对象
西方星期的开始为周日,在Calendar类中,月份的表示是以0-11代表1-12月
System类
java.lang.System类中提供了大量静态方法可以获取与系统相关的信息或系统级操作
publicstaticlongcurrentTimeMillis():
返回以毫秒为单位的当前时间
publicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength):
将数组中指定的数据拷贝到另一个数组中
StringBuilder类
StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。
并且能够对其中的字符串进行各种操作。
它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。
StringBuilder会自动维护数组的扩容。
public StringBuilder():
构造一个空的StringBuilder容器。
public StringBuilder(String str):
构造一个StringBuilder容器,并将字符串添加进去。
public StringBuilder append(...):
添加任意类型数据的字符串形式,并返回当前对象自身。
public String toString():
将当前StringBuilder对象转换为String对象。
集合
集合:
集合是java中提供的一种容器,可以用来存储多个数据。
集合和数组的区别
数组的长度是固定的。
集合的长度是可变的。
数组中存储的是同一类型的元素,可以存储基本数据类型值。
集合存储的都是对象。
而且对象的类型可以不一致。
Collection:
单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List和java.util.Set。
其中,List的特点是元素有序、元素可重复。
Set的特点是元素无序,而且不可重复。
List接口的主要实现类有java.util.ArrayList和java.util.LinkedList,Set接口的主要实现类有java.util.HashSet和java.util.TreeSet。
Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法,这些方法可用于操作所有的单列集合。
public boolean add(E e):
把给定的对象添加到当前集合中。
public void clear():
清空集合中所有的元素。
public boolean remove(E e):
把给定的对象在当前集合中删除。
public boolean contains(E e):
判断当前集合中是否包含给定的对象。