Java学习笔记
Java基础学习
文章目录
Java基础
一、Java基础知识
1.注释
不参与程序运行,起说明作用
- 单行注释 //
- 多行注释 /* */
- 文档注释 /** */
2.数据类型
类型转换:
1.自动类型转换,小转大。
2.强制转换:类型 变量名 = (类型)值或者变量
3.运算符
①.算术运算符 :+、 - 、*、 / 、%(取余)
其中字符串“+”操作:自动拼接
②.赋值运算符 :+=、 -=、 =
其中+=存在强制转换
③.自增自减运算符:-- 、++
④.关系运算符:== 、!= 、 > 、< 、>=、 <=
⑤.逻辑运算符:&、|、^、!
短路逻辑运算符:&&(有Flase不执行后面)、||(有True不执行后面)、!
⑥.三元运算符:关系表达式?表达式1:表达式2;
True运行1,Flase运行2
4.流程控制
①.if语句
②.switch语句
③.for循环
④.while循环
⑤.do…while循环
⑥.跳转控制语句(基于条件控制):continue(当前循环结束)、break(结束整个循环)
5.Random
产生一个随机数。
Random T = new Random();
int num = r.nextInt(10); 范围P[0,10)
二、数组
1.概念:用于存储多个相同类型的数据。
2.格式:数据类型[] 变量名
或者 数据类型 变量名 []
3.初始化方法:
动态:数据类型 [] 数组名称 = new 数据类型[长度]; 例如:int [] a = new int [10];
静态:数据类型 [] 数组名称 = new 数据类型[] {1,2,3};
对于静态的初始化可以直接使用 数据类型 [] 数组名称 = {1,2,3};
4.数组元素访问
int [] a = new int[]{1,2,3};
int b = a[0];
a[0]就是a数组的第一个元素的值
5.数组可能出现的异常:索引越界ArrayIndexOutOfBoundsException,空指针异常NullPointerException
6.数组常见操作:
遍历数组:
int arr[] = {12,45,98,73,60};
for(int i :arr) { //这里使用了增强for(foreach循环)
System.out.println(i);
}
数组元素数量:数组名.length
int size = arr.length;
获取数组的最值:
import java.util.ArrayList;
import java.util.List;
public class ss {
public static void main(String[] args) {
int arr[] = {12,45,98,73,60};
//调用getMax方法获取最大值
System.out.println(getMax(arr));
}
public static int getMax(int arr[]) {
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (max<arr[i]) { //获取最小值则:min>arr[i] min = arr[i]
max = arr[i];
}
}
return max;
}
}
三、方法
1.概念:独立功能代码组织成一个整体
2.格式:public static void 方法名(){ 语句;}
调用方式:方法名();
3.方法分类:无参数和有参数。方法定义中的参数称为形参,方法调用中的参数称为实参。
4.如有返回值需要使用return关键字将值返回。格式:public static 数据类型 方法名(参数){ 语句; return 对应的数据类型的变量或者常量;}
5.方法重载与方法重写的区别:
方法重载:多个方法在同一个类中,具有相同的方法名,参数列表不同(类型、数量、参数),与方法的返回值和访问修饰符无关。
方法重写:发生在父类子类中,若子类方法想要和父类方法构成重写关系,则它的方法名、参数列表必须与父类方法相同。此外,子类的返回值和抛出的异常要小于等于父类方法,访问修饰符则要大于等于父类方法。如果父类的方法被private修饰,则子类不能重写该方法。
6.方法参数传递:参数类型为基本数据类型,形参改变,不影响实参。引用类型,形参改变,实参也改变,例如:数组。
面向对象基础
一、类和对象
1.类特点:类是对象的数据类型,类是具有相同属性和行为的一组对象集合,Java基本组成单位。
2.对象属性:成员变量;对象的行为:成员方法。
3.格式:public class 类名{ }
4.对象的使用:创建对象:类名 对象名 = new 类名();
使用对象:对象名.变量名/方法名();
变量
1.成员变量与局部变量区别:
成员变量:①在类的范围里定义的变量;②有默认初始值;③未被static修饰的成员变量也叫实例变量,它存储于对象所在的堆内存中,随对象存在而存在、消失而消失;④被static修饰的成员变量也叫类变量,它存储于方法区中,生命周期与当前类相同。
局部变量:①在方法里定义的变量;②没有默认初始值;③局部变量存储于栈内存中,作用的范围结束,变量空间会自动的释放。
Java中没有真正的全局变量,面试官如说出全局变量则指的是成员变量
2.成员变量的默认值:
基本数据类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0F |
double | 0.0 |
char | ‘\u0000’ |
boolean | false |
引用数据类型的默认值都为:null
构造方法
1.功能:对象数据的初始化。
2.格式:
public class 类名{
修饰符 类名(参数){} //可以分为有参构造方法和无参构成方法
}
如果一个方法没有写构造方法,系统默认给一个无参构造方法。如果有写一个有参构造方法则不再提供,这时需要自己写一个无参构造方法。
抽象类
1.概念:对类抽象,包括属性和方法,使用abstract
关键字修饰类和方法。
2.特点:
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
抽象类不能被实例化
抽象类子类:重写所有抽象类的抽象方法或定义成抽象类
3.成员特点:
成员变量:可以是常量也可以是变量
构造方法:有构造但是不能被实例化;用于子类访问父类数据初始化
成员方法:可以有抽象方法:限定子类必须完成某些动作;非抽象方法:提高代码复用性
内部类
Inner类为内部类
public class Outer{
public class Inner{
}
}
1.特点:内部类可直接访问外部类的成员(包括私有);外部类访问内部类需要创建内部类的对象。
2.成员内部类:①成员内部类;②局部内部类
3.构造:Outer.Inner oi = new Outer().Inner();
4.局部内部类:其中匿名内部类是其其中一种,继承该类或实现该接口的子类匿名对象。
new 类名或接口名(){
重写方法;
}
二、面向对象的三大特征
封装
1.概念:指将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能。
使用
private
修饰成员变量,只能在本类中才能访问。为了获取该类的成员变量,使用public
修饰的Set、Get方法。
2.封装目的
1.隐藏类的实现细节;
2.让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对成员变量的不合理访问;
3.可进行数据检查,从而有利于保证对象信息的完整性;
4.便于修改,提高代码的可维护性。
3.this关键字:用于指代成员变量。
继承
1.格式:public class 子名 extends 父名{}
2.访问顺序:子类局部范围 -> 子类成员 -> 父类成员
3.通过super
关键字访问父类的成员变量,通过this.变量名
访问本来的成员变量。
4.继承中构造方法访问特点:子类构造方法默认会访问父类的无参构造方法。
5.方法重写:
子类重写父类的同名方法。上面提到的方法重写在编写代码时可以使用@Override
进行注释
Tips:父类私有方法,子类无法重写;子类访问权限不能低于父类(public>默认>私有)
一个类不能同时继承多个类,但Java中支持多层继承,即一个类的父类继承另外一个类。
多态
1.概念:同一对象,不同时刻表现不同。
2.多态前提:①存在继承/实现关系;②方法重写;③父类引用指向子类对象
3.对于前提的第三点,我有一个父类Animal类,存在子类Cat和Dog两个类,将Cat或者Dog对象直接赋给父类Animal类,代码如下:
Animal c = new Cat();
Animal d = new Dog();
对于这种情况下出现了多态中成员访问的问题:
对于成员变量:编译时看左边的类,如果存在才可编译,执行的结果也是看左边类中的成员变量
对于成员方法:编译时看左边的类,如果存在才可编译,执行的结果看的时右边类中的成员方法
4.多态中的转型:向下转型:父类引用子类对象(系统自动完成);向下转型:父类转为子类对象(强转)
三、修饰符
权限修饰符
状态修饰符
1.final
关键字
修饰方法:最终方法,无法被重写
修饰变量:变量变成常量,不能被再次赋值(基本类型:数值不变;引用类型:地址值不变,内容可改变)
修饰类:最终类,不能被继承
2.static
关键字
被类的所有对象共享
可通过类名调用
访问特点:非静态成员方法可以访问静态/非静态成员变量和成员方法;静态成员方法只能访问静态成员方法或变量。
四、字符串
String
1.特点:①不可变,创建后不能被修改
;②可以被共享;③字符串效果相当于char[ ]数组,底层是byte[ ]数组
2.String对象特点:①new每次会申请一个内存空间,内容相同,地址不同。②字符相同,JVM只会建立一个String对象,并在字符串池中维护。
3.String构造方法
//String构造方法
String s = new String();
char[] c = {'a','b','c'};
String ss = new String(c);
byte[] b = {65,66,67};
String sb = new String(b);
String str = "abc";
4.String的比较
使用==比较:基本类型(数组是否相同);引用类型(地址是否相同)
用equals()方法比较
5.字符串方法:
String s = new String();
s.length(); //字符串长度
s.charAt(n); //获取字符串指定index的字符
StringBuilder
1.特点:可变的字符串类(容器),改变之后不会新创建一个对象
2.构造方法
String str = "abc";
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder(str);
3.StringBuilder添加和反转
sb2.append(任意类型); //返回对象本身
sb2.reverse; //反转字符串
链式编程:sb2.append(‘H’).append(‘b’).append(‘c’);
4.与String互相转换
//StringBuilder -> String
String s = sb2.toString();
//String -> StringBuilder
StringBuilder sb = new StringBuilder(s);
五、Java常用API
Math
System
Arrays
Integer类
Date类
SimpleDateFormat类
日期类
六、异常
总结
还在更新