Java
语言=os+数据结构+算法+思想
os操作系统
数据结构:保存数据
队 栈 树 链表…
算法:游戏常用
int a>0,b>0 用一句话输出最大值(|a+b|+|a-b|)/2
思想 语言的灵魂
java 面向对象的编程语言
c面向过程的语言
C++半面向对象的语言 半面向过程的编程语言
面向过程
西红柿炒鸡蛋
1.买西红柿
2.买鸡蛋
3.洗西红柿
4.炒鸡蛋
5.炒西红柿
6.装盘
面向对象
1.有西红柿和鸡蛋
2.炒(西红柿,鸡蛋){
炒
}
3.装盘
class 西红柿{
}
jdK包含的内容
①JVM虚拟机:解释执行java程序
②包含java的类库java.lang* java.io* java.net*
③java的可执行工具 javac java
java分为三种类型 java se 做桌面程序 javame 做移动应用 Android iOS 前端
javaee 做企业级应用 例如淘宝
提供解释环境
①加快开发
②一次编译,到处运行 java-->编译 class-->运行 class
③多线程,语言层面的多线程斯
④支持动态更新
提供了一种比较简单的语言
①健壮性 更完善②取消了指针:取消了程序级别的指针 底层依然存在指针,
程序员不需要关心
③没有内存管理 程序员需要手动new创建对象,占用内存 不需要关心内存的释放
④GC:垃圾回收器 c: malloc()开辟空间,free()释放空间
c++:new开辟空间,delete()释放空
⑤纯面向对象编程语言(夸张)保留了基本数据类型
jvm
解释执行实现跨平台的特性,不同系统都有对应的jdk
bytecode 字节码文件,class文件,与机器无关
gc:垃圾回收器
垃圾:无用的对象内存,没有任何指向的内存,级别非常低的系统级别的线程,
实现垃圾回收,所以程序员无法克制什么时候回收垃圾,当优先级高的线程让出CPU,低线程才会执行,一般情况是低线程让出CPU,让高线程执行
gc什么时候执行:①内存不够②系统闲置的时java.lang.System.gc()/java.lang.
Runtime.gc()通知垃圾回收器回收垃圾但不一定真正执行
gc回收垃圾算法
①标记清扫法 不会整理内存,会产生碎片,效率高
②内存搬移法from--to可以整理内存不会产生碎片,效率低,数据搬移太耗费时间
二者结合使用,通过判断对进行选择
java平台代码的安全策略
1class loader
加载:查找和加载类的二进制文件(class文件);将其置于内存中
2 byte code venifier
字节码验证者 1验证:确保类加载的正确性(有正确的内部结构,并且与其他类是否协调一致)
why?java虚拟机不知道某个特定的.class文件,到底是由正常的java编译器编译成的,还是黑客特制的
类的验证可以是提高程序的健壮性,确保程序安全执行
②准备:为类的静态变量分配内存,并将其初始化默认值
③解析:把类中的引用符号转化为直接引用
3 jit code generator
即时编译器,把一个java字节码文件转换成直接发送给处理器的指令程序
4interpreter
解释器:当程序验证有问题,就会将有问题的代码重新解释运行
验证规范内容
①代码要和JVM规范一致,语法和版本是否兼容②代码不能破坏系统的完整性③没有堆栈的上溢和下溢④判断参数类型是否正确⑤类型转换是否正确
第一个java代码
**1 package 定义包名,,不定义也可以,**
①使用层级样式管理类,最终生成目录
②避免命名冲突,同一个包不能出现相同的文件,不同包可以
③改变类的名字student.java包名+类名-权限类名
④包的命名规范 公司的域名的倒写,组,功能 公司的域名的倒写,功能
**2 import 需要用到其他包的内容,就是权限类名 其他包**
①jdk提供的类所对应的包的内容
②自定义的包的内容,除了lang包
③ public class 公有类,类名要和文件名保持一致 class定义类 public 修饰类 公共的公有的 一个java文件中能有多个类,但是只有一个公共类
④public static void main [String] args
main 方法是程序的主入口,必须满足这个格式
system.out.println("");方法的定义格式 修饰符 返回值类型 方法的名字(参数列表){}
//方法体
修饰符public static public 所有人能够调用的方法,公共方法
static修饰的方法为静态方法 不用static修饰的就是非静态方法 返回值类型:方法调用完之后返回的类型的数据的类型 void 代表没有返回值
方法名 main add delete
参数列表,主要接收用户输入的信息,可有可无
方法体 一定是放在{}内
静态方法不能直接调用非静态方法 可以通过创建类对象调用普通方法、
静态方法可以直接调用静态方法
多个修饰符之间可以改变顺序,但是不能改变整个结构
所有方法一定是类或者对象调用
编译
javac -d 类名.java
-d指定生成的class文件的存放路径,指定存放类文件的位置 连同包一起编译
.代表存放在那个目录下,代表当前目录
javac -d bin 类名.java
j将连同包一起编译的类文件放在bin目录下运行
java 权限类名
将class文件加载到内容中 然后为各类数据生成对应内存和地址
why?
注释 增加代码
1当行注释
//注释内容
变量
2多行注释
/*
*/
类方法算法
3文档注释
/**
*/
类,方法 算法
生成帮助文档javadoc -author -version -d doc*.java
标识符
类 方法 变量
命名规则 判断是否合法
1以字母- $ 开头,不能以数字开头
2区分大小写
3没有长度限制
4不能使用关键字
基本数据类型
java数据类型分为两类
基本数据类型:布尔类型:boolean 字符类型char 整数类型byte short int long
浮点类型 float double
引用数据类型:类类型:class String 自定义的类 接口类型interface
数组类型[]
why?数据类型
程序的实质 处理数据 处理变量
声明变量:数据类型 变量名
例如int a
变量赋值:变量名=值
声明时赋值 int a=10;
a=25;=赋值,将右边的值赋予给左边的变量 int a=10 long a=10
1满足语法规则
2决定保存该数据开最大的内存空间
数值默认是int类型 类名首字母大写,变量首字母小写
int i1=200;
数值类型转换
1强制数据类型转换。精度高的转换为精度低
byte a=(byte)200;
注意,对于基本数据类型不建议转换
1隐士类型转换。精度低的转为精度高的
long a=200; byte<shor<float<doube
浮点类型默认是double类型
double a=2; double b=1.1
BigDecimal b1 =new BigDecimal("2");
BigDecimal b2 =new BigDecimal("1.1")
b1 .subtract(b2);//相减
推荐类名规则
1类名以首字母大写开头
2接口名以首字母大写开头
3方法名以首字母小写开头byGetName
4变量以首字母小写开头 userName
5常量名全部大写,多个单词并以-连接USER-NAME
总体规则遵循驼峰·命名法
a=20;
int a;
变量设置
先声明后初始化
声明的同时初始化 int b=20; int a=b;
面向对象