java基础知识
基本数据类型包括4种整型(byte-1 short-2 int-4 long-8),2种浮点型(float-4 double-8),1种字符型(char),1种布尔型(boolean)
byte在Java中占一个字节,能表示-128到127
在Java中整数默认为int,小数默认为double
转义字符:
,比如换行为\n,退格为\b,制表符tab为\t,回车为\r
位运算符:
与& 或| 异或^ 非~ <<: 3<<2结果为12
>>: 6>>2结果为1
二元运算符:
格式:(条件表达式)?表达式1 : 表达式2
逻辑运算符:
只能对boolean类型的数据进行操作;
&&与 ||或 !非
数据类型之间的转换:
自动转换:低精度自动向高精度转换,不会丢失精度
byte –> short –> int –> double
int –> long
char –> int
强制转换:(int)表达式
for循环和while循环的区别:
如果变量只是为了控制循环次数的话,用for比较好,因为节省内存,其他方面是一样的
break()跳出选择结构和循环结构,可以在循环上加一个标号,这样就可以跳出指定标号的那个循环,而continue()只能作用于循环结构,用于结束本次循环,继续下一次循环
重载:当在定义函数时,如果函数功能相同,但是接收的参数列表不同(类型和参数个数),则可以定义同名函数,以方便阅读.(重载和返回值类型没有关系)
在栈内存中,除了main函数中的变量,其他包括定义在方法中和for循环中的变量用了都会被释放
在堆内存存放着对象实体和数组,堆内存中数据都有默认初始值,如int初始值默认为0,boolean类型的默认为false,堆内存中的无用数据,Java的垃圾回收机制会不定时去清除
1.int[] x = new int[3];//在堆内存中建立new int[3]实体,栈内存中的x指向这个实体
2.int[] y = x;//y也指向这个实体
3.y[1] = 2;//改变堆内存中数组实体的值
4.x = null;//虽然x为null,x不在指向堆中的实体,但是堆内存中的实体让在,y仍指向它
1.int[] x = new int[3];
2.int[] y = new int[3];
3.y[1] = 8;这里改变y[1]的值对x没有影响,因为他们都各自在堆内存中new了实体
1.int x = 3;
2.int y = x;
3.y = 5;这里都在栈内存中,y的改变对x没有影响
数组的排序
1.1.选择排序法
2.int num = arr.length;
3.for(int i=0; i<num-1; i++)
4.{
5. for(j=i+1; j<num; j++)
6. {
7. if arr[i]>arr[j]
8. {
9. int temp = arr[i];
10. arr[i] = arr[j];
11. arr[j] = temp;
12. }
13. }
14.}
2.冒泡排序法
二维数组 int[][] arr = new int[3][4]
//其中3代表而且数组的长度,4代表每个一维数组的长度,即这个二维数组里面有三个一维数组,每个一维数组有4个元素;
int[][] arr = {{1,2,5},{6,3,8},{2,9,1}};
//二位数组的第二种初始化方式
例子:
1.int[][] arr = new int[3][];
2.arr[0] = new int[4];
3.arr[1] = new int[2];
4.arr[2] = new int[5];
5.System.out.println(arr.length);//结果为3
6.System.out.println(arr[0].length);//结果为4
在数组中查找某个元素的位置,可以用int pos = binarySearch(arr,x)
面向对象
面向对象的思想:它是一种思想,能让复杂问题简单化.
面向对象的三大特征:封装,继承,多态;
编程工作的主要内容:找对象,建立对象,使用对象,维护对象之间的关系;
类和对象的关系:类是现实事物的描述,对象就是这个事物实实在在的存在的个体.在定义类时,应首先确定变量和方法.
成员变量和局部变量
1.成员变量作用于整个类中,局部变量作用于函数中或语句中,局部变量存在于栈内存中;
2.成员变量存在于堆内存中,因为对象的存在,才在堆内存中存在;
匿名对象
当对象的方法只调用一次,可以用匿名对象来完成,这样写比较简便,同时匿名对象可以作为实际参数进行传递
比如:new Car().run();
用匿名对象的例子来说明Java中的垃圾回收机制:
1.new Car().num = 5;
2.new Car().color = "red";
3.new Car().run();
//上面的代码中,第一句代码建立一个实体后将num改为5,但是由于没有引用,所以将会编程垃圾,第二句一样,第三局有意义可以执行,但是仍是应用的之前定义的类中的数据,并不会因为上面两句而改变
封装
1.将变化隔离 2.便于使用 3.提高重用性 4.提高安全性
封装将不需要对外提供的内容都隐藏起来,对外提供公共方法对其访问,函数是Java中最小的封装.
private
私有,权限修饰符,用于修饰类中的成员(包括成员变量和成员函数),如果私有后,只能在本类中有效;
私有化仅是封装的一种表现形式.
构造函数在对象建立时就运行,给对象初始化,构造函数可以利用重载的形式对象进行不同的初始化
构造代码块定义的是不同对象共性的初始化内容,而构造函数是给相应的对象初始化
系统默认给该类加入一个空参数的构造函数.
如果类中定义了构造函数,则系统将不会再自动加入空参数构造函数
构造代码块:给对象进行初始化,对象一建立就运行,而且优先于构造函数执行
构造代码块是给所有对象统一初始化,而构造函数是给相应的对象初始化
this关键字
用于区分当局部变量和成员变量同名时的情况
this代表了它所在函数所属对象的引用(意思就是:哪个对象在调用this所在函数,this就代表哪个对象)
this:谁调用我,我就代表谁
this一个很重要的应用:就是当定义类中功能时,该函数内部要用到调用函数对象时,用this来表示这个对象
1.class Person
2.{
3. private String name;
4. Person(String name)
5. {
6. this.name = name;
7. }
8. public boolean compare(Person p)
9. {
10. return this.name = p.name;
11. }
12.}
this的另一个应用:类中构造函数间的调用
1.Person(int age)
2.{
3. this.age = age;
4.}
5.Person(int age,String name)
6.{
7. this(age);
8. this.name = name;
9.}
notice:this语句只能定义在构造函数的第一行