1.计算机基础
bit,即0或1
byte字节,8位作为⼀个字节,字节是处理数据的基本单位
1 byte = 8bits
1KB = 1024 bytes
2.八种基本数据类型
byte: 8位,最⼤127,最⼩-128,节省空间,占⽤int类型的四分之⼀,默认 0
short: 16位,最⼩-32768,最⼤32767,int类型的⼆分之⼀,默认是0
int: 32位,最⼩-2147483648,最⼤ 2147483647,整数默认是int类型,默认是0
long: 64位,最⼩-9223372036854774808,最⼤9223372036854774807,默认是0L,
float: 浮点, 单精度32位, 默认0.0f
double: 双精度64位, 浮点数默认位double类型,默认是0.0
boolean: 1位,true或者false,默认是false
char: 16位的 unicode字符,即两个字节表示⼀个字符 最⼩是 u0000 即0,做⼤ ufff 即65535 例⼦ char demo = 'A'
类型转换 double > float > long > int > short > byte
小转大可以直接转换,从大到小,需要强制转换,会有精度丢失。
引用数据类型:Class创建的对象 或者 数组都是引⽤数据类型
String :字符串对象,也是引⽤⼀种数据结构,⽤来存储同⼀类型之的集合数据类型
3.数组
数组:⼀种数据结构,⽤来存储同⼀类型之的集合,通过⼀个整形下标可以访问数组中的每⼀个值, 从0开始计算,记住,特别重要。内存中存储相同数据类型的连续的空间
使用数组:
声明数组变量时,需要指出数据类型和数组变量的名字
//声明数组,但没有初始化 int [] numbers; //使⽤new运算符创建数组 int [] numbers2 = new int[100];
new int[n]将会创建⼀个⻓度为n的数组
//可以使⽤这两种形式声明数组,推荐第⼀种 int [] numbers; int numbers2 [];
数组初始化和匿名数组
//初始化,数组的⼤⼩就是初始值的个数 int[] numbers = { 1,2,3,4,5,6 }; //匿名数组 new int[] { 1,2,3,4,5,6 };
注意:所有元素都初始化为0,boolean数组的元素会初始化为false。⼀旦创建了数组,就不能改变它的⼤⼩,数组需要初始化才可以操作,不能索引越界。
一维数组
int [] numbers = {1,2,3}; String[] str=new String[2]; String[] str= {"apple", "xdclass", "cat", "dog"};
多维数组
//创建并初始化 int [][] numbers = {[1,2,3],[4,5,6],[7,8,9]} //创建 int [][] numbers2 = new int[3][3];
数组⾥⾯有很多⽅法,是⾃带的⽅法和属性
获取数组⻓度的属性名称 length,使⽤就是 数组名.length
5.java内存空间堆栈
数据类型
基本数据类型: byte,short, int,long, float,doble,boolean,char
引⽤数据类型:即除了基本的变量类型之外的所有类型
java在内存中堆(Heap)、栈(Stack)两块存储空间
数据类型在内存中使用
基本的变量类型只有⼀块存储空间(分配在stack中),
传递的时候直接是值传递,
对数据进⾏操作,不影响原先的值
引⽤类型有两块存储空间(⼀块在stack中,⼀块在heap中)
⼀个对象在内存中会请求⼀块空间来保存数据,访问对象的时候不会直接是访问对象在 内存中的数据,⽽是通过引⽤去访问。
引用:也是⼀种数据类型,保存的是内存的地址,引⽤是存储在 stack栈空间⾥⾯
不同的引用可以指向同一个对象,一个对象可以有多个引用
// 栈 int a=1; boolean flag=false; // s在栈中 new Student();在堆中 Student s = new Student(); Person p = new Person();
引用后修正结果
因为字符串、数组或者对象是引⽤类型,所以修改后正在的数据都会发⽣变化
String a = "学习java"; String b = "l love java"; System.out.println(a); System.out.println(b); b = a ; System.out.println(a); System.out.println(b); a = "现在在学java基础"; System.out.println(a); System.out.println(b);
数据拷贝
int [] a = {1,2,3}; int [] b = a; System.out.println(Arrays.toString(a)); System.out.println(Arrays.toString(b)); b[0] = 0; System.out.println(Arrays.toString(a)); System.out.println(Arrays.toString(b));
数组是引⽤类型,所有的引⽤都是指向这个值的, 也就是这个对象
变量类型
类变量(静态变量):
使⽤static声明的变量,可以直接使⽤ 类名.变量名访问
⼀个类不管创建了多少个对象,类只拥有类变量的⼀份拷⻉,数值默认值是0,布尔型默认值 是false,引⽤类型默认值是null
⽣命周期:在第⼀次被访问时创建,在程序结束时销毁
声明为public类型,⼀般这样声明 public static final
存储在⽅法区,和堆栈不⼀样的⼀个空间
public class Student{ public static final String PREFIX = "我是叫"; }
实例变量(属性)
需要使⽤对象.变量名才可以访问
对象被实例化之后,实例变量的值就跟着确定,可以是赋值,也可以是默认值
⽣命周期:在对象创建的时候创建,在对象被销毁的时候销毁
访问修饰符可以修饰实例变量,⼀般是私有的,private修饰,然后通过⽅法来进⾏查看或者修改
public class Student { //介绍前缀 public static final String PREFIX = "我是叫"; //年龄 private int age; //姓名 private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
局部变量
⽅法中的变量
声明在⽅法、构造⽅法、语句块、形式参数等
⽣命周期:当它们执⾏完成后,变量将会被销毁
访问修饰符不能⽤于局部变量
局部变量没有初始值,必须初始化后才可以被使⽤
public class Student { //介绍前缀 public static final String PREFIX = "我是叫"; //年龄 private int age; //姓名 private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } //⾃我介绍⽅法 public String introduce(){ String content = PREFIX + name + ",年龄是" + age; return content; } }