JAVA 基础

1.`java.util.Arrays类包含了用来操作数组(比如排序和搜索)的各种方法。Arrays拥有一组static方法。
equals(数组1,数组2):比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
fill(数组名,填充的值):使用某个值填充array数组。
fill(数组名,开始下标,结束下标,填充的值):使用某个值填充array数组的某个部分。
sort(数组名):用来对array进行排序。
binarySearch(数组名,要查找的数据):在排好序的array中寻找元素。 只能用于已经排好序的数组,返回下标
toString(数组名):打印一个数组,格式:[元素值1,元素值2…]
copy(原数组,新数组的长度):复制数组,从下标为0的元素开始复制,复制n个元素。不够就默认值填充
copyOfRange(原数组,from,to):复制数组任意部分,从from到to(不包含)个元素
另:System.arraycopy(原数组,开始位置,目标数组,开始位置,长度):array的复制。
/*
练习:
1、从键盘输入本组学员的成绩,放到数组中
2、用foreach显示所有学员的成绩
3、排序:从低到高
4、查找是否有正好60分的,如果有返回位置
5、复制成绩最低三名构成新数组
6、用工具类打印成绩最低三名成绩
*/
import java.util.Scanner;
import java.util.Arrays;

class TestArraysExer{
public static void main(String[] args){
//1、声明一个数组并创建一个数组
int[] scores = new int[5];

	//2、从键盘输入成绩
	Scanner input = new Scanner(System.in);
	for(int i=0; i<scores.length; i++){
		//成绩存在数组的元素中
		//为元素赋值
		System.out.print("请输入第" + (i+1) + "个学员的成绩:");
		scores[i] = input.nextInt();
	}
	
	//3、显示成绩
	//用foreach显示所有学员的成绩
	System.out.println("本组学员的成绩如下:");
	for(int s : scores){
		System.out.println(s);
	}
	//4、排序:从低到高
	Arrays.sort(scores);
	
	System.out.println("排序后的结果:" + Arrays.toString(scores));
	
	//5、查找60分
	int index = Arrays.binarySearch(scores, 60);
	if(index<0){
		System.out.println("没有正好60分的");
	}else{
		System.out.println("60分的索引位置:" + index);
	}
	
	//6、复制成绩最低三名构成新数组
	//int[] newArray = Arrays.copyOfRange(scores, 0, 3);
	int[] newArray = Arrays.copyOf(scores,  3);
	
	//7、用工具类打印成绩最低三名成绩
	System.out.println("成绩最低的三名同学是:" +  Arrays.toString(newArray));
}

}`

二维数组的长度
二维数组的长度(通常指行数):数组名.length
每一行的列数:数组名[行标].length
//二维数组
int[][] array3;//推荐
int array4[][];
int[] array5[];

Student[][] all = new Student[4][];//4个小组
all[0]= new Student[4];//第一组4个人
all[1]= new Student[5];//第二组5个人
all[2]= new Student[6];//第三组6个人
all[3]= new Student[6];//第四组6个人

对象的创建
(1)声明引用变量来引用对象:数据类型 变量名;
例如:Teacher tea;
因为该变量是用来引用对象的,因此也称为对象名。
(2)为引用变量赋值一个对象: 变量名 = new 类名();
例如:tea = new Teacher(); //通过new 构造器()来创建对象
可以写成:Teacher tea = new Teacher();

在这里插入图片描述

总结:重载(Overload)与重写(Override)什么区别
(1)重载是在同一个类中,重写是子类与父类中
(2)重载与重写都要求方法的名称完全一致
(3)重载要求参数列表必须不同,重写要求参数列表必须相同
(4)重载和返回值类型无关,重写有很严格的要求

super.属性
如果子类有与父类同名的属性时,可以用super.属性明确表示是父类的属性。
super.方法
如果子类重写了父类的方法时,可以用super.方法明确调用父类被重写的方法
super()或super(实参列表)
super()显式调用父类的无参构造
super(实参列表)显示调用父类的有参构造

在这里插入图片描述

在这里插入图片描述
对于这种处于同一个继承层次中的对象,使用多态数组来存放是最为简便的方法之一。
Person[] person = {new Person(“张三”, 32),
new Student(“李四”, 21, 120, 90.0),
new Student(“王五”, 22, 119, 91.5),
new Teacher(“刘老师”, 35, 10, “Java EE”),
new Teacher(“张老师”, 11)};

