java特点
1、面向对象性: 两大要素:类、对象 三大特征:封装、继承、多态
2、健壮性:去除了c/c++的指针;添加了垃圾回收机制--->但Java依旧可能出现内存的溢出和 泄漏
3、跨平台性:write once , run anywhere “一次编译,到处运行”-->JVM
不同的操作系统需要安装不同的JVM
为什么要配置环境变量
保障文件在任何目录下都可以执行Java的开发指令。比如 javac.exe java.exe
path环境变量: windows操作系统在执行命令时所要搜寻的路径
关键字
定义:被Java语言赋予了特殊含义,用作专门用途的字符串(单词)
特点:Java中的关键字都是小写
保留字
形势上是关键字,但并无实际用途,如goto const
Java中的名称命名规范
包名:多单词组成时,所有字母都要小写
类名、接口名:多单词组成时,所有单词的首字母都要大写
变量名、方法名:第一个单词首字母小写,从第二个单词开始,所有单词首字母大写
常量名:所有字母大写。多单词组成时,每个单词用下划线_隔开
long (8个字节)相较于float(4个字节)算容量小的
使用强转符可能会损失精度
String:字符串
1、String属于引用数据类型中的类,不是基本数据类型
2、使用一对“”(英文引号)引号来引用
关于进制
二进制:0,1。满二进一,以0b或0B开头
十进制:0-9。满十进一
八进制:0-7。满七进一以数字0开头
十六进制:0-9及A-F满十六进一,以0x或0X开头表示,A-F不区分大小写
如何使用Scanner类
1、导包:import java.util.Scanner
2、scanner类的实例化 Scanner scan = new Scanner(System.in);
3、调用Scanner类提供的方法,获取不同类型的变量
例
- import java.util.Scanner;
- public class test {
- public static void main(String[] args) {
- Scanner scan = new Scanner(System.in);
- int age=scan.nextInt();
- System.out.println("age= "+age);
- String name=scan.next();
- System.out.println("name= "+name);
- double len=scan.nextDouble();
- System.out.println("length= "+len);
- double stature=scan.nextDouble();
- System.out.println("stature= "+stature);
- }
- }
说明:
- 1、不能使用Scanner来获取char类型变量,可以用String型来代替
- 2、如果要求获取的类型与用户输入的类型不匹配,则报错:InputMisMatchException
数组
概念(what)
多个相同类型的数据按照一定顺序排列的集合,并使用一个名字命名,并通过编号的方式进行统一管理
相关
元素、下标(角标、索引)、数组名、数组长度
数组的声明和初始化
int[] arr1;//声明
静态初始化:数组初始化和数组元素的赋值同时进行
arr1= new int[]{1,2,3,4};//初始化
int[] = new int[]{1,2,3,4};//合并声明和初始化
动态初始化:数组初始化和数组元素的赋值分开进行
String[] arr = new String[5];
不同数组的默认初始化值
- 整型:0
- 浮点型:0.0
- 字符型:’\0’(‘\u0000’)
- 布尔型:false
- 引用类型:null(空)
标签
label : for(int i=0;i<n;i++)
{
for(int l=0;l<n;l++)
{
if(l%4==0)
{
break label;
}
}
}
二维数组
随机数的产生
查找
方法一:线型查找(暴力)直接比较是否相等 O(n)
方法二:二分法查找O (log10n)前提:数组有序
arrays类
成员变量与局部变量
相同点:
- 声明变量的结构:数据类型 变量名 = 变量值;
- 先声明后使用
- 都有对应的作用域
不同点: - 类中声明的位置不同 成员变量:直接声明在类中。局部变量:方法的形参、方法的内部、构造器的内部、构造器的形参、代码块的内部.....
- 权限修饰符的使用 成员变量使用前可以用权限修饰符修饰,局部变量不可以 常见的权限修饰符有 public|private|缺省
- 针对变量值的说明 成员变量有默认初始化值,局部变量没有默认初始化值,在调用前必须显式初始化
- 内存中加载位置不同 成员变量声明在栈空间中 局部变量声明在堆空间中
this关键字的 使用
- 理解:当前对象,或当前正在创建的对象
- 使用范围:this可以使用在方法或构造器的内部
- 可以调用的结构:属性、方法、构造器
- 在方法中使用this
- 我们可以在方法内,调用当前类的属性或方法,属性或方法前可以使用”this.“表明调用的当前对象的属性或方法。通常情况下我们都习惯省略此this关键字
- 但是如果方法的形参和类的属性名相同了,则必须使用“this.变量”的方式表明我们调用的变量是当前对象的属性,而非形参
- 如果在构造器中使用this:
- 我们可以在当前构造器中,调用当前类的属性或方法,属性或方法前可以使用“this.”的方式,表明调用的是当前对象的属性或方法。通常情况下我们都习惯省略此this关键字
- 但是如果构造器的形参和类的属性名相同了,则必须使用“this.变量”的方式表明我们调用的变量是当前对象的属性,而非形参
- this来调用构造
- 可以在构造器中使用“this.(形参列表)”方式,调用当前类中的指定构造器
- 构造器中不可以使用“this.(形参列表)”方式,调用本身的构造器
- 如果类中声明了n个构造器,则最多可以有n-1个构造器中使用了使用“this.(形参列表)”方式调用其他构造器
- 规定要求将使用“this.(形参列表)”声明写在首行
- 一个构造器中最多只有一个声明“this.(形参列表)”方式
super关键字的使用
- 为什么需要super?
-
子类继承父类以后,对父类的方法进行了重写,那么在子类中,是否还可以对父类中被重写的 方法进行调用?
!!!可以
-
子类继承父类以后,发现子类和父类中定义了同名的属性,是否可以在子类中区分两个同名的 属性?
!!!可以
如何调用?使用super关键字即可 。
super的理解:父类的
super可以调用的结构:属性、方法、构造器
super调属性、方法
子类继承构造器以后,我们就可以在子类的方法或构造器中调用父类的属性或方法。(满足封装性的前提下)调用时使用super.的结构表示调用父类属性或方法
super调用构造器
- 子类继承父类时,不会继承父类的构造器。只能通过“super(形参列表)”的方式调用父类指定的构造器。
- 规定:“super(形参列表)”,必须声明在构造器的首行。
- 我们前面讲过,构造器的首行可以使用“this(形参列表)”的方式,调用本类中的构造器,结合2,结论:在构造器的首行,“this(形参列表)”和“super(形参列表)”只能二选一。
- 如果在子类构造器的首行既没有显示调用“this(形参列表)”,也没有显示调用“super(形参列表)”,则子类此构造器默认调用“super()”,即调用父类中空参的构造器。
- 由3和4得出结论:子类的任何一个构造器中,要么调用本类中重载的构造器,要么调用父类中的构造器,只能是这两种情况之一。
- 由5可得,一个类中声明有n个构造器,最多有n-1个使用“this(形参列表)”,则剩下的那个一定使用“super(形参列表)”
我们在通过子类的构造器构造对象时,一定在调用子类构造器的过程中,直接或间接的调用到父类的构造器。也正因为调用过父类的构造器,我们才会将父类中的属性或方法加载到子类中,供子类对象使用。
Object类
明确:java.lang.Object
任何一个Java类(除Object类)都直接或间接的继承于Object类
Object类被称为Java类的根父类
Object类中声明的结构(属性、方法)就具有通用性
Object类中没有声明属性
Object类提供了一个空参构造器
重点关注:Object类中声明的方法
Object常用方法
常用方法
- 重点方法:equals() \ toString()
- 了解方法:clone() \ finalize()
- 目前不需要关注:getclass() \ hashcode() \ notify() \ notifyAll() \ wait() \ wait(xx) \ wait(xx,yy)
equals()的使用
适用性:
任何引用数据类型都可以使用
java.lang.Object类中equals方法的定义
public boolean equals(Object obj){
return(this == obj);
}
子类使用说明
自定义的类在没有重写Object中equals()方法的情况下,调用的就是Object类中声明的equals(),比较两个对象的引用地址是否相同。(或比较两个对象是否指向了堆空间中的同一个实体对象)
对于像String、File、Date、和包装类等他们都重写了Object类中的equals()方法,用于比较两个对象的实体内容是否相等。
开发中的使用说明:
实际开发中,针对自定义的类,常常会判断两个对象是否equals(),而此时主要判断是两个对象的属性值是否相等。所以,我们要重写Object类的equals()方法
如何重写:
手动自己实现
调用IDEA自动实现
toString()的使用
Object类中toSring()的定义:
public String toString(){
return getClass().getName() + “@“ +Integer.toHexString(hashcode())
}
开发中使用的场景
平时我们在调用System.out.println()打印对象引用变量时,其实就调用了对象的toString()