**学习JAVA ,Day01**
1.corejava(核心JAVA)
语言=os+数据结构+算法+思想
1.os:操作系统
2.数据结构:保存数据
队,栈,树,链表...
3.算法:做游戏常用
举个面试题的例子:
int a>0,b>0,用一句输出最大值
解法:(|a+b|+|a-b|)/2
思想:语言的灵魂
java:面向对象的编程语言
c:面向过程的编程语言
c++:半面向对象,半面向过程的编程语言
面向过程:比如西红柿炒鸡蛋
步骤:
1.买西红柿
2.买鸡蛋
3.洗西红柿
4.炒鸡蛋
5.炒西红柿
6.装盘
面向对象
1.有西红柿和鸡蛋
2.炒(西红柿,鸡蛋){
炒
}
3.装盘
class 西红柿{
}
-
jdk包含哪些内容
1.JVM虚拟机:解释执行java程序
2.java的类库java.lang* java.io* java.net
3.java的可执行工具
javac:将java源文件编译成class字节码文件
java:运行class字节码文件
4.java语言分为三类
①JavaSE 做桌面程序
②javaME做移动应用,android,ios,前端
③javaEE 做企业级应用,例如淘宝
5.Java的特点
1.提供一个解释性环境
1.加快开发
2.一次编译,到处运行
java→编译,class→运行class
3.支持多线程,语言层面的多线程
4.支持动态更新
2.提供了一种比较简单的语言
1.健壮性,更完善
2.取消了指针,取消程序级别的指针;底层依然存在指针,但程序员不用关心
3.没有内存管理
程序员需要手动new创建对象,占用内存
不需要关心内存的释放
4.java:GC垃圾回收器
c:malloc() 开辟空间,free()函数来释放空间
c++:new开辟空间,delete释放空间
5.纯面向对象编程语言(夸张了,其实并不是完全的面向对象)
保留了基本数据类型
3.JVM
解释执行实现跨平台的特性,不同系统都有对应的JDK
bytecode:字节码文件,.class文件,与机器无关
4.GC:垃圾回收器
垃圾:无用的对象内存,没有任何指向的内存
级别非常低的系统级别的线程实现垃圾回收
所以程序员无法控制GC什么时候回收垃圾
当优先级高的线程让出CPU,低线程才会执行,一般情况下都是低线程让出CPU让高线程执行
GC什么时候执行
1.内存不够用
2.系统闲置的时候
java.lang.System.gc()/java.lang.Runtime.gc()
通知垃圾回收器回收垃圾,但不一定执行
gc:回收垃圾算法
1.标记清扫法(效率高)
不会整理内存,会产生碎片
2.内存搬移法from---to(效率低)
可以整理内存,不会产生碎片
效率低,数据搬移太耗费时间
二者结合使用,通过判断进行选择
5.java平台代码安全策略
1.Class loader
加载:查找和加载类的二进制文件(class文件),将其置于内存中
2.Byte code verifier
字节码验证者
1.验证:确保类加载的正确性(有正确的内部结构,并且与其他类是否协调一致)
why? java虚拟机不知道某个特定的.class文件,到底是由正常的java编译器编译成的还是黑客特制的
类的验证可以提高程序的健壮性,确保程序安全执行
2.准备:为类的静态变量分配内存,并将其初始化默认值
3.解析:把类中的引用符号转化为直接引用
3.JIT Code generator
即时编译器,是把一个java字节码文件转换成可以直接发送给处理器的指令程序
4.Interpreter
解释器,当程序验证有问题时,就会将有问题的代码重新解释运行。
验证规范内容:
1.代码要和JVM规范一致,语法和版本是否兼容
2.代码不能破坏系统完整性
3.没有堆栈的上溢和下溢
4.判断参数类型是否正确
5.类型转换是否正确
6.第一个java代码
1.package定义包名
1.使用层级样式管理类,最终生成目录
2.避免命名冲突,同一个包下不能出现相同的文件,不同包可以
3.改变类的名字
Student.java
包名+类名--权限类名
4.包的命名规则
公司的域名的倒写.组.功能
公司的域名的倒写.功能
2.import需要用到其他包的内容
其他包:
1:jdk提供的类库所对应的包内容
2.自定义的包的内容
除了lang包
3.public class 公有类,类名要和文件名保持一致
class定义类
public修饰符,公共的,共有的
一个java文件中可以有多个类,但只有一个公共类
4.public static void main(String[] args){}
main方法是程序的主入口,必须满足这个格式
System.out.println()
方法定义格式
修饰符 返回值类型,方法的名字(参数列表){
//方法体
}
修饰符public static
public 所有人都能调用的方法,公共方法
static 修饰的方法为静态方法
不用static修饰的就是非静态方法
多个修饰符之间可以互换顺序,但是整体方法结构不能发生改变。
返回值类型:方法调用完之后返回的数据的类型
void代表没有返回值
有返回值用return返回数据
方法名 main add delete
参数列表:接收用户输入的信息。可有可无
方法体一定是放在{}里面
静态方法不能直接调用非静态方法
可以通过创建类对象调用普通方法
所有方法一定是类或类对象调用
静态方法可以直接调用静态方法
7.编译
java -d.类名.java
-d指定生成的class文件的存放路径,指定存放类文件的位置
连同包一起编译
. (符号点) 代表存放在哪个目录下,代表当前目录
javac -d bin 类名.java
将连同包一起编译的类文件放在bin目录下
运行
java 权限类名
将class文件加载到内存中,然后为各类数据生成对应内存和地址