作为非科班的学生,每天日常学习和事务也比较繁忙,而学习Java是课余的主要任务,遂开始写这么一个持续更新的系列。
目的有三:一是记录我在Java上每日学习到的部分知识做一个简单的输出,二是作为推动我持续学习的一个动力,目标三比较宏大,是希望能够写成帮助到没接触过Java的同学从零开始学习和作为已经学习过Java的同学的一个复习的知识库。
Day1:
- Java发展史
Java的创始人 詹姆斯.高斯林
Born in 1995年
- java的体系
- JavaEE:企业版
- JavaSE:基础版标准版
- JavaME:微型版
- dos命令
md:创建目录
rd删除目录
cd进入目录
cd..返回上一目录
exit退出dos窗口
cls 清屏
4.第一个程序:
- 严格区分大小写String System
- 每一行语句的结束;
- 写代码注意缩进
- 注意单词的拼写
- Public修饰的类名必须与源文件保持一致
- 一个Java文件可以存在n个类,只能有一个类被public修饰
5.标识符
标识符:Java中凡是自己定义名字的地方都是标识符。
规则:
- 字母 数字 下划线 美元符组成、
- 数字不能开头
- 严格区分大小写
- 不能是Java中的关键字和保留字
- 长度无限制
规范:
- 见名知意
- 驼峰命名
如userName
- 对类名进行命名时
每一个单词首字母都要大写
Java的数据类型
基本数据类型:
四类八种:
整型:byte 杯子
Short 水壶
Int 锅
long 缸
1.Long数值的末尾+l/L
2.整型默认数据类型是int
3.赋值大于byte或者short的范围则会将此值作为int类型处理
浮点型:float 4 double 8
- 默认数据类型是double
- 浮点类型不能精确表示一个小数 使用后面的内容Bigdecimal
字符型:char
- 只能表示单个字符
- 使用单引号表示
char c =’你’
char c1=97;
0:48 a:97 A:65
布尔型:Boolean
True or false
引用数据类型: 类,数组,接口
Day2:
进制:
10进制
8进制
16进制
2进制<------->10进制
类型转换:
自动类型提升:
小的数据类型可以自动转换成大的数据类型
Byte--->short--->int--->long--->float--->double
强制类型转换:
小的数据类型 标识符=(小的数据类型)大的数据类型的值;
Int a=(int)3.14;
大的数据类型——>小的数据类型
算术运算符
+
-
*
/:整数相除不保留小数部分
%:取余数
++
--
前++ 后++
a++先运算后加一
++a先加一再运算
例:
Int i =2;
I*=i++;
Print(i);
I=4
赋值运算符:
=
+=
-=
*=
/=
%=
使用赋值运算符是不会发生类型转换的
如:
byte b=10;
byte b1=20;
b+=b1;
b还是byte类型
但是如果是b=b+b1 b会变成int型
比较运算符:
>
<
>=&<=
!=
==:表示两值是否相等
注意:结果都为Boolean型
Day3
逻辑运算符:
&:两边都为true结果也为true
|:能true就true
!:取反
^:不同为true 相同为false
&&:当前面的表达式为false时,不再计算后面的表达式
||:当前面的表达式为true时 不在计算后面的表达式
Day4
While(){}
Do{}while();
For(){}
随机数公式
Int num=(int)(Math.random()*(n-m+1);
Int num1=(int)(Math.random()*(55-44+1)+44);
Break:结束循环
Continue:结束本次循环 继续下一循环
Return:结束方法
嵌套循环:把一个循环作为另一个循环的循环体:
外层控制行数
内层控制列数
外层循环执行一次,内层循环执行一遍
Day5
数组:存储相同类型数据的有序集合。
数组的初始化:
静态初始化:
数据类型[]数组名={数组元素1,数组元素2.........}
静态初始化方式二:
数据类型[]数组名=new 数据类型[]{数组元素1,数组元素2.......}
区别:
- 静态初始化方式一 声明和赋值必须放在一起
- 静态初始化方式二 声明和赋值可分开
Int [] arr;
arr =new int[]{};
动态初始化:
数据类型[]数组名=new 数组类型[数组的类型];
默认值问题:
Byte 0
Short 0
Int 0
Long 0
Float 0.0F
Double 0.0
Boolean false
String null
数组的注意
- 数组在使用时必须指明长度
- 数组有一个属性用来表示长度 length
- 数组通过下标访问[0,length-1]
- 数组必须存储相同类型的数据
数组的遍历
- 普通for循环
For(int i=0;i<arr.length;i++){}
- 增强for循环
For(数据类型 标识符:数组名){
标识符代表数组中每一个元素}
冒泡排序
1.当前一个数大于后一个数,两数交换位置
2.经过比较 数列会分为两部分 一部分是有序的,一部分是无序的,在进行比较时应专注于无序的部分
3.一个含有n个数的序列最多经过n-1次即可有序
Day6
二维数组
数组的元素是一维数组 则此数组是二维数组;
n维数组:数组元素是n-1维数组
二维数组的声明
数据类型[][]数组名;
//静态初始化方式一:
数据类型[][]数组名={{一维数组},{一维数组}}
静态初始化方式二:
数据类型[][]数组名=new 数据类型[][]{{},{}}
动态初始化方式一:
数据类型[][]数组名=new数据类型[][];
动态初始化方式二:
数据类型[][]数组名=new数据类型[4][];
例子:String[][]strArr=new String [5][];
strArr[0]=new String[]{“李白”};
strArr[1]={“李白”}//错误
遍历二维数组
普通for
Int[][]arr ={{10,20},{66,88}};
For(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]);
}
System.out.println();
}
加强for
For(数组元素类型 标识符:数组名){
System.out.print(标识符);
}
System.out.println();
For(int[] e:arr){
For(int ele:e){
System.out.print(ele);
}
System.out.println();
}
面向对象:
面向对象:先有对象 才有操作
面向过程:12345
类和对象:
类:图纸 模版
对一类事物共有特征的抽象概括
对象:真实存在的个体
创建类:
[权限修饰符]class 类名{}
class teacher{
String name;
char sex;
int age;
}
创建对象:
类名 标识符=new 类名();
Teacher teacher =new Teacher();
Java.until.Scanner in =new java.until.Scanner(System.in);
类中的成员:
属性(成员变量)
方法
构造器
内部类
代码块
内存图:!!!!
包:
1.不同的包下可以存在同名的类
2.包:对代码进行分类管理
3.包名:所有字母小写
Day7
一.成员变量
1.1非静态成员变量
1.2静态成员变量
相同点:位置在类中方法外
不同点:
1.有无static修饰
有:类变量,静态变量
无:实例变量
2.内存中的份数不同:*****
类变量:内存中只有一份
实例变量:每创建一份都会开辟一块独立的空间
3.调用方式不同
类变量:类名.属性名
实例变量:对象名.属性名
4.生命周期不同:
类变量:随着类的加载而加载 随着类的消亡而消亡
实例变量:随着对象的创建 对象消失(当对象没有引用指向时)被垃圾回收站回收
5.存储的位置不一样:
类变量:方法区
实例变量:堆中
代码块是一行行被执行的
- 方法
方法:方法是对功能的封装
方法种类:
- 有static 修饰的方法 非静态方法
[权限修饰符] static 返回值类型 方法名(形参列表){方法的范围}
- 没有static修饰的方法 非静态方法
[权限修饰符]返回值类型 方法名(形参列表){方法的范围}
返回值类型
Public static 返回值类型 方法名(形参列表){}
返回值类型:void 不需要返回值
返回值类型:
基本数据类型
引用数据类型
注意:当方法有返回值时,必须return一个类型范围内的数据。否则会报错
形参列表:
形参:形式参数
实参:实际参数
区别:
- 位置不同
形参:方法的声明处
实参:方法的调用处
- 作用不同:
形参:1.接收方法调用处传递的实际的值
2.规定方法调用处传递实参的数据类型
实参:给形参传递值
静态方法和非静态方法的区别:
1.静态方法 静态的方法只能调用静态的方法和静态的属性 不用【直接】引用非静态的资源(属性 方法)
2.非静态方法 不仅可以调用非静态的方法和属性 也可以调用静态的方法和属性
Why:因为我们静态修饰的资源随着类的加载而加载,非静态资源需要通过对象去调用,当静态资源准备完毕后,对象可能还没有产生。