java基础总结
1.java为什么是跨平台语言
因为它有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在虚拟机上进行的,每个系统平台都是有自己的虚拟机(JVM),所以JAVA语言能跨平台。
2.java的基本类型是什么,默认值是什么
1字节=8位
3.java的循环语句
有三种循环语句for,while,do while;
4.java的分支语句
if, if -else if else,if else,switch case;
switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
5.数组的声明方式,特点是什么,常用的方法
声明:dataType[] arrayRefVar; // 首选的方法
或
dataType arrayRefVar[]; // 效果相同,但不是首选方法
循环的方法:
for -each循环
double[] myList = {1.9, 2.9, 3.4, 3.5};
// 打印所有数组元素
for (double element: myList) {
System.out.println(element);
}
普通的循环
double[] myList = {1.9, 2.9, 3.4, 3.5};
// 打印所有数组元素
for (int i = 0; i < myList.length; i++) {
System.out.println(myList[i] + " ");
}
常用的方法:
java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:
给数组赋值:通过fill方法。
对数组排序:通过sort方法,按升序。
比较数组:通过equals方法比较数组中元素值是否相等。
查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
6.核心工具类 String StringBuffer StringBuilder Math Date Calendar的常用方法
length() 方法,length 属性和 size() 方法的区别:
1、length() 方法是针对字符串来说的,要求一个字符串的长度就要用到它的length()方法;
2、length 属性是针对 Java 中的数组来说的,要求数组的长度可以用其 length 属性;
3、Java 中的 size() 方法是针对泛型集合说的, 如果想看这个泛型有多少个元素, 就调用此方法来查看!
常见的面试题
String s1 = "abc"; // 常量池
String s2 = new String("abc"); // 堆内存中
System.out.println(s1==s2); // false两个对象的地址值不一样。
System.out.println(s1.equals(s2)); // true
Java:String、StringBuffer 和 StringBuilder 的区别
String:字符串常量,字符串长度不可变。Java中String 是immutable(不可变)的。用于存放字符的数组被声明为final的,因此只能赋值一次,不可再更改。
StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。Java.lang.StringBuffer 线程安全的可变字符序列。在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。
StringBuilder:字符串变量(非线程安全)。在内部 StringBuilder 对象被当作是一个包含字符序列的变长数组。
基本原则:
如果要操作少量的数据用 String ;
单线程操作大量数据用StringBuilder ;
多线程操作大量数据,用StringBuffer
string
char charAt(int index)
返回指定索引处的 char 值。
math
math.random() 方法用于返回一个随机数,随机数范围为 0.0 =< Math.random < 1.0。
Math.floor 是向下取整。
Math .ceil 是向上取整。
Math.round 是四舍五入取整
date
获取当前时间`
SimpleDateFormat sdf = new SimpleDateFormat();// 格式化时间
sdf.applyPattern("yyyy-MM-dd HH:mm:ss a");// a为am/pm的标记
Date date = new Date();// 获取当前时间
System.out.println("现在时间:" + sdf.format(date)); // 输出已经格式化的现在时间(24小时制)
calendar
Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK)
7.java的三大核心 封装,继承,多态
封装:(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法
继承:
从已有的类派生出新的类,称为继承。使用extend关键字
java 中若要在子类调用父类的方法,需使用关键字super。
多态
重载:
是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
重写:是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变;
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
(3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
8.访问控制符
9.基本语法
对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
类:类是一个模板,它描述一类对象的行为和状态。
方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。
实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。
10,什么是对象和类
对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。
类是一个模板,它描述一类对象的行为和状态。
11.Java的作用域和范围
12.java常用运算符 逻辑短路
算数运算符:+,-,*,/,%,++,–
关系运算符:>,<,>=,<=,==,!=
位运算符:&,|,~(按位取反),^
逻辑运算符:&&,||,!
逻辑短路:使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。
13.什么是接口,接口的特点是什么
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。
特点
1.接口可以多继承
2.接口的方法声明必须是 public abstract 即便不写默认也是
3.接口里面不能包含方法具体实现
4.类实继承接口必须实现接口里申明的全部方法,除非该类是抽象类
5.类里面可以声明 public static final 修饰的变量
6.接口不能被实例化,但是可以被实现类创建
14.什么是抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
- 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
- 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
- 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
- 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
- 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
15.如何定义一个一个属性、方法函数、构造函数?了解基本语法
属性:
数据修饰符 数据类型 名字;
public int a;
方法:
修饰符 返回值类型 方法名(参数类型 参数名){
…
方法体
…
return 返回值;
}
16.Java的命名规范
1)、名称只能由字母、数字、下划线、$符号组成
2)、不能以数字开头
3)、名称不能使用JAVA中的关键字。
17.java关键字的用法
break:用于结束本层循环,或跳出某层循环。
continue:用于跳出本次循环
18,重写和重载
重载:
是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
重写:是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变;
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
(3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
19.异常的处理
检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的
运行时异常:运行时异常是可能被程序员避免的异常。
异常类有两个主要的子类:IOException 类和 RuntimeException 类。
如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。
20.编程题
1.)for循环打印指定图形
等腰三角形
for (int i = 0; i <5 ; i++) {
for (int j = 0; j <5 ; j++) {
if(j<=i && (i+j-5)<0){
System.out.print("*");
}
}
System.out.println();
2.)时间工具类的使用
//获取当前时间
Date date=new Date();
SimpleDateFormat sc=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println("当前时间为:"+sc.format(date));
// 获取当前的日期时间
LocalDateTime currentTime = LocalDateTime.now();
System.out.println("当前时间: " + currentTime);
3.)判断奇数偶数
Scanner sc=new Scanner(System.in);
System.out.println("输入一个数字");
while (sc.hasNext()) {
int i = sc.nextInt();
if (i % 2 == 0) {
System.out.println("这个是偶数");
} else {
System.out.println("这个是奇数");
}
4.)成绩分级
System.out.println("输入你的成绩");
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int i = sc.nextInt();
if (i > 90) {
System.out.println("优秀");
}
else if( i>60 &&i<=90){
System.out.println("还行");
}else {
System.out.println("加油");
}
}
5.)水仙花数
Scanner in =new Scanner(System.in);
int x=0;
for(x=100;x<=999;x++){
// if(x==(x/100)*(x/100)*(x/100)+((x%100)/10)*((x%100)/10)*((x%100)/10)+((x%100)%10)*((x%100)%10)*((x%100)%10)){
// System.out.println(x);
//
// }
if(x==(x/100)*(x/100)*(x/100)+((x/10)%10)*((x/10)%10)*((x/10)%10) + (x%10)*(x%10)*(x%10)){
System.out.println(x);
}