Java教程
Java面向对象
Java教程
数组
// 数组作为函数参数和函数返回值
public static int[] reverse(int[] list){
int[] result = new int[list.length];
for(int i = 0, j = result.length - 1; i < list.length; i++,j--)
result[j] = result[i];
return result;
}
int[] arr = new int[5]; //动态初始化
String[] arr1 = new String[]{
"Tom",
"Jerry",
"Jim"
};//静态初始化
// 二维数组
int[][] arr2 = new int[4][3];
int[][] arr3 = new int[][]{
{1,2,3},
{4,5,6},
{7,8,9}
};
//Arrays工具类的使用
// 1.判断数组是否相等
int[] arr4 = new int[]{1,2,3,4};
int[] arr5 = new int[]{1,2,3,4};
boolean isEquals = Arrays.equals(arr4, arr5);
System.out.println(isEquals);
// 2.数组生成字符串
System.out.println(Arrays.toString(arr4));
// 3.数组填充
int[] arr6 = new int[5];
Arrays.fill(arr6,10);//全填充
System.out.println(arr6[0]);
// 4.数组排序
Arrays.sort(arr2);
// 5.二分查找
int[] arr7 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
int index = Arrays.binarySearch(arr7, 34);
System.out.println(index);
数组常见错误
- 数组下标越界
- 空指针异常
int[] arr1 = new int[]{1, 2, 3};
arr1 = null;
System.out.println(arr1[0]);//空指针报错
int[][] arr2 = new int[4][0];
System.out.println(arr2[0]);//null
System.out.println(arr2[0][0]);//空指针报错
类,对象,属性和方法
类的定义
class Person {//类的定义
//属性
String name;
int age = 1;
boolean isMale;
//方法
public void eat(){
System.out.println("吃饭");
}
public void talk(String language){
System.out.println("人可以说"+language);
}
对象的创建
public static void main(String[] args) {
//创建对象
Person p1 = new Person();
//调用对象的属性
p1.name = "Tom";
p1.isMale = true;
System.out.println(p1.name);
//调用对象的方法
p1.eat();
p1.talk("English");
//方法的使用可以调用当前类的属性或方法
Person p2 = new Person();
//未赋值时,属性为默认值
System.out.println(p2.name);//null
System.out.println(p2.isMale);//false
//将 p1 保存对象的地址赋值给 p3,导致 p3 和 p1 指向同一个地址
Person p3 = p1;
System.out.println(p3.name);//Tom
p3.age = 10;
System.out.println(p1.age);//10
}
属性和局部变量的对比
相同点:
- 定义的格式相同:数据类型 变量名 = 变量值
- 都是先声明后使用
- 都有对应的作用域
不同点
-
声明的位置不同
属性:直接定义在类的一对中 局部变量:声明在方法内,方法形参内,代码块内,构造器形参,构造器内部变量
-
权限修饰符的不同
属性:可以在声明属性时,使用权限修饰符指明其权限。、 局部变量:不可以使用权限修饰符
-
默认初始化值有区别
属性:类的属性根据类型有对应的默认值 局部变量:没有初始化值
-
内存中加载的位置不同
属性:加载到堆空间中 局部变量:加载到栈空间
匿名对象
//匿名对象
//声明并一次性使用的对象
//用途:作为参数传入方法,简化参数传入
new Phone().sendEmail();
new Phone().playGame();
方法重载
// 同一个类中,允许存在一个以上的同名方法,只要参数个数不同,或者参数数据类型不同。
// 跟方法的权限修饰符,返回值类型,形参变量名无关
public void getSum(int i, int j) {
System.out.println(i + j);
}
public void getSum(String i, int j) {//重载
System.out.println(i + j);
}
public int getSum(int i, int j){//不是重载,报错
System.out.println(i + j);
}
可变参数
- 可变参数的格式:数据类型 ... 变量名
- 传入的参数可以是:0个,1个,2个 ...
- 可变参数与形参类型相同的数组之间不能共存
- 可变参数必须声明在末尾
- 一个方法最多声明一个可变形参
权限修饰符
- private 同一个类中可见
- default 同一个包中可见
- protected 同一个包中可见 + 不同包中的子类可见
- public 同一个项目中可见 修饰类只能使用 default 和 public
构造器 作用:创建对象,初始化属性
定义构造器的方法: 权限修饰符 类名(形参列表)
如果没有显式的定义类的构造器,系统默认提供一个空参的构造器 构造器不属于方法 可以定义多个构造器,彼此构成重载 如果用户自定义构造器,则程序不使用默认构造器
class Person{
String name;
int age;
public Person(String name,int age){
//code
}
}
this的使用 this 用来修饰属性 方法 构造器 来区分变量命名的冲突,通常情况下可以省略。
//在构造器中调用构造器
public Person(int age){
this.age = age;
}
public Person(String name, int age){
this(age);//调用形参为int的构造器
this.name = name
//构造器不能调用自身
//构造器内部,最多只能声明一个"this(形参列表)"来调用其他的构造器
}
封装
体现1.封装属性
private int legs;
public void setLegs(int legs) {
if (legs >= 0) {
this.legs = legs;
}
}
public int getLegs() {
return this.legs;
}
// 封装体现:将属性设置为私有,提供公有的方法来设置和获取属性。
MVC设计模式 将程序分为三个层次
- M:model 数据模型层
- C:control 控制层
- V:view 视图层
继承
多态
(全文完) (本文不定时更新) 以上内容只代表个人观点,如果对你有所帮助,点击这里给我一个小小的star
如果有任何问题欢迎随时联系我进行批评指正:2076577077@qq.com
我是gled fish, 点击这里来到我的博客网站:
尊重作者原创, 转载请注明作者和出处,请勿用于任何商业用途。