java背景
java由sun公司开发
Java语言特性:
完全面向对象,简单,分布式,健壮,安全,可移植(跨平台),多线程
java运行机制:不同的操作系统有不同的JVM,JVM屏蔽了底层系统的差异,实现“一次编译,处处运行”
运行一个java程序需要使用java命令,编译一个Java程序需要使用一个javac命令
path下是java命令的路径,例如编译器和解释器。classpath下是指定查找java程序文件的路径。
java将文件编译成字节码文件,字节码在不同系统下的jvm中,转换成不同系统的机器码,从而实现java的跨平台
jvm是java虚拟机
基础语法
1.常量:指在程序执行期间其值不能发生变化的数据。
2.基本数据类型(8种):
整数类型(byte 、short、int、long)
浮点数类型(float、double)
布尔类型(boolean)
字符类型(char)
3.位运算
涉及原反补码,正数不变,负数补码等于符号位不变,取反+1。
若位运算结果的补码仍为负数,则再取其原码获得原数
&优先于|
4.if和switch
if比switch强大,if可以用作于范围,但switch能用于范围的值
switch的参数支持类型:byte,int,short,char,枚举,String(jdk1.7之后)
5.数组
数组是存储具有相同数据类型的数据的集合,可以使用数组的名字来引用数组中存储的数据
数组的定义 数据类型[] 数组名 = new 数据类型[数组长度]
new关键字辉仔堆区开辟空间
数组有默认值: boolean flase,String null , char ‘’
数组遍历:通过下标遍历,增强for循环(for-each)
java数组的缺点,一旦创建,长度不可变,并且要用类型
面向对象
1.面向对象的特点:
抽象,封装,继承,多态
2.类
类是对大量对象共性的抽象,是可观事务在人脑的主观反映,是创造对象的模版
类由属性和行为组成
类的定义语法:
[修饰符] class 类名{//类的声明部分
[成员变量]
[成员方法]
}
3.方法重载:
同一个类中,方法名相同,参数列表不同(参数数量或者类型),即为方法重载
4.构造方法:
为了完成初始化操作,与类名一样的方法,没有返回值,如果没有定义构造方法,系统会提供一个无参的构造方法,如自己定义了,系统就不提供无参构造方法。
5.this的用法
1)通过this关键字指定当前对象,可以让隐藏的成员(局部变量和成员变量同名时)变量显示出来
2)通过this()也可以访问构造方法 ,但 this()必须位于构造方法的第一行
6.变量与方法
变量分为成员变量和类变量,同方法一样,存放于内存的公共区
方法也分为成员方法和类方法,只能访问类成员
类变量和类方法可以用类名直接访问,都是共有的
7.static关键字
static也可以声明静态代码块,类加载器加载类时,最先执行静态代码块,只会执行一次
不加static声明就是一个非静态代码块,在调用构造方法之前执行,会多次执行
封装,private关键字,属性私有化
调用子类构造器,默认先调用父类对象的构造器,即默认有super();
super(当前对象父对象):可以访问父类非私有的方法,super()可以调用父类构造
this()和super()不能同时出现
8.继承
java中的继承是单继承,一个类智能有一个父类
如果一个类没有显式的继承一个类,那他的父类就是java.lang.Object
子类继承的只能是父类非私有,构造方法不能继承
创建子类对象时,必须先调用父类的构造方法,再调用子类自己的构造方法,
9.权限
关键字 | 访问权限 | 继承权限 |
private | 本类内部可以访问 | 不能被继承 |
(default) | 本类内部加同包其他类 | 能被同包子类继承 |
protected | 同包加不同包的子类 | 能被继承 |
public | 其他类 | 能被继承 |
10.final的使用
1.修饰变量 变量变成常量
2.修饰方法 子类不可重写
3.修饰类 不可被继承
11.抽象类
一个类中只要有一个抽象方法,就必须声明称抽象类,抽象类不能实例化,抽象类中可以没有抽象方法
一个非抽象类如果继承抽象类,则必须实现它中所有的抽象方法。
12.接口
接口 interface 接口名 用implements实现
里面的变量都是常量,方法都是抽象方法(关键字可以省略,默认)
jdk1.8之后,可以使用default定义默认方法
还可以定义静态方法,不实例化,也能直接调用方法
接口是为了弥补java单继承的缺点
接口可以多继承其他多个接口
一个类只能继承一个类,但是能实现多个接口
13.==和equals
对于字符串常量,==比较的是内存中的首地址,如果不是同一个对象,==返回false。
对于非字符串变量,equals()比较的是内存的首地址,==比较的也是首地址。此时,两者等价,都是比较两边指向的是不是同一个对象。内存地址不同则对象不同。
14.克隆
1.这个类实现Cloneable接口
2.重写Object中的克隆方法
潜克隆:指复制了基本类型的数据,引用类型的对象没有复制,纸箱同个对象
深克隆:引用类型的也复制一份,在引用类型的对象也添加接口和重写方法
15.new和赋值的区别
String的new方法,是生成在堆区,再放在常量池中
直接给String对象赋值,是在String常量池中寻找,如果没找到,就创建
生成String优先采用赋值的方式,效率高
16.String,StringBuilde,StringBuffer
StringBuffer线程安全,效率低,是可变字符串
StringBuilder线程不安全,效率高,是可变字符串
String是不可变字符串