目录
2.2直接打印数组的方法(Arrays.toString(数组名))
2.3自动将数组中的数字大小排序(Arrays.sort(数组名))
2.4 自动查找数字下标,类似于二分查找(Arrays.bringSearch(数组名,想要找寻的数字))
1.byte和char的区别
1.byte是字节数据类型,是有符号型的,占一个字节,大小范围为-128~127
2.char是字符数据类型,是无符号型的,占两个字节,大小范围为0~65535
3.char是一个十六位二进制的unicode字符,Java用char来表示一个字符
4.byte类型只能表示-128~127的数
char类型可以表中文字符,byte不可以,例:char e1=‘中’,e2=’国'
byte=(byte)'中' //必须强制转换,否则会报错
2.数组
主要存储相同数据类型的集合,连续的空间
定义方式1:int[] array={1,2,3,4,5};
方式2:int[] array2=new int[]{1,2,3,4,5};
方式3:int[] array3=new int[5];
若 arr3[13]=19; ,则会报错,数组越界异常
1。动态初始化——方式三
2.静态初始化——方式一和二
Java中不推荐这样写:int arr[]={1,2,3};
2.1 求数组的长度(数组名.length)
int[] array={1,2,3,4,5};
for(int i=0;i<array.length;i++){
System.out.println(array[i]+" ");
}
2.2直接打印数组的方法(Arrays.toString(数组名))
Java帮忙实现一个打印数组的方法,将数组里面的值以字符串的形式组织一下,然后进行打印
注:要添加头文件(import java.util.数组名)
System.out.println(Array.toString(array));
2.3自动将数组中的数字大小排序(Arrays.sort(数组名))
Array.sort(array);
2.4 自动查找数字下标,类似于二分查找(Arrays.bringSearch(数组名,想要找寻的数字))
int[] array={1,2,3,4,5};
int index=Arrays.bringSearch(array,5);
2.5 数组拷贝
int[] array={1,2,3,4,5};
Arrays.copyof(array,array.length);
//若想要扩充两倍,则写成
Arrays.copyof(array,array.length*2);
//若进行数组拷贝,则需要创建一个新的数组
int[] copyArray=new int[array.length];
Arrays.copyofRange(array,1,3);//打印结果为[2,3),没有4
//改行代码的意思是拷贝array中从下标1到下标3的字符或者数字
//注:在Java中,拷贝一个范围时,是左闭右开的范围,即[x,y)
int[] array={1,2,3,4,5};
int[] copy=new int[array.length];
System.out.println(array,0,copy,0,array.length);
//该代码的意思是array从0下标开始拷贝到copy,copy从0下标开始拷贝到array.length结束
System.out.println(Array.toString(copy));
2.6 数组填充
Array.fill(array,9);
//将array里的内容全部填充为9
Array.fill(array,0,3,8);
//将array里将从下标0到下标3的位置填充为8,因为Java中取值是左闭右开,即[1,3)能填充为8
//即[8,8,8,0,0,.....,0]
2.7 二维数组jielun
int[][] array1={{1,2,3},{4,5,6}};
System.out.println(array1.length);
//打印出的是行的长度,结果为2,打印的是array1,这个二维数组有多少行
System.out.println(array[1].length);
//每一行的长度,打印的是二位数组中的长度
for(int[] tmp : array){
for(int x : tmp){
System.out.println(x+" ");
}
}
//打印结果为
//1 2 3
//4 5 6
String ret=Arrars.toString(arrays1);
System.out.println(ret);
//打印结果为{1,2,3}{4,5,6}
int[][] array1=new int[2][];//在Java中,不可以省略行,但是可以省略列
array1[0]=new int[3];
array1[1]=new int [5];
System.out.println(array1.length);
System.out.println(array[1].length);
3. 类和对象
3.1 类的实例化
用类类型创建对象的过程,称为类的实例化,在Java中采用new关键字,配合类名来实例化对象
结论:可以使用new关键字实例化多个对象
1.new关键字用于创建一个对象的实例
2.使用 . 来访问对象中的属性和方法
3.同一个类可以创建多个实例
3.2 this引用的特性
- this的类型:对应类型引用
- this只能在”成员方法“中使用、
- 在”成员方法“第一个引用当前对象,不能再引用其他对象
- this是”成员方法“第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接受
4.封装
范围 | private | default | protected | public |
同一包中的同一类 | 可以 | 可以 | 可以 | 可以 |
同一包中的不同类 | 可以 | 可以 | 可以 | |
不同包中的子类 | 可以 | 可以 | ||
不同包中的非子类 | 可以 |
default的使用即是什么都不写
public:可以理解为一个外貌特征,谁都可以看到
default:对于自己家族中(同一个包中)不是什么秘密,对于其他人来说是隐私
private:只有自己知道,其他人不知道
【说明】:
- protected主要用在继承中
- default权限指:什么都不写时的默认权限
- 访问权限除了限定类中成员的可见性,也可以控制类的可见性
5.static成员
private String name;//普通成员变量
private int age;
//表示每一个对象
private static String classRoom;
//表示所有对象共用一份
- 普通成员变量:在类的内部,构造方法的外部
- 静态成员变量:在类的外部,构造方法的外部,被static修饰了
- 局部变量:方法内部定义的变量
6.代码块
6.1 普通代码块
public class Main{
public static void main(String[] args){
{
int x=10;
System.out.println("x1="+x);
}
int x=10;
System.out.println("x2="+x);
}
}//x1=10,x2=100
6.2 静态代码块
class Student{
public static String classRoom;
static{
classRoom="201";
System.out.println("静态代码块");
}
public class Test{
public static void main(String[] args){
System.out.println(Student.classRoom);
}
}
}
//打印结果
//静态代码块
//201
7.super与this的区别
两者不可同时存在,因为两者都需要放在第一行
【相同点】:
- 都是Java中的关键字
- 只能在类的非静态成员和字段
- 在构造方法中调用时必须是构造方法中的第一条语句,并且不能同时存在
【不同点】:
- this是当前对象的引用,当前对象即调用实例方法的对象
super相当于是子类对象中父类继承下来部分成员的引用
2.在非静态成员方法中,this用来访问本类的方法和属性
super用来访问父类继承下来的方法和属性
8.重写和重载的区别
重写:override 重载:overload
1.方法名称相同 1.方法名称相同
2.参数列表相同(个数、顺序、类型) 2.参数列表不同(个数、类型、顺序)
3.返回类型相同 3.返回值没有要求
9.向上转型和向上转型
9.1向上转型
实际就是创建一个子类对象,将其当成父类对象来使用
语法格式:父类类型 对象名 = new 子类类型();
animal 是父类类型,但可以引用一个子类对象,因为是从小范围到大范围的转换
例:
Dog dog =new Dog("WangWang",1);
Animal animal =dog;
两者向上转型:Animal animal=new Cat("元宝",2);
向上转型的发生的时机:
- 直接赋值:Animal animal=new Dog();
- 传参:
public static void testFunc(Animal animal){...};
public static void main(String[] args){
Dog dog =new Dog("WangWang",1);
testFunc(dog);//此时,通过参数的传递,发生了向上转型
}
3.返回值
//第一种
public static Animal testFunc(){
return new Dog();//Animal是父类,Dog是子类,前提条件是父类可以接受子类
}
public static void main(String[] args){
Dog dog=new Dog("WangWAng",1);
testFunc();
}
//第二种
public static Dog testFunc1(){
return new Dog();
}
public statc void main(String[] srgs){
Animal animal==testFunc1();
}//有点类似于直接赋值
9.2 向下转型
public static void main(String[] args){
Animal animal =new Dog("WangWang",1);
Dog dog =(dog)animal;
dog.bark();
if(animal instanceof Cat){
Cat cat =(Cat)animal;
cat.mimi();
}
}
10.内部类
内部类包括实例内部类、静态内部类、局部内部类
10.1 实例内部类
概念:在类里面,方法的外面,内部不能定义静态静态类成员变量
例:
OuterClass.InnerClass innerClass=outerClass.new InnerClass();
外部类名 . 内部类名 变量 外部类对象的引用
【注意事项】:
- 外部类中的任何成员都可以在实例化内部类方法中直接访问
- 实例内部类所在的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束
- 在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名从成员,必须是外部类.this.同名成员(OutClass.this.date1)来访问
- 实例内部类对象必须在先有外部类对象前提下才能创建
- 实例内部类的非静态方法中包含了一个指向外部类对象的引用
- 外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象
10.2 静态内部类
在类前加static,不需要外部类的对象就能实例化
10.3局部内部类
定义在外部类的方法体或者{}中,该种内部类只能在其定义的位置使用
11.String类
11.1 字符串构造
String类提供的构造方法很多,常用的就有以下三种
public static void main(String[] args){
//使用常量串构造
String s1="hello bite";
system.out.println(s1);
//直接newString对象
String s2=newString("hello bite");
system.out.println(s2);
//使用字符串数组进行构造
char[] array={'h','e','l','l','o','b','i','t','e'};
String s3=new String(array);
system.out.println(s3);
}
11.2 字符串拆分
可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串
String[] split(String regex) 将字符串全部拆分
String[] split(String regex,int limit) 将字符串以指定的格式,拆分为limit组
public static void main(String[] args){
String str="hello world hello bite";
String[] ret=str.split(" ");//一个空格
for(int i=0;i<ret.lengh;i++){
system.out.println(ret[i]);
}
}
//注意事项
//1.字符"|","*","+"都得加上转义字符,前面加上"\\"
//2.而如果是"\\",那么就得写成"\\\\"
//3.如果一个字符串中有多个分隔符,可以用"|"作为连字符
11.3 字符串截取
从一个完整的字符串之中截取出部分内容
String substring(int beginIndex); 从指定索引截取到结尾
String substring(int beginIndex,int endIndex); 截取部分内容
例:
String str="helloworld";
System.out.println(str.substring(5));
System.out.println(str.substring(0,5));
注:
- 索引从0开始
- 注意前闭后开区间的写法,substring(0,5)表示0号下标的字符,不包含5号下标