目录
介绍
Java是半编译半解释性语言,是一门面向对象的编程语言。它将.java的源程序文件编译成拓展名为.class的字节码文件,字节码文件可以在任何一台装有JVM虚拟机的操作系统上运行,从而达到“一次编译,随处运行”的目的。Java三大特征:封装,继承,多态。
jvm:Java虚拟机;jre:java运行环境;jdk:java开发工具
下载相关软件,配置环境变量后即可进行java程序的运行使用(jdk,idea)
数据类型
java数据类型分为两类:
基本数据类型:
整型 | 数据范围 | 占用内存的字节 |
---|---|---|
byte | -128~127 | 1字节 |
short | -32768~32767 | 2字节 |
int【Java中默认的整型的数据类型】 | -2^31~2^31-1 | 4字节 |
long | -2^63~2^63-1 | 8字节 |
声明long数据的时候,后面需要加L或者l (一般加大写L);
数据类型 | 数据范围 | 占用的字节数 |
---|---|---|
float | -3.4* 10^38~ 3.4*10^38 | 4字节 |
double(Java默认的是double类型的数据) | -1.79*10^308 ~ 1.79 * 10^308 | 8字节 |
1.声明float类型的数据的时候加f或者F;
2.double类型的数据的有效位数 15~16;
3.float类型的数据有效位数是 6~7;
数据类型 | 数据范围 | 占用的字节数 |
---|---|---|
char | 除了\ 都可以当成一个字符 | 2字节 |
数据类型 | 数据范围 | 占用字节数 |
---|---|---|
boolean | true或者false | 1字节 |
引用数据类型
类、接口、数组
类型转换
- 隐式转换
例子:
- 显式转换(强制类型转换)
在数据前加上要强制转换的类型,例子:
变量和常量
常量:
由final修饰的变量: final 数据类型 变量名=数据;
常量在定义时就必须赋值,且不能更改
变量:
- 变量的定义声明:数据类型 变量名;
- 变量的赋值:变量名 = 数据;
变量的定义和赋值可以连在一起写:数据类型 变量名= 数据;变量在使用之前必须赋值,变量名不能重复。
标识符
定义:用来给类、变量、方法、接口、对象、自定义数据类型命名的标识,称作标识符
规则:
1、所有标识符都应以字母(A-Z 或 a-z)、下划线(_)、美元符($)开始,即首字符
2、首字符之后可以是字母、美元符、下划线、数字的任何组合
3、数字不能为首字符
4、关键字不能用作标识符,标识符对大小写敏感
5、标识符对大小写敏感(即name 和 Name 是两个不同的标识符)
6、标识符之间不能有空格
运算符
算术运算符:+、-、*、/、%(取余)、++、--;
关系运算符:==、!=、>、<、>=、<=;
逻辑运算符:&&、||、!;
赋值运算符:=、+=、-=、*=、/=;
a+=b<==>a=a+b,其他同理
条件运算符:表达式X? a : b;(三元运算符)
表达式X为真,则值为a,为假值为b
修饰符
权限修饰符:public,private,protected,默认
Public | protected | (default) | private | |
---|---|---|---|---|
同一个类 | √ | √ | √ | √ |
同一个包 | √ | √ | √ | × |
不同包,但父子关系 | √ | √ | × | × |
不同包,非父子关系 | √ | × | × | × |
其他修饰符:final,static,abstract......
分支语句
if-else:
语法:if(判断语句){ }else{ },多重if-else语句:if(判断语句1){ }else-if(判断语句2){ }else{ }
switch:
语法:switch( ){ case 值1:{ } case 值2:{ } default { } }
break:结束循环
continue:结束当前一次循环,进行下一次
break,continue,return的区别及作用
break语句通常用于循环或switch语句中,其主要作用是立即终止当前的循环或switch语句,跳出这些结构;continue语句主要用于循环中,它的作用是跳过本次循环的剩余部分,直接进入下一次循环;eturn语句主要用于函数中,它的作用是立即结束函数的执行,并从函数被调用的位置继续执行程序。
循环语句:
while循环:
while(循环条件){ 循环体 }
for循环:
for(int i=0;循环条件;i++){ 循环体 }
增强for循环(foreach):
for(数据类型 对象名 in 数组/集合 ){ } 原理:迭代器
do-while循环:
do{ 循环体 }while(循环条件);
数组
存储同种数据类型的容器,可以隐式转换的类型也可以,例:double数组可以存放int数据
定义数组:数据类型[ ] 数组名 或 数据类型 数组名[ ]
静态初始化:
数据类型[ ] 数组名 = new 数据类型[]{数组元素1,数组元素2,数组元素3}
简化:数据类型[ ] 数组名 ={数组元素1,数组元素2,数组元素3}
动态初始化:
数据类型[ ] 数组名 = new 数据类型[数组长度]
数组索引从0开始,长度为5的数组的索引是0,1,2,3,4
数组可以通过索引查找数组元素,数组名代表数组地址
类,对象,方法
类是对象共同特征的描述
对象是真实存在的具体东西
方法是程序中最小的执行单元,方法可以提高代码的复用性和可维护性
描述一类事物的类叫做java bean类,是不写main方法的
instanceof
判断左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
使用方式:b instanceof Object
构造方法
方法名和类名相同的方法,构造方法没有返回值,用来构造对象
成员和局部
成员变量和成员方法:定义在类里的变量、方法
局部变量和局部方法:定义在方法里的变量、方法,
成员变量有默认值,局部变量必须初始化
重载
同一个类中,多个方法的方法名相同,参数不同(个数、数据类型)的方法,与返回值无关
参数顺序不同可以构成重载,但不建议
重写
子类继承父类,可能重写父类方法,要求方法名相同,参数相同,返回类型是父类返回类型或子类,修饰符限制不能严于父类。重写不能改变静态/非静态属性,但可以定义一个与父类同名的静态方法,以便隐藏父类的静态方法
重载与重写的区别:
1.重载实现的是编译时的多态性,而重写实现的是运行时的多态性。2.重载方法的返回类型可以修改,而重写方法不能。3.重载方法的异常可以修改,重写方法的异常可以减少或删除,一定不能抛出新的或者更广的异常。4.重载方法的权限修饰符可以修改,而重写方法的权限修饰符一定不能做更严格的限制。5.重载发生在一个类中,同名的方法的参数列表要不同;而重写发生在子类与父类之间,重写方法的参数列表要相同。
封装
Java三大特性之一
正确设计对象的属性和方法
原则:对象代表什么,就封装对应的数据,提供对应的方法
好处:面向对象思想
private关键字:可以修饰成员变量和成员方法,被修饰的成员只能在本类中才能访问
想要操作可以通过get/set方法
继承
Java三大特性之一,继承关键字:extends
java是单继承和多重继承,一个子类只能有一个父类,可以有多个祖先,每个类都直接或间接继承Object类
好处:将子类重复代码抽取到父类,提高代码复用性,减少代码冗余
继承后子类得到父类的属性和方法(可以得到成员变量和公有的方法,得不到构造方法和私有方法)
子类可以访问非私有成员,私有成员变量可继承但不能访问
static关键字
类修饰符,可修饰变量,方法,代码块。修饰后随类加载而执行
使用:类名.变量名,类名.方法名
静态代码块只会在类加载的时候执行一次。
final关键字
可修饰变量、方法、类
- 修饰变量:变为常量,不能被修改
- 修饰方法:不能被重写
- 修饰类:不能被继承
super,this关键字
this:哪个对象调用就是那个对象的类型,可以访问属性,方法,调用本类的构造方法时必须在第一行
super:代表父类对象,super只能在子类方法中,子类的构造方法默认调用父类的无参构造,调用父类构造方法时必须在第一行
Java注释
- 单行注释 //
- 多行注释/* */
- 文本注释/** */