class DoorMan{
	public void welcome(Person p){
		p.greet();
	}
}
class Person {
	public void greet(){
		System.out.println("鞠躬");
	}
}
class Chinese extends Person{
	public void greet(){
		System.out.println("你好");
	}
}
class Korean extends Person{
	public void greet(){
		System.out.println("안녕하세요");
	}
}
class Thai extends Person{
	public void greet(){
		System.out.println("สวัส");
	}
}
class American extends Person{
	public void greet(){
		System.out.println("welcome");
	}
}

在这里插入图片描述
但笔者认为只有三点比较明显。
(1)接口不一样,一个实现set,一个实现map.
(2)结构不一样,一个存键值对,一个 存对象。
(3)hashmap放的值可能相同,键不一样。hashset值不能相同,但由于hashcode是存在重复的,所以,存放的对象有可能相同。(这个最大大作用是警示我们不能用hashset来对对象去重,而应该用hashmap或者其他hash算法)

1、final修饰符
在Java中声明类、属性和方法时,可使用关键字final来修饰,表示“最终”。
final标记的类(太监类)不能被继承。提高安全性,提高程序的可读性。
String类、System类、StringBuffer类
final标记的方法不能被子类重写。
Object类中的getClass()。
final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只能被赋值一次。
final标记的成员变量必须在声明的同时或在每个构造方法中或代码块中显式赋值,然后才能使用。
final double PI=3.14;

switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上
在 Java 5 以前,switch(expr)中,expr 只能是 byte、short、char、int。从 Java5 开始,Java 中引入了枚举类型,expr 也可以是 enum 类型,从 Java 7 开始,expr 还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

原码:是最简单的机器数表示法。用最高位表示符号位,"1"表示负号,"0"表示正号。其他位存放该数的二进制的绝对值。
反码:正数的反码还是等于原码。负数的反码就是他的原码除符号位外,按位取反。
补码:正数的补码等于他的原码,负数的补码等于反码+1
1.<<(左移),>>(右移)皆属于位运算符.其运算比乘除快,所以我们可以用其优化代码。
2、<<表示左移,不分正负数,低位补0;
3、>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;

下面对static关键字进行一个小结:
(1)特点:
1、static是一个修饰符,用于修饰成员。(成员变量,成员函数)static修饰的成员变量 称之为静态变量或类变量。
2、static修饰的成员被所有的对象共享。
3、static优先于对象存在,因为static的成员随着类的加载就已经存在。
4、static修饰的成员多了一种调用方式,可以直接被类名所调用,(类名.静态成员)。
5、static修饰的数据是共享数据,对象中的存储的是特有的数据。
(2)成员变量和静态变量的区别:
1、生命周期的不同:
成员变量随着对象的创建而存在随着对象的回收而释放。
静态变量随着类的加载而存在随着类的消失而消失。
2、调用方式不同:
成员变量只能被对象调用。
静态变量可以被对象调用,也可以用类名调用。(推荐用类名调用)
3、别名不同:
成员变量也称为实例变量。
静态变量称为类变量。
4、数据存储位置不同:
成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
(3)静态使用时需要注意的事项:
1、静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)
2、静态方法中不可以使用this或者super关键字。
3、主函数是静态的
**怎么理解 “被类的实例对象所共享” 这句话呢?**就是说,一个类的静态成员,它是属于大伙的【大伙指的是这个类的多个对象实例,我们都知道一个类可以创建多个实例!】,所有的类对象共享的,不像成员变量是自个的【自个指的是这个类的单个实例对象】

多态的实现
Java实现多态有三个必要条件:继承、重写、向上转型。
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
只有满足了上述三个条件,我们才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。
对于Java而言,它多态的实现机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。

在这里插入图片描述

public class test1 {
public static void main(String[] args) {
String a = new String(“ab”); // a 为一个引用
String b = new String(“ab”); // b为另一个引用,对象的内容一样
String aa = “ab”; // 放在常量池中
String bb = “ab”; // 从常量池中查找
if (aa == bb) // true
System.out.println(“aabb");
if (a == b) // false,非同一对象
System.out.println("a
b”);
if (a.equals(b)) // true
System.out.println(“aEQb”);
if (42 == 42.0) { // true
System.out.println(“true”);
}
}
}

值传递和引用传递有什么区别
值传递:指的是在方法调用时,传递的参数是按值的拷贝传递,传递的是值的拷贝,也就是说传递后就互不相关了。
引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// StringBuffer reverse
StringBuffer stringBuffer = new StringBuffer();
stringBuffer. append("abcdefg");
System. out. println(stringBuffer. reverse()); // gfedcba
// StringBuilder reverse
StringBuilder stringBuilder = new StringBuilder();
stringBuilder. append("abcdefg");
System. out. println(stringBuilder. reverse()); // gfedcba

String 类的常用方法都有那些?
indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串的 byte 类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
equals():字符串比较。

集合:

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读