************************************************2016-08-15**********************************************
1、Java简述
2、JDK JRE JVM
JVM(java virtual machine)java虚拟机:他保障了java的一次编程,到处运行的效果,这是因为java程序不是在操作系统上运行的,而是在java虚拟机
上运行的,而java虚拟机又是在操作系统上运行,所以只要某个系统安装了java虚拟机就可以运行java的所有程序,而无需改变java代码。
3、java的数据类型
3.1基本数据类型 值类型 byte short char int long float double boolean
byte:用8个二进制数来存储一个整数
011001011
一个二进制数叫比特位(bit)
8bit=1Byte(字节)
1024Byte=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB
数值在计算机内部是用补码的形式存储的:
补码:正数的补码就是源码 10:00001010
负数的补码是绝对值的源码按位取反再末位加1
-10:00001010->11110101+1->11110110\
byte的最大值:0111 1111 +127 2^7-1
最小值:1000 0000 -128 -2^7
short:用16个二进制数来存储一个整数
最大值:2^15-1
最小值:-2^15
int:用32个二进制数来存储一个整数
最大值:2^31-1
最小值:-2^31
long:用64个二进制数来存储一个整数
最大值:2^63-1
最小值:-2^63
long型变量在赋值的时候,如果数值超出int范围需要在后面加L
float:单精度浮点类型,在赋值时后面要加F
这是因为如果后面不加任何东西,系统默认数值为int
double:双精度浮点类型,所有的小数值默认是double类型
boolean:只有两个值,true和false
char:用16个bit存放单个字符'a',或者用unicode表示'\u0061'
转义字符:\t \r \\
3.2引用类型(new 出来的)
3.3常量:运行的时候值不能变
字面值常量:
a、字符串常量"abc"
b、整数值常量:默认的都是int类型,在给变量赋值的时候会自动转换
如果在变量的范围内,会自动赋值;如果不在,会报错:可能损失精度
有四种表现形式:
二进制:0-1
八进制:0-7
十进制:0-9
十六进制:0-f
c、浮点数常量:默认的都是double,如果用存成float,后面加f/F
d、字符常量:'a' '\u0061' 0000 0000 0110 0001
e、布尔常量:true、false
f、空常量:null
3.4数据类型转换问题:
a、自动类型转换
char->int
byte-> short ->int ->long-> float-> double
两个不同类型的数值进行数学运算的时候,会自动向多的类型拓展
byte short char类型的变量,在进行数学运算的时候,会自动变成int再计算
b、强制类型转换
多的类型向少的类型转换,需要强制类型转换,有可能会损失精度。
3.5变量
a、声明:数据类型 变量名=值;
b、命名规则:1、必须要遵守的:
a、只能包含字母、数字、_、$
b、数字不能放在第一个
c、不能用系统的关键字、保留字
2、要求遵守:
a、首字母小写
b、尽量取有意义的单词
c、采用驼峰命名法(后面的每个词的首字母大写)
c、变量的取值范围:离它最近的{}
在相同的作用域中不可以有同名的
不同进制的转换:
十进制负数转换为内存中的二进制存储方式:
先将绝对值转换为二进制,在转换为补码
************************************************2016-08-16**********************************************
将一个String变为int/lont/short...
int/long/short = Integer.parseInt/Long.parseLong/Short.parseShort...(str);
1、运算符
1.1 算术运算符 + - * / % ++ --
加法(+):数学运算和字符串连接
除法(/):运算时类型不同,自动向大数变换,运算从左到右
c++ ,先将值赋给别人,再自增
++c , 先自增,在赋给别人
x = 5;int p = x++ + ++x + x++; p = 5 + 7 + 7 = 19;
1.2 位运算法 & | ~ ^ >> << >>>
&:同为1 则为1
^:相同为0 相异为1
<<:向左移动,低位补0,在有效范围内,快速的*2的幂
>>:向右移动,高位补符号位,在有效范围内,快速的/2的幂
>>>:无符号右移,最高位补0
byte在运算时自动转换为int
1.3 关系运算符 > < == != <= >= 运算结果是boolean
1.4 逻辑运算符 && || ! 操作数也是boolean 运算结果是boolean
运算符的优先级 ! > && > ||
1.5 条件运算符
三目运算符: 判断条件(boolean值) ? 结果1(true): 结果2(false)
2、条件控制语句
2.1、if else
5.2、switch(只能是整数,枚举) case
3、循环控制语句
3.1 do while 循环
3.2 while 循环
3.3 for 循环
4、利用Scanner从屏幕输入
首先导入Scanner所在的包:import java.util.*;
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
5、获取本机的月份值:日期(DATE)
首先导入包:import java.util.*;
Calendar c = Calendar.getInstance(); //获取日历对象
int month = c.get(Calendar.MONTH)+1; //获取当前月份
*************************************************2016-08-17*********************************************
1、保留两位小数:
System.out.printf ("结果为:%.2f" , sum) ;
2、break 跳出循环
continue 结束本次循环
return 返回方法外部
3、sqrt()平方根
************************************************2016-08-19**********************************************
1、数组(是特殊的集合):
1.1、数组里面的元素必须是同一个类型
1.2、数组一旦创建,长度就不能变化
2、初始化:
2.1、静态初始化(常见)
int [] a = {2,3,4,6};
a、长度系统自动判断
2.2、动态初始化
int [] a = new int [2];
int [] b = new int []{1,23,4,65};
3、属性:
3.1、length:长度
3.2、索引/下表 index 通过索引来访问/修改数据
数组名[下表]
下表从0开始
值类型存放到栈里面
随机数:
import java.util.Random;
Random r = new Random();
int num = r.nextInt(10);
4、二维数组:
************************************************2016-08-16**********************************************
1、方法:
1.1声明:
[修饰符] 返回值类型 方法名(形参列表){方法体}
1.2调用方法啊:
方法名(实参);
2、值和引用类型的传递
基本类型传递是值传递:放在栈中,各自改变,互不相干。
引用类型传递:放在堆中,指向相同的地址,一改全改。
String:传递的是地址,内容不可改,修改要开辟新空间。
数组:与引用型数据类型一样。
******类 && 对象******************************************2016-08-22**********************************************
对象模型的特点,用自己的话总结一下
封装 继承 多态
抽象:
封装:
构造方法:
1.没有返回值
2.名字和类名相同
3.每个类的内部有一个默认的无参的构造器
4.一旦自己写了构造方法,默认的构造方法就消失了
5.要想使用无参的构造方法,就自己写。
重载(overload):
同一个类中,方法名,参数列表不一样,不管返回值类型
构造方法也可以重载
**********访问修饰符 && this && static**************************************2016-08-23**********************************************
1、访问修饰符
public : 所有可以访问
default 默认 : 类内部和同包的其他类访问,其他包要访问要导包
protected : 类内部访问,同包访问,其他包的子类访问
private : 仅在类内部访问。 特例:内部类可以访问外部类的私有变量。?????
2、this的作用 :
a、可以代指当前对象。
b、也可以在构造器中用this()调用构造器
1.必须在构造器中调用
2.必须放在第一行
3.不能循环调用
3、static的作用 :
a、静态成员是该类的所有对象共有的,一改全改
b、先于对象先生成,对象还没创建时,静态变量已经存在
c、随着类的加载而加载
d、通过类名访问
也可以通过对象来访问
e、静态区域中只能用静态成员(字段,方法),非静态成员和this不可以使用
f、没有静态构造器,构造器前面只能是 private protected && public
总结:遇到static就用类名来调用
4、代码块
a、局部代码块 :写在方法内部,用于限定了变量的作用域
b、初始化块 :写在类的成员位置,new对象的时候,先调用初始化块,再调用构造器
作用:可以把多个构造方法中共同的代码放到初始化块中,不管调用哪个构造器,都会先执行初始化块(初始化一次,加载一次)
c、静态初始化块 :在类的成员位置,前面加static,只加载一次,可以有多个块。
作用:一般是对类进行初始化,初始化静态变量
5、继承
a、java 单一继承
Animal a1 = new Dog();
子类(dog)自动转为父类(animal),转化后animal 只有动物的方法,dog的独有的方法消失了
父类(animal)不能强制转换为子类(dog),除非,父类已经被子类自动转过,否则会出现错误。
Animal a1 = new Animal();
Dog d1 = new Dog();
Dog d2 = new Dog();
a1 = d1; //自动转换,这是a1 的本质已经是Dog
d2 = (Dog)a1; //强制转换,可以转换
但是如果直接 d2 = (Dog)a1; //不可转,因为a1本质还是Animal
自己总结:
子类实例化时,是先调用自己的构造器,子类的构造器不管有没有参数,构造体内第一句总是super(父类的构造器),
先运行super,再执行其他东西。
当父类构造器有参数时,子类必须也要有这个参数。调用子类传个参数,参数再传个父类,然后改变父类的属性值。
instanceof运算符:实例的属于哪个类。
boolean b = a1 instanceof Dog;