基础知识
思维导图
程序设计基础
(1)java程序的运行机制:编写源代码——>编译——>类装载——>字节码校验——>解释——>运行
(2)Java的标识符中可以有&,并且字母的要求是包含中文字母在内的世界各国的文字。null不能作为标识符,
(3)Java文档生成器(javadoc命令可以扫描java的语言程序,提取文档注释,生成该程序的Java帮助文档)
(4)分隔符包括空白符,注释和普通分隔符。空白符有空格,制表符(\t),走纸换页(\f),回车(\r),换行(\n).普通分隔符有(){}[];,.:等等。
(5)Java的包装类:
用途:1.作为基本数据类型对应的类,方便设计对象的操作。
2.包含基本数据类型的相关属性(最大值和最小值)
基本类型 | 类名 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
(6)整数常量:
十六进制(0-9 a-f或者A-F组成的串,以0x或者0X开头)
八进制串(0-7的串,首字符是0)
二进制串(以0b或者0B开头)
转义单引号 ’ " \
(7)变量类型
1.类变量:定义类变量的时候使用static,接口变量可以不适用static.
2.实例变量:不使用static修饰的类变量
3.阵列组件:属于未命名的变量,按默认值初始化,创建的对象就是数组。阵列是若干对象,阵列中的所有组件具有相同类型。
4.例外形参:例外处理程序的形式参数。
(8)符号常量:public static final修饰,通常在类中定义,通过类名引用。
&&和||的运算速度更高,并且&和&&的优先级比|和||要高。
(9)不同长度的整数进行按位运算的时候,会把二进制位数较短的整数的高位补0,补齐位数再进行运算。
<< 左移 | 低位补0 |
---|---|
>>带符号右移 | 高位补符号位 |
>>>不带符号右移 | 高位补0 |
(10)instanceof常用来判断一个对象是否属于某个指定的类的实例。
树节点的搜索遍历就用instanceof来判断子类是哪个类。4
类和对象
知识1
1.类的声明:
修饰符 class [extends 父类] [implements 接口名]
java允许多个接口,每个接口之间用,
允许类内的成员变量和成员方法同名,不同类之间也允许出现同名的成员变量。
2.被final修饰的成员变量不能被子类重载,static修饰类方法,不允许重载,直接通过类来访问。构造方法没有返回值类型,不能通过方法名调用(必须通过new)
3.对象创建(声明的时候不给对象分配空间,用new为对象分配空间的时候来实例化对象)
对象释放:如果对象不再使用了,java系统通过垃圾回收器GC周期性释放无用对象所使用的内存,完成对象的清除工作。
Circle c1;
c1=new Circle;
//简化
Circle c1=new Circle();
4.Java的变量和方法用全限定的名字标识,也就是使用包名,类名,域名三部分(之间用.分割)的方式访问类成员。包的名字有层次关系,各层之间以.隔开。每个包对应于当前目录下的一个与包同名的目录,子包的类存在于相应的子目录中。一个文件中最多只能有一个包。
package pkg1[.pkg2[.pkg3...]];
包的引入:import语句只用来把其他包中的类引入当前的名字空间中,但是当前包总是存在于当前的名字空间,程序中无需引入同一个包或者包中的其他元素。
import pkg1[.pkg2[pkg3...]]
5.不包括任何抽象方法,也可以声明为一个抽象类。抽象类不能够实例化对象。如果一个类需要继承抽象类,则该类必须要实现抽象类中定义的所有抽象方法,否则这个类也会变成抽象类。
6.接口只有常量和抽象方法。
修饰符只有public和default,成员变量必须是final或者static,同时可以省略不写。
[接口修饰符] interface<接口名> [entends<父类接口列表>]{
//接口体
}
7.接口可以extends出子接口。派生接口不仅保有父接口的成员,同时也可以加入新的成员来满足实际问题的需要。
8.内部类可以直接使用外部类的成员变量,即使它们是private的。如果内部类和外部类有同名的成员变量,可以使用“外部类名.this"来访问外部类中同名的成员变量。非外部类访问的时候,再用类名和new之前分别冠以外部类的名字和外部对象名。
9.用匿名类创建新对象,需要重写抽象方法
abstract class student{
abstract void speak();
}
psvm:
student s=new student()
{
void speak(){
sout
}
}
10.泛型类的声明并不指明参数列表是什么类型,可以是任何对象或者接口,但不能是基本数据类型。泛型列表中的泛型可以作为类的成员变量的类型,方法类型,局部变量的类型。使用泛型类声明对象的时候,必须指明类中使用泛型的具体类名。
Student<String,String> model=new Student<String,String>();
this
this指的是每个实例对象指向自己的引用,可以出现在实例方法的构造方法中,不能出现在static修饰的静态方法,也不能出现在类方法中。
1.在非static修饰的成员方法和构造方法中用this来指向成员变量或者成员方法
Class cat{
int height;
String color1;
public cat(String color)
{
this.color1=color;//成员变量
this.cry();//调用成员方法
}
public cat(String color,int age)
{
this(color);//调用其他构造方法
this.age=age;
}
public void cry()
{
}
}
2.如果成员变量和方法变量重名,用this表示方法变量
3.返回实例对象本身的引用
(this可以作为类成员方法return语句的参数,用来返回对象本身的引用)
主函数:Dog dog=new Dog();
dog.grow();
class Dog()
{
int height=100;
int age=10;
public Dog grow()
[
height++;
age++;
return this;
}
}
super
当子类继承父类的时候,为解决变量隐藏(子类的成员变量与父类成员同名)或者方法覆盖(子类的成员方法与父类的相同)
用super来访问被隐藏的父类的成员变量和成员方法。
1.子类创建时,默认自动调用父类的无参构造。但如果父类定义了有参构造,系统就不会再提供无参构造。如果父类只有无参构造,子类调用父类的构造方法会报错,但会调用。
2.如果某个类的构造方法用this来调用本类的另外一个构造方法,那么系统不会默认用这个构造方法来调用父类的构造方法。
3.子类可以向上转型成父类
father f=new child();(父类引用不能操作子类对象新增的成员变量,允许把子类的实例赋值给父类的引用,也允许一个父类的引用指向子类对象)
只有当父类的引用实际指向一个子类对象的时候,才可以把父类转为子类。
child c=new father;//err
4.上转型对象不能操作子类新增加的成员变量和方法,可以代替子类对象调用子类重写和使用方法,可以调用子类继承的成员变量和隐藏的成员变量。
5.不同类的对象收到相同的信息的时候,会得到不同的结果叫多态。
多态性分为静态多态性和动态多态性。静态是指定义在一个类或者一个函数中的同名函数,它们根据参数表区别语义和执行的功能.
动态多态性指的是定义在一个类层次中的不同类的重载函数,它们具有相同的函数原型,需要根据指针指向的对象的类来区别语义。
6.实例变量依赖于对象,用new创建新对象的时候,Java会为每个对象分配一块内存空间。类变量(用static修饰)依赖于类,Java会为类变量分配一块共有空间。每个对象对类变量的修改都会影响其他的实例对象。
7.类方法不能使用this关键字,因为静态方法不属于任何一个实例.类方法能被类直接调用,实例方法不能被类直接调用。
class Person{
static long total=1000;}
person a=new("张三");
person b=new("李四");
最后total的值是1002
8.System类中的in和out都是类变量,因此经常直接通过System类访问in和out对象,完成输入和输出。
9.abstract和final不能同时修饰一个类,volatile修饰的成员变量叫做易失变量(这个变量同时被几个线程控制和修改)(这个变量不仅被当前程序所掌握,在运行过程中可能存在其他未知的程序操作来影响和改变变量的取值).synchronized用于多线程程序的协调和同步,意味着不管哪一个线程运行到这个方法的时候,都需要检查有没有其他线程在用这个方法。
10.泛型接口名
Interface 泛型接口<泛型列表>{}
数组与字符串
知识点3
1.数组的复制。用=可以实现数组复制,可以使俩个数组指向同一个内存空间。System类中arrayCopy方法可以把数组元素的值复制给另一个数组,但不改变原数组的值,并且俩个数组指向不同的内存单元。
int []num={1,2,3,4};
int []numcopy=num;
System.arrayCopy(src,srcPos,dest,destPos,length);
//把src数组中从srcPos开始的length长度的数组复制到以destPos开始的dest中
2.二维数组可以对各行分别初始化
double score=new double[3][];
score[1]=new double [3];
score[2]=new double [2];
score[3]=new double [2];
3二维数组获取行数和列数
数组名.length//获取数组的行数
数组名[行号].length//获得数组指定行的列数`
4.Array提供四种方法:equals()比较俩个数组是否相等。
fill()用某个值填充数组
sort()用于数组的分类
sort()用于数组的排序
binarySearch()用于在已经排好序的数组中查找指定元素
asList()接收任意的数组为参数,转变为List容器
5.String类定义不变字符串,StringBuffer类用于可变字符串的处理。字符数组转换为字符串。
char []Array={'h','e','l');
String s=new String(Array);
6.把字符串常量传递给字符串变量的时候,java会把常量对应的对象传给字符串常量,俩个常量均指向同一块内存空间。
String s1="hello";
String s2="hello";
7.StringBuffer(Stringstr)
构造一个字符缓冲区,并且将其内容初始化为指定的字符串内容。
8.正则表达式:字符串的语法规则,用于模式匹配和替换,主要用于文本和字符串处理。一个正则表达式由字符以及元字符组成文字模式,用以描述在查找文字主体时,待匹配的一个或多个字符串。
[a]:匹配字符a
[^f]:不与f匹配
9.Java中把类按照不同的功能划分成了不同的集合,每个集合称为一个包,叫做类库。除了java.lang之外,其他包的内容都要用import语句
import <包名/类名>;
10,数值型包装都有俩个构造方法。每种白装类型的对象中所包含的值是不可改变的。要改变对象的值必须生成新的对象。
public double(double value);
//使用double值创建一个对象
public double(String s)
//通过字符串创建一个对象
知识点4
1.自动装箱:基本类型的数据可以自动转换为包装类。
自动拆箱:包装类的实例自动转换为基本类型的数据。
2.System类的成员都是静态的,
(1)exit:终止虚拟机的运行
(2)getProperties:获取当前虚拟机的环境属性。
例题
1.if()里面的一定是Boolean值
int a=1;
if(a)//错
if(a<<3)//错
if(a=2)//错
2.==比较对象是否引用同一个实例
String s1="hello";
String s2="hello";
String s3=new String("hello");
boolean b1=(s1==s2);//true
boolean b2=(s1==s3);//false