Java总结
Java基础
- JVM :java虚拟机
- JDK :java开发工具包,包含JRE
- JRE :java运行环境
java的体系结构
JavaSE :标准版
定义了Java的基本语法JavaME :移动版
以前诺基亚用
现在GPS和机顶盒用这个- JavaEE : 企业版
可以分为:
- B/S :基于浏览器和服务器的架构模式
- C/S : 基于客户和服务器的架构模式
javaEE还可以用于JavaWeb开发——>全栈工程师
每一次修改代码,都必须重新编译。
Java代码规范
- 文件名与类名必须一致;
- 类名的首字母大写;
- main函数是程序入口,四个元素必不可少:
public、static 、void 、 String [] args; - 一行只写一条语句;
- 代码缩进;
- 常量的变量名全部大写
- 内存地址是16进制数据;
变量名一定要符合规则:
驼峰式命名法:第一个单词全部小写,其他单词的首字母大写- java的八种基本数据类型:
- byte : 1个字节,8位;
- short : 2个字节, 16位;
- int : 4个字节,32位;
- long : 8个字节,64位;
- float : 4个字节,32位;
- double : 8个字节,64位;
- char : 2个字节,16位;
- boolean :1/8个字节,1位。
int可以赋值给float,反之不亦然;
强制类型转换会砍值;
Scanner
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
scanner.nextInt();
- 只有== 和!= 可以施法于任何数据类型,其他关系运算符只能用于数值类型;
- 短路与和短路或比单纯的与和或效率更高;
- String类型的值判断是否相等不能用==,要用equals方法进行判断;
- switch支持的数据类型:int、short、byte、char、枚举类型、String类型;
数组
- 数组长度一旦确定,就不能修改;
- null只能赋给引用类型;
数组工具类
java.util.Arrays
提供了操作数组的方法,例如排序,查询等。
boolean Arrays.equals(array1, array2);
比较两个数组是否相等
Arrays.sort(array);
变成升序排序。没有返回值。
String str = Arrays.toString(array);
Arrays.fill(array, val);
将数组里面的值全部变成val。
Arrays.copyOf(array, length);
扩展伸缩数组,返回一个新的数组。
int Arrays.binarySearch(array, val);
返回查询值在数组里面的最后一个匹配值的下标。
返回负数就证明找不到。
Java高级
程序在运行期:
- 将编写好的类加载到JVM中,有了模板;
- 根据需求,通过模板(类)来创建对应的对象,完成业务需求。
类与对象的区别:
- 类是静态的,写完之后就存在于硬盘中。
- 对象是动态的,随着程序的运行而创建,同时随着程序的关闭而销毁。
- JVM中类只有一份,对象可以无数份也可以没有。
垃圾回收机制GC:
是一个独立的巡查线程,GC是一个定时任务,隔一段时间执行一次。
为什么null不能赋值给基本数据类型?
因为null是地址,而基本数据类型在栈中只能存数值不能存地址。
每个类默认有无参构造函数,当你自己定义一个有参构造函数后,无参构造函数就消失了!
eclipse可以自动生成toString()啊,构造函数什么的,在source选项里面!
传参
- 基本数据类型传递的是变量的值;
- 引用类型传地址;
this
只能写方法体里面。
通常情况下,在类的方法中的具体代码,this可加可不加。
当方法中的参数和属性名一致时,通过参数名无法区分参数和属性时,需要通过this来修饰属性。
this(参数) 调用有参构造;
this() 调用无参构造;
它们只能在构造函数内调用。
并且this()必须写在方法体内第一行!
方法重载
- 必须在同一个类中;
- 方法名相同;
- 参数列表不同;
- 与返回值无关;
- 与访问权限修饰符无关。
动态参数
如何让参数个数不固定?
在参数列表中数据类型后面加上三个点。
动态参数实质上是一个数组,根据外部传入的参数个数来动态生成一个数组,记录所有的参数。
成员变量和局部变量
成员变量:定义在类中,方法体外的变量,属性
局部变量:定义在类中同时也存在于方法体中的变量
面向对象的四大特征
封装、继承、多态、抽象
封装
定义
将类的某些信息隐藏在类的内部,不允许外部程序直接访问这些信息,外部只能通过该类提供的特定方法来实现对隐藏信息的操作和访问。
如何实现
- private
- setter和getter
- setter里面放一点控制语句
有工具可以自动生成setter和getter
static静态修饰符
可以修饰:
- 成员变量:将之变成静态变量,使之可以通过类来访问;
- 成员方法:同上;
- 代码块:写在类中,方法之外,并且用花括号包裹起来的一段代码就叫做代码块。当程序访问该类时,自动执行代码块中的语句。
静态代码块:当Java虚拟机(JVM)加载该类时,执行该代码,并且只执行一次。如果有多个静态代码块,那么按顺序执行。
在静态方法中比如main,不能访问该类的非静态属性,可以访问该类的实例化对象的非静态属性。
main中不能访问该类的非静态方法,可以访问对象的非静态方法。
静态方法如main里面不能用this!
类的构造方法用于创建类的实例对象,类的静态代码块用于初始化类,给类的静态变量赋值