一、标识符
概念:JAVA里面我们可以给他取名字的(变量、类、方法等等)就是标识符:
注意:1、标识符只能包含字母、数字、下划线还有美元符号$
2、只能以字母、下划线和美元符号开头
二、变量
概念:JAVA中储存数据的最小单元
扩展:计算机中保存数据的最小单元是位(一个0或是一个1就是一位)
8bite = 1byte(字节) 1024byte = 1KB 1024kb = 1MB
一个英文字符占1个字节;一个中文字符占2个字节
作用:使用变量名来代替了计算机内存中的地址
分类:
按照位置上来分:
1、成员变量:定义在类的里面,方法的外面
2、局部变量:定义在方法里面的
按照数据类型来分
1、基本数据类型:4类8种
2、应用数据类型:除了基本数据类型之外的都是基本数据类型
作用域:变量的适使用范围
一般情况下变量在哪对大括号中定义就只能在哪对大括号中使用
三、数据类型
概念:对变量名定义一个存放数据的类型,然后对变量进行赋值
4类8种数据类型:
4类:
1、布尔类型(boolean)
一般用来表示逻辑运算只有true和false两个值
2、字符类型(char)
字符串的常量要使用双引号“ ” 如果是字符的常量要使用单引号‘ ’
注意:JAVA的字符类型是2个字节 C语言是1个字节的
JAVA使用的是unicode编码(思考:理解一下字符编码的概念及作用)
3、整数类型
byte(1) short(2) int(4) long(8)正确使用可以节省内存的占用率
long型变量后面要加上L
4、浮点类型
float double
数据类型之间的转换规则:
1、小的自动转换成大的
(从低到高数据类型顺序)byte short char int long float double
2、boolean和其他数据类型之间不允许进行转换
3、大的转换成小的数据类型要加强制类型转换,务必要注意溢出的问题
4、byte、short、char之间不能进行转换,如果参与了运算会先把自己转换成int类型
再 参加运算
注:当有多种数据类型混合运算的时候先把数据类型转换成参加运算的数据类型最高的那一个再参与运算
运算符中&&比逻辑与运算效率更高,因为当前面的计算结果出来之后为false的话就不需要再计算后面的而是直接给出结果
四、参数
实际参数:方法调用的时候传入的参数既称为实际参数
形式参数:就是用来接受实际参数的,一般放在被调用的函数体里面的
注意:形式参数和实际参数的数据类型要一样,个数要匹配
五、面向对象和面向过程的区别
面向过程:它所考虑的是过程和步骤,比如说开车去深圳我们要考虑的是怎么去也就是说:what to do
面向对象:它所考虑的是有几个对象,比如开车去深圳我们要考虑的就是有几个对象,也就是说:how to do
六、类
概念:是对象的模板,它是具有相同属性和行为(方法)的一组对象的集合
对象和类的区别:类是抽象的,而对象是具体存在的
知识扩充:同一个文件夹中只能有一个类是public的,而且main()方法绝对是包含在public类当中
七、构造方法(构造器、构造函数)
作用:1、主要是用来创建对象 2、初始化成员变量
特点:1、必须与类名相同 2、没有返回值类型,void也没有 3、每一个类都会有一个隐式的构造方法,没有参数和方法体 4、手动添加显式的构造方法那么隐式的构造方法自动消失
知识扩充:面向对象编程思维步骤:1、考虑有几个对象 2、通过对象确定有几个类 3、找出每一个类中存在的方法 4、调用相应的方法实现功能
例如这个简单的例子:
public class test{ public static void main(String[] args){ Mouse mouse = new Mouse(); mouse.name = "mick"; Cat cat = new Cat(); cat.name = "Tom"; cat.Catch(mouse); } } class Cat{ String name; public void Catch(Mouse mouse){ mouse.cry(); } } class Mouse{ String name; public void cry(){ System.out.println(name + " is crying"); } }
思维方式:找出有两个对象tom猫和mick老鼠。进而找出有两个类一个是猫类一个是老鼠类,然后确定两个对象内部分别包含两个方法一个是属于tom对象的catch()方法一个是属于mick 对象的cry()方法
专家模式:一个方法改变的是那个对象的状态(属性),那么该方法就属于谁
八、JVM(JAVA虚拟机)的四个区域
1、代码区(code segment):存放的是字节码
2、堆区(heap segment):存放的是对象
3、栈区(Stack segment):存放的是局部变量
4、栈区的一块特殊区域(static segment):存放字符串常量和静态变量
堆和栈的区别:堆可以保存大的数据类型运行速度慢;栈只可以保存小的数据内容但是运行速度快
局部变量和成员变量重名的问题解决办法
办法:该情况下使用this指针,因为每一个对象都有一个this指针,相当于当前对象的引用。原理如下图所示:
图 1
九、成员变量初始化
1、JAVA当中,成员变量会默认初始化
数值类型:默认为0 布尔类型(boolean):默认为false 字符类型(char):默认是空 引用数据类型:默认是NULL
null值的含义:表示一个引用没有指向任何一个对象,也就是谁栈中的一个引用没有指向任何一个栈中的内存地址,如上图所示形象来说就是“引用”的那个箭头没有
2、JAVA中的垃圾回收机制(GC)
如果一个对象没有指向任何一个引用,那么这个对象就是JAVA中的垃圾,JAVA会自动调用GC自动收回
知识延伸:如果说在JAVA中需要一个对象使用完后就被GC收回,最好的变法就是把指向这个对象的引用设置为NULL
十、Static关键字
1、加上static的成员变量称之为静态变量(类变量)
static segment中的数据不能重复,所有对象共享其数据,其中一个对象对其进行修改之后那么其他的对象的值也随之改变
因为所有对象共享它,跟对象没有任何关系,所以也就称之为类变量;可以使用 类名.变量名 来调用
如下图所示逻辑:
图 2
堆里面的两个对象共享 Static segment里面的静态变量Corcol;如果要改变其值只需使用 Person.Corcol 即可改变其值
2、加上static的方法称之为静态方法(类方法)
类方法不需要创建对象来调用,可以直接是用 类名.方法名 调用
注意:(1)、静态的方法只能访问静态的成员变量
(2)、非静态的方法既可以访问静态的成员变量也可以访问非静态的成员变量
知识延伸:为什么main()方法是static的?
因为main()方法是程序的入口,在使用main()方法之前不允许有任何的对象被调用,所以说main()方法务必是static的