JAVABASIC
day1-java
J2se(标准版/基础版):主要提供了小型应用程序以及桌面服务解决方案
J2ee(企业版/商业版):主要针对企业中模块化开发以及集中化开发提供了解决方案
J2me(小型版):主要针对于嵌入式开发以及终端开发提供了可能
jre=jvm+核心类库(提供了java程序启动时必须的信息)
jdk=jre+kit(开发工具包)
安装jdk会在jdk内部安装一个jre,根据提示安装会再安装一个外部jre
地址栏输入cmd可以直接打开所在文件夹的命令行
.java文件:源文件-->经过编译-->.class文件:字节码文件
1..class文件的名称和类名一致
2.如果是公共类,要求.java文件的名称和类名一致
3.有几个类就有几个.class文件,如果出现了大小写同类名的问题,第一个类名生效,最后一个类的内容生效
4.一个.java文件中至多只能出现一个公共类
一个电脑可以安装多个jdk,在eclipse中可以配置Installed JREs来选择使用哪个jre,Compiler为系统变编译使用的版本,如果和配置的jre不同,可能会在编译时报错。系统环境变量中的jdk为eclipse使用的jdk,不需更改,不安装无法打开eclipse
day2-type
java命令:
javac编译
java运行
javadoc生成文档
正码、反码、补码
java是一个强类型的语言,保证每个数据都有对应的类型表示
数据类型:
基本数据类型(四类八种)(占用字节)(一个字节占8个位):
整型:byte(字节1)/short(短整2)/int(整型4)(占32个位)(-2^31~2^31-1)/long(长整8)
浮点:float(单精度4)/double(双精度8)
布尔:boolen(布尔1)
字符:char(字符2)(0~65535)
编码:把文字转换为数字的过程
ASCII表(半个字节)--西欧码表(ISO8859-1个字节)--BIG5(繁体中文2个字节)--GB2312(简体中文2个字节)--国标码GBK(包含繁简体2个字节)--Unicode(编码体系)中包含UTF-8(3个字节)
所有的完整码表默认兼容西欧码表
引用数据类型(数组、类、接口):
day3-calculate
day4-switch&while
选择结构:ifelse/switch
循环结构:for/while/dowhile
day5-javamemory&array
输出数组得到:[I@4ec4d412
这个区域代表的是
对象[(代表的是对 @代表后面
象是数组) 是地址值
[ I @ 4ec4d412
这块区域代表的是 哈希码值的十六进
对象的元素类型--- 制表现形式
I(数组元素类型是int)
java内存五个分区:
栈stack:存储是变量(暂时),如果存储内容不再使用,立即清除不会对存储的内容进行赋值
堆heap:存储的是对象,如果存储的对象不再使用,会在某个时间被回收,会对存储的内容赋予系统默认初始值
方法区(面向对象)
本地方法栈
寄存器
new:在堆里开辟空间,所有在堆里开辟空间,系统都会赋予初始值
byte、short、int---0
char---'\u0000'
long---0L
float---0.0F
double---0.0
boolean---false
引用类型---null
=共享:两个引用指向同一块内存空间
foreach循环只能做遍历不能做其他操作,foreach循环相当于把数组里的内容复制出来一份进行操作,不会影响数值
day6-array2d&function
copyOf可以用来扩容和缩容
冒泡排序:
int[] arr = { 3, 1, 6, 8, 5, 2 };
for (int i = 1; i < arr.length; i++) {
for (int j = 1; j <= arr.length - i; j++) {
if (arr[j - 1] > arr[j]) {
// 用中间值交换数值
// int temp = arr[j - 1];
// arr[j - 1] = arr[j];
// arr[j] = temp;
// 用异或方式交换数值:^
arr[j - 1] = arr[j - 1] ^ arr[j];
arr[j] = arr[j - 1] ^ arr[j];
arr[j - 1] = arr[j - 1] ^ arr[j];
}}}
System.out.println(Arrays.toString(arr));
day7-class
类是对象的概括,对象是类的实现
局部变量:方法里或者代码块内
成员变量:方法外类内
内存方面:
局部变量:栈
成员变量:堆
生命周期:
局部变量:随着方法被调用或者执行代码块开始产生,方法调用结束或者代码块执行完毕而消除
成员变量:随着对象的创建而产生,随着对象的被回收而被销毁
day8-oop
day9-static&final&abstract
静态变量会随着类的加载而加载
静态变量不可以定义在构造方法中,静态变量与类同级,构造方法与对象同级
静态方法会随着类的加载而加载,不会对静态方法赋予系统默认的初始值,可以被类名调用也可以通过对象调用
静态方法中不可以定义静态变量,静态方法被调用的时候里面的内容才被加载执行
静态方法中不可以使用this,静态方法与类同级,this与对象同级
main方法可以直接使用或调用非静态变量或方法吗?不可以
静态修饰的内容只能直接调用静态信息,非静态的内容可以直接调用静态信息以及非静态信息
System.arraycopy()
Arrays.copyOf()
Arrays.toString()
Arrays.sort()
静态方法重载?可以
静态方法重写?不可以,静态方法与类同级,重写针对的是对象,所以没有重写。 在父子类中如果出现方法签名一致的方法,要么都是静态静态(但是不是重写),要么都是非静态方法就是重写
抽象类:一个方法要么有抽象abstract,要么有方法体{}
所有子类对父类的某个方法都进行了不同程度的重写,这个父类方法的方法体就没有意义,把方法体去掉用abstract修饰就变成了抽象方法,一个类中出现了抽象方法这个类就要变成抽象类
如果一个普通类继承抽象类需要重写所有的抽象方法,如果不想全部重写就变为抽象类
抽象类中可以没有抽象方法
抽象类可以创建对象?不可以 底层C语言可以根据构造方法创建出对象,但是这个对象拿不到
抽象方法可以被private/static/final?不可以,因为抽象方法必须重写
抽象类可以被final?不可以,因为抽象类需要可以被继承
day10-interface&package
接口不是类,但接口编译后也是.class文件
普通类实现了接口就要重写所有的抽象方法,如果不想重写就要把类变成抽象类
接口无法定义构造方法,所以接口不能创建对象
接口中都是抽象方法?不一定,jdk1.8以前是对的,从jdk1.8开始java支持接口中可以定义实体方法
jdk1.8在接口中的新特性:
1.接口中允许定义实体方法(static、default)
2.Lambda表达式---重写接口中的抽象方法(接口中只能有一个抽象方法---函数式接口)
四种内部类:方法内部类、成员内部类、静态内部类、匿名内部类
接口中定义内部类,以及内部接口(类里定义一个接口或者接口里定义一个接口)默认都是被static修饰
java包:
1.java原生包:
lang包:核心类库 在程序启动的时候会自动加载包
下的所有内容 使用的时候不用导包
util包:提高了大量的操作类与对象的工具类 工具包
applet、awt包:图形化界面
io:数据传输
math:提供了简单的数学运算
net:网络数据传输
nio:高并发
security:安全
sql:操作数据库
text:格式化 3.46
time:提供了时间和日期
2.javax扩展包
3.org第三方厂商包
day11-gc&object
通知系统进行垃圾回收:System.gc();
Object重要方法:
.clone()
.finalize()
.getClass()
.hashcode()
.toString()
.equals()
day12-string&char
java中为什么String中的S要大写?
原因:
java中的八种基本数据类型,分别是:
boolean,byte,short,int,long,char,float,double
它们还分别对应八种封装好的类:
Boolean,Byte,Short,Integer,Long,Character,Float,Double
而String也是java中封装好的一个类。不是基本数据类型。String类是常量(final)型的,也就是定义的数据不可修改
总结解释如下:
①String 不属于Java语法的一部分,而是基于Java语法封装的一个类(Java的类风格是首字母大写)
②基本数据类型int,final,double等是基本语法组成的一个部分
日常写代码的时候应注意:java规范中要求常量名必须大写
day13-string&pattern
day14-math&date&exception
day15-collection&list&set