Java是美国sun公司,在1995年推出的高级编程语言。所谓的编程语言,是计算机语言,使用编程语言对计算机下达命令,完成人们所需要的功能。
字节:是计算机中最小的存储单位。
1byte = 8 bit (1字节 = 8 位)
JVM(java Vritual Machine):java虚拟机。
是虚拟的用于执行bytecode字节码的,虚拟计算机。
JRE(java Runtime Environment):java程序运行环境。
包含 JVM、运行程序必要的文件。
JDK(java Development Kit): 程序开发工具包。
包含JRE、编译器、调试器等开发的工具。
运行程序,只需要安装JRE就可以。
开发程序,一定要安装JDK.
指程序中我们自己定义的内容。如:类名,变量名等。
命名规则:
可以包含a-z(大小写)、0-9、$、_(下划线)
不能使用数字开头
不能使用关键字。
有大驼峰式 (ByuhGin)和小驼峰式(byuhGin)
就是在程序运行的过程中,不会改变的量。
基本数据类型: (由小到大)
整形数据 byte、short、int、long
浮点型 float、double
字符型 char
布尔型 Boolean
引用数据类型:
字符串、数组、类、接口、Lambda
自动转换: 由小赋值给大的
强制转换: int sum = (int) 100L
byte、short、char可以进行数学运算,都会先提升为int类型,再运算。
Boolean类型不能进行数据类型的转换。
0 -----》 48, A ------》 65, a------》97
简单运算符: 、-、*、 /、 %、
赋值运算符: =、-=、*=、/=、%=
比较运算符:> 、<、 >=、 <=、 ==、 !=
逻辑运算符:&&、||、 !
三元运算符:
数据类型 名称 = 判断条件 ? 表达式A : 表达式 B;
(保证:
1、 表达式A、B都需要满足前面的数据类型。
2、 三元运算符的结果必须被使用。)
注意的是,break和continue。
break是跳出当前内容。
continue是跳出当前条。继续执行。
方法是不能嵌套使用的。
重载(ovreload):就是多个方法的名称一样,但是参数列表不一样。
(参数个数、参数类型、参数类型的顺序)不一样。
动态初始化数组:
数据类型[ ] 数组名称 = new 数据类型[ 数组长度 ] ;
静态初始化数组:
数据类型[ ] 数组名称 = new 数据类型[ ] { 元素1,元素2 } ;
省略式:
数据类型[ ] 数组名称 = { 元素1,元素2 };
索引值从0开始,到 数组长度-1 为止。
ArrayList<E> 名称 = new ArrayList<E>();
注意:ArrayLiist的长度是可以随意变化的,
泛型E,需要装的是全部统一的泛型类型。
泛型只能是引用类型,不能是基本类型。
1、栈(Stack):存放的都是方法的局部变量。方法的运行一定在栈中运行。
局部变量:方法的参数,是方法{ } 中的局部变量
作用域:一旦超出作用域,立刻从栈内存中消失。
2、堆(Heap):new出来的东西,都在堆里面。(.class相关的信息)
堆里面的东西都有一个地址值:16进制
3、方法区(Method Area):存储.class的相关信息,包含方法的信息。
4、本地方法栈(Native Method Stack) 与操作系统相关
5、寄存器(pc Register) 与cpu相关
所有的引用类型都可以赋值一个null值,
数组必须要new初始化才能使用其中的元素。
如果在没有new的情况下,给数组赋值了一个null。那么就会出现空指针异常。
空指针异常:NullPointerException
如果在访问数组的时候,访问的索引已经超出了数组的索引值,
就会出现数组索引越界异常:ArrayListIndexOutOfBoundsException
在方法的内部;
只有方法可以使用,外面不能使用
没有默认值,如果要使用,侧需要手动赋值。
位于栈内存中。
随着进栈产生,出栈消失。
在方法的外面
整个类都可以使用
如果没有赋值,会有默认值
位于堆内存中
随着创建对象产生,对象被垃圾回收而消失。
使用static修饰成员方法,就成为了静态方法。静态方法不属于对象。而是属于类。
无论是成员变量、还是成员方法,使用了static修饰,都建议使用 类名称点进行调用。
注意: 静态不能直接访问非静态
静态方法中,不能使用this。
Static{ 静态内容 }
静态代码块,执行唯一的一次。
静态内容总优先于非静态内容。所以,静态代码块比构造方法先执行。
就是将一些细节信息隐藏起来,不对外界开放。
方法就是一种封装。
关键字Private 也是一种封装
使用extends 、implements 对父类进行继承。
父类 (基类)、子类 (派生类)
就是和父类的方法名一样,参数列表也是一样。
@Override 验证是不是有效的正确覆盖重写。
就算不写,只要满足要求,也是正确的方法覆盖重写了。
子类必须调用父类构造方法,不写侧赠送一个super();
写了则用写的指定的super调用,super只能有一个,还必须是第一个
在子类的成员方法中,访问父类的成员变量。
在子类的成员方法中,访问父类的成员方法。
在子类的构造方法中,访问父类的构造方法。
Super和this两种构造调用,不能同时使用。
就是父类引用指向子类对象。
格式:父类名称 对象名 = new 子类名称(); 或者
接口类名称 对象名 = new 实现类名称();
多态中的方法的访问,看new的是谁。就优先用谁,没有就向上找。
访问:
成员变量:编译看左,运行还是看左。
成员方法:编译看左,运行看右。
向上转型:一定安全的,从小范围转向大范围。
向下转型: 范围小的转型范围大的。注意:在转型的时候,必须要规定,
小范围的对象本来就是属于大范围的对象才行。
还不能确定具体是做什么的方法。
规则:使用abstract关键字,不需要方法体。
如: public abstract void eat(); 这就是一个抽象的方法。
注意:抽象方法所在的类,一定需要是抽象类才行。
调用抽象类,不能直接调用。
需要创建实现类,重写抽象类里面的所有的抽象方法,并且需要打开方法体{ } 进行方法的设置。
除非子类也是抽象类,就不用所有的抽象方法都重写。
当局部变量和成员变量同名的时候,使用“就进原则”。
先使用的是局部变量。访问成员变量就使用this.成员变量。
专门是用来创建对象用的。当我们new创建对象的时候,其实是在调用构造方法。
注意:
1、如果,没有编写构造函数,编译器会自动赠送一个构造方法
2、不能返回一个具体的值。
3、构造方法也是可以重载的。
代表最终、不可改变(内容还是可以变的)
对于类和方法来说,abstract和final不能同时使用,
1、 修饰类
规定:当前类不能有任何的子类。(太监类)
类中的所有成员方法不能进行覆盖重写。
2、 修饰方法
规定:这个方法是最终的方法。也是不能被覆盖重写。
3、修饰局部变量
规定: 一次赋值,终生不变。
对于基本类型,不变的是数据不变
对于引用类型,不变的是地址值不变。
4、修饰成员变量
因为成员变量有默认值,所以,final之后必须手动赋值,
要么,直接赋值,要么通过构造方法赋值。
必须保证类中所有的重载的构造方法,都最终会对final的成员变量进行赋值
就是事物的内部包含另外一种事物。
成员内部类、局部内部类(包含匿名内部类)
就是在类中嵌套一个类
注意:内用外,随意访问,外用内,需要创建内部对象,
调用格式:
外部类.内部类 对象名 = new 外部类().内部类();
联系客服