-
Java的原始数据类型包括(布尔型 boolean)、(字节型 byte)、(短整型 short )、( 整型 int)、( 长整型long)、(浮点型 float)、(双精度型 double)、( 字符型 char )。
-
JDK是 Java 语言的软件开发工具包 ,编写java程序的编辑器使用的是( eclipse )。jvm是java的虚拟机;jre是java的运行环境;特点:免费 ,开源,跨平台,面向对象;
-
控制台输出语句( System.out.println(" "); )。
-
若在一个Java文件中使用另一个包下的类,则需要在当前文件中( 导包import相应的类)。
-
Java的代码风格:包名使用驼峰式写英文字母,类名的命名要首字母大写 。
-
Java中,条件判断的语句包括( if... else if ..else )和( switch...case...default )。
-
Java中,循环语句有( while )、( do...while )、( for )。
-
break的作用是( 跳出本层循环 )continue的作用是( 跳出本次循环 )
-
Java中求随机数的代码是
double temp=Math.random();对小数四舍五入的代码是
static int round(float a); -
int a = 2; int b = a++; int c = ++a; 则b等于( 2 ) c等于( 3 )
-
int a = 9; a += 5 ; a等于( 9 )
-
String name = 5!=2?"张三":"李四"; name的值为(“张三” )
-
下列代码输出结果是 2(因为case之后没有break,所以会依次从上到下运行)
case 8 --> h=59
case 9 --> h=61
case 10 --> h=64
default --> h=64/32=2
public static void main(String[] args) { int i = 24, j = 32, h = 58; switch (j - i) { case 7: h++; case 8: h++; case 9: h += 2; case 10: h += 3; default: h /= j; } System.out.println(h); } -
"hahha".equals(s)中前面的字符串"haha"是活的,后面的s字符串是死的
-
switch (变量){case1: break; default: break;}
switch(变量){ case 值: break; case 值: break; case 值: break; default: break; } -
break \ continue \ 三元运算符
break 跳出本层循环
continue 跳出本次循环
三元运算符: 等同于 if else 作用就是简写 if else的
a>b?"ha":"hello"; -
for循环嵌套 外层的for 决定是行 里层的for 决定的列
for(int i=0;i<2;i++) {
for(int j=0;j<2;j++) {
System.out.print("*");
}
System.out.println();
}
//输出结果:
**
**
-
两种遍历数组的方法
普通for循环 for(int i=0;i<arr.length;i++){ }
增强for循环 for(数据中的每一项:遍历的数据){ }
例:for(int a:arr) { System.out.println(a); }
-
利用Arrays的快速排序
Arrays.sort(arr);
public class Demo { public static void main(String[] args) { int[] arr = {1, 3, 2, 67, 5, 4, 8}; Arrays.sort(arr); for (int i : arr) { System.out.println(i); //输出结果:1,2,3,4,5,8,67 } } } -
数组
数组的最大索引 = arr.length-1
索引从0开始 (角标 下标)
在堆区开辟一个新的空间
如果直接打印数组 打印的是地址值
数组中有默认值
数值类型 默认值 int 0 float 0.0 boolean false String null -
方法
定义方法好处:
-
可以将功能进行封装:
-
便于对该功能的复用
-
方法只有被调用才能被执行
-
提高了代码的复用性
-
函数中只能调用函数,不能定义函数
-
-
三种排序
-
冒泡排序!!!(升序)
- 对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或 最大的元素“浮”到顶端,最终达到完全有序
package com.java4; public class BubbleSort {//冒泡排序 public static void main(String[] args) { int[] arr = {1, 2, 3, 5, 34, 4}; sort(arr); for (int i : arr) { System.out.print(i+" "); } } public static void sort(int array[]) { //i表示第几轮“冒泡”,j 表示“走访”到的元素索引。 // 每一轮“冒泡”中,j 需要从列表开头“走访”到 array.length - 1 的位置。 for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length - 1 - i; j++) { if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } } }-
选择排序升序
- 是最简单直观的一种算法 基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。
public class selectSort { public static void main(String[] args) { int arr[] = {2, 4, 56, 67, 234, 36, 6, 8, 769}; for (int i = 0; i < arr.length - 1; i++) { int min = i; for (int j = i + 1; j < arr.length; j++) { if (arr[min] > arr[j]) { min = j; } } if (min != i) { int temp = arr[min]; arr[min] = arr[i]; arr[i] = temp; } } for (int k : arr) { System.out.print(k + " "); } }-
插入排序
public class insertSort { public static void main(String[] args) { int[] a = { 5, 4, 2, 4, 9, 1 }; for (int i = 1; i < a.length; i++) { for (int j = i; j > 0; j--) { if (a[j] < a[j - 1]) { int temp = a[j - 1]; a[j - 1] = a[j]; a[j] = temp; } else break; } } // 遍历数组 for (int i : a) { System.out.print(i+" "); } } } -
-
类和对象的关系是什么?
二者的关系:类是对象的抽象化描述,这些对象具有相同的特征和动作(属性和方法)。 对象是类的具体实例。
-
成员变量和局部变量的区别?
- 1.生命周期 局部变量随着方法的调用而创建,随着方法的消失而消失; 成员变量随着对象的创建而创建,随着对象的消失而消失
- 2.位置 局部变量写在方法里,或声明在方法上的参数列表里 成员变量写在方法外,类里
- 3.默认值 成员变量有默认值 局部变量没有默认值
- 4.内存 成员变量存储在堆内存 局部变量存储在栈内存
-
构造方法和普通方法的区别
-
格式不同:构造方法没有返回值,不用void表示;普通方法必须有返回值类型表示,没有返回值用void标识
-
命名不同:构造方法名字必须和类名相同。 普通方法名字可以是类名(不规范)。
-
调用不同:构造方法被关键字new调用,调用一次就创建一个对象,构造方法不能被对象调用。 普通方法只能被对象调用,一个对象可以调用多次普通方法。
-
是否有默认:一个类如果没有定义构造方法,默认有一个无参数的构造方法。 普通方法没有默认
-
-
面向对象的三大特征:封装,继承,多态
- 封装:将类的属性变为私有属性后,外界不能对类内部的私有属性进行访问,而通过set()赋值、get()访问的方式叫封装,解决了数据安全问题。public、protected、private等访问权限。
- 继承:一个类可以继承另一个类,继承的类则具备了被继承类的所有成员变量及方法。解决了代码复用问题,同时让类之间产生了关系,为“多态”提供了前提。
- 多态:一个引用在不同情况下的多种状态就是多态,解决了功能扩展问题。方法重写就是多态的一个实现,同一个方法不同的实现。
-
父类和子类:有继承关系的两个类称为父类和子类。子类继承父类,父类派生子类。Java是单一继承。
-
子类继承父类后:
-
子类可以拥有父类的全部属性和自定义方法。
-
子类可以重写(override)从父类继承下来的自定义方法,重写时可以使用super.父方法()调用父类中的自定义方法。子类的重写的方法必须和父类方法名字相同、参数相同、返回值相同。注意:如果子类重写了父类的方法,子类重写的方法的权限必须大于或等于父类被重写的方法。说明:重载(overload)
-
子类可以新增自己独有的属性和方法。
-
子类不能继承父类的构造方法。(因为子类有子类的构造方法,new的时候已经指明),虽然不能继承,但是能调用父类的构造方法,子类的构造方法在调用时,会自动的执行父类默认的构造方法(见程序3)。子类的构造方法中可以使用super(),手动指定父类中构造方法(见程序4)。
-
-
Java中的继承是单一继承,即一个父类可以有多个子类,一个子类只能有一个父类,不支持多继承。但java支持多重继承,及B extends A,C extends B 。在Java中只允许单一继承,C++可以多继承(继承多个父类)
-
super关键字
- super.方法名();调用父类的自定义方法,写在子类的自定义方法中。
- super();调用父类的默认构造构造方法,默认构造方法是隐式的。
- super(*,*):如果父类中不存在默认构造方法,则必须显式的调用有参的构造方法
- 无论是显式的还是隐式的,super()必须写在子类构造方法的第一行
31. 方法重载(overload)和方法重写(override)有什么区别?
- 位置:重载要求同类中的同名方法(举例Math.round()方法)
重写要求不同类中的同名方法(不同类要求有继承关系的两个类)
- 格式:重载要求方法名相同,参数个数或参数类型不同,与返回值无关
重写要求方法名相同,参数个数、参数类型相同,返回值相同
32. 多态:
-
定义:一个引用在不同情况下的多种状态就是多态。方法重载就是多态的一个实现,同一个方法不同的实现。
-
前提:“继承”、“重写”。
-
特征:a.父类有,子类没有->调用父类
b.父类有,子类重写->调用子类
c.父类无,子类有->编译失败
d.父类只能调用自己的成员变量
-
优点:a. 如修改程序,只需修改右侧即可;左侧引用类型、引用名称无需改变
b. 如有参数传递,形参指定为父类类型,则实参可以为任意子类类型,提高了程序的扩展性
- final关键字
- 修饰属性:最终属性,不能被修改(赋值)声明的同时必须被初始化,使用的过程中不能被修改值
- 修饰方法:最终方法,不能被子类重写
- 修饰类:最终类,不允许被继承
- 修饰对象:对象的内容能够改变,对象的地址无法修改
- 抽象类和普通类的异同?
-
抽象类的存在时为了被继承,不能实例化,而普通类存在是为了实例化一个对象
-
抽象类的子类必须重写抽象类中的抽象方法,而普通类可以选择重写父类的方法,也可以直接调用父类的方法
-
抽象类必须用abstract来修饰,普通类则不用
-
普通类和抽象类都可以含有普通成员属性和普通方法
-
普通类和抽象类都可以继承别的类或者被别的类继承
-
普通类和抽象类的属性和方法都可以通过子类对象来调用
- 抽象类和接口的异同?
不同点:
1. 关键字不同:
① 继承抽象类的关键字是extends,而实现接口的关键字是implements;
② 定义抽象类的关键字是abstract class,而定义接口的关键字是interface;
2. 权限修饰不同:抽象方法可以有public、protected和default这些修饰符(缺省情况下默认为public),而接口方法只能是public ;
3. 抽象类中可以有构造方法,而接口中不能有构造方法;
4. 抽象类中既可以有抽象方法也可以有普通方法,接口中只能有抽象方法;
5. 抽象类中增加方法可以不影响子类,而接口中增加方法通常都影响子类。
6. 抽象类中的变量可以是普通变量,接口里定义的变量只能是公共的静态的常量;
7. 抽象方法可以继承单个类和实现多个接口,接口可以多继承接口;
相同点:
1. 都可以被继承
2. 都不能被实例化
3. 都可以包含方法声明
4. 派生类必须实现未实现的方法不同点: