(一)数组

  • 数组:可以存储多个元素并且多个元素是 同一种类型的容器

    数组的 定义: 数据类型[] 数组名; 数据类型 数组名[];

    举例: int[] a; 定义了一个int类型的数组变量a int a[] ; 定义了一个int类型 变量a数组

    这两种方式的定义:虽然写法不一样,并且读法不一样,但是表达的效果一样,都是在定义一个数组,推荐使用第一种方式;

    数组的初始化: 1)动态初始化: 给数组指定长度,数组中的元素值由系统默认给定 2)静态初始化: 给定数组中元素的值,数组的长度由系统给定;

    动态初始化: 数据类型[] 数组名 = new 数据类型[数组长度] ;

静态初始化: 指定数组的元素,长度由系统给定 定义个数: 原始格式: 数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3....} ; 简写方式: 数据类型[] 数组名称= {元素1,元素2,元素3..} ;

注意:数组中经常会出现的异常:
ArrayIndexOutOfBoundsException:数组角标越界异常
			出现的原因:访问了数组中不存在的索引值;
			解决方案:观察数组中到底有索引值到多少;  数组长度-1
NullPointerException:空指针异常 (在实际开发中该异常是最多的)
				出现的原因:对象为null,而开发者还要去使用对象,就会出现问题
			解决方案:给某个对象进行非空判断,防止程序程序空指针异常

(二)面向对象

1、讲面向对象之前: 面向过程: 假设有一个需求:求数组中的最大值; 定义一个数组,静态初始化---->定义一个参照物---->遍历.... 给一个需求,对需求分析,然后一步一步进行操作,最终得到某一个结果,整个过程都是自己在完成....

面向对象的思想概述: 思想的特征: 1)面向对象更符合我们的生活中的行为思想习惯 2)面向对象将我们从执行者变成了指挥者,指挥对象做事情 3)面向对象简单性体现在这里:让我们事情从复杂性--->简单化

	举例:
		洗衣服:
			面向过程:脱下脏衣服--->放到一个盆里面--->加水,洗衣液---->泡一泡--->搓一搓---->拧一拧----->
		晾一晾
			面向对象:脱下脏衣服--->放到一个全自动洗衣机中--->一键---->晾一晾
			
		炒菜:
			面向过程:买菜--->摘菜--->洗菜--->切菜--->炒菜--->出锅
			面向对象:找一个对象..--->出锅...

举例: 把大象装进冰箱

	1)装大象的方法in()
	2)开冰箱门:open()
	3)关闭冰箱门:close()
		面向过程:
		class Test{
			
			main(..){
				//分别调用三个方法
				open();
				in();
				close();
			}
			
			
			//开冰箱门
			public static void open(){
				System.out.println("开冰箱门...") ;
			}
			//装大象
			public static void in(){
				System.out.println("把大象塞进冰箱") ;
			}
			
			//关闭冰箱门
			public static void close(){
				System.out.println("开冰箱门...") ;
			}
		}
		
面向对象:
		把大象装进冰箱 :   名词提取法:  大象类,冰箱类,测试类
		
		class 大象类{
			public static void in(){
				System.out.println("把大象塞进冰箱") ;
			}
		}
		
		class 冰箱类{
			public static void open(){
				System.out.println("开冰箱门...") ;
			}
			
			public  static  void close(){
				System.out.println("开冰箱门...") ;
			}
		}
	
		class Test{
			main(){
			
			
				类名.方法名() ;
				大象类.in() ;
				冰箱类.open();
				并迅雷.close() ;
		
			}
		}

面向对象的三大特征: 封装 继承 多态 向对象语言中现实世界的事物在代码中如何体现的{

学生
	属性:姓名 年龄 性别 ...学号
	行为:学习,打游戏....

学生现实世界的事物------>代码 学生类:Student 属性:属性:姓名 年龄 性别 ...学号 成员变量:name,age,sex... 行为:学习,打游戏.... 成员方法:study(),playGame();

总结:
		面向对象
				:将事物看成XX类,将事物对应的属性--->看成这个类的成员变量
					将事物对应的行为----->看成这个类的成员方法

描述一个学生事物, 属性:姓名,年龄,性别,学号 行为:学习

在Java中,创建对象:new对象 **类名 对象名 = new 类名() ; ** public class Student {

//成员变量
String name ;
int age ;
String gender ;
int Id ;


//成员方法:学习的方法
//先去掉static
public void study() {
	System.out.println("学生在学习Java.....") ;
}

} }

public class StudentTest {

public static void main(String[] args) {
	
	//创建一个学生对象

// 格式: 类名 对象名 = new 类名() ; Student s = new Student() ; //System.out.println(s);//org.westos.oop.Student@70dea4e 包名.类名@(地址值标记)16进制数据 System.out.println("学生的姓名是:"+s.name+",年龄是:"+s.age+",性别是:"+s.gender+",学号是:"+s.Id);

	//给学生对象进行赋值
	s.name = "张三" ;
	s.age = 21 ;
	s.gender = "男" ;
	s.Id = 007 ;
	System.out.println("学生的姓名是:"+s.name+",年龄是:"+s.age+",性别是:"+s.gender+",学号是:"+s.Id);
	
	//调用Student类中的成员方法
	//对象名.成员方法名() ;
	s.study(); 
	
	
}

} 2、匿名对象 就是创建对象的时候,没有名字的对象 例如: 创建一个有名字的学生类对象 Student s = new Student() ;//该对象名s 匿名对象(开发中经常使用),没有名字的对象 new Student().name = "赵又廷" ; 匿名对象在实际开发中,只用使用一次,不要使用多次 (可能会造成一个内存溢出的现象); new Student() ; //一直给堆内存开辟空间 3、形式参数 形式参数的问题: 如果是基本数据类型,形式参的改变对实际参数没有影响 研究引用类型:形式参数的改变会直接影响实际参数 例如: class Demo{

//求和的成员方法
public int sum(int a,int b) { //形式参数是基本类型  :
	return a+b ;
}

}

//一个学生类 class Student{ public void show() { System.out.println("好好学习,天天向上...."); } }

class StudentDemo{ //method方法中形式参数是一个引用类型:需要的是学生类对象 Student s = new Student () ; public void method(Student s) {//形式参数现在引用类型
s.show(); } }

//测试类 public class ArgsTest {

public static void main(String[] args) {
	//创建Demo类对象
	Demo d = new Demo() ;
	System.out.println(d.sum(10, 20)) ;
	System.out.println("-------------------------");
	
	//需求:调用StudentDemo中的method方法:如何调用
	//1)创建StudentDemo类对象
	StudentDemo sd = new StudentDemo() ;
	//2)形式参数是Student类型,所以创建Student类的对象
	Student s = new Student() ;
	sd.method(s);
	
}

} 4、private关键字 private的用法: 1)被private修饰的只能在本类中访问 2)可以通过公共的访问public 去间接访问

当成员变量和局部变量一致时,遵循就近原则。
列如:
class Phone{
//私有修饰
		private String brand ;
		private int price ;
		private String color ;

//成员方法
//提供公共的访问方法
public void setBrand(String brand) {
		brand = brand ;
}

//获取手机品牌
public String getBrand() {
		return brand ;
}

public void setPrice(int p) {
	price = p ;
}
public int getPrice() {
	return price ;
}

public void setColor(String c) {
	color = c ;
}
public String getColor() {
	return color ;
}

}

//测试类 public class PhoneDemo {

public static void main(String[] args) {
	
	//创建手机类对象
	Phone p = new Phone() ;

// p.brand = "" ; 已经被私有化了 // System.out.println(p.brand+"----"+p.price+"---"+p.color); p.setBrand("小米"); p.setPrice(1699); p.setColor("黑色"); System.out.println(p.getBrand()+"---"+p.getPrice()+"----"+p.getColor());

}

} 成员变量:姓名和年龄 测试这个学生类

分析: 刚才通过下面代码给学生的年龄赋值了一个不合理的数据,而这种不合理的数据依然可以被输出出来,有问题! 解决方案? 在Student类中提供一个针对年龄的判断的一个方法

	虽然提供了这一个方法,但是成员变量在测试类中永远被访问到,针对这种情况:Java提供了关键字:private:私有的

private:体现的也是一种封装思想 封装: 标准类的写法,将成员变量全部私有化,被private修饰的成员变量只能在本类中访问,可以通过公共的访问方法去访问成员变量 5、构造方法以及创建对象的过程 一个标准类的写法: 学生类 成员变量:姓名,年龄,性别 成员方法:set/getXXX() 学习,睡觉...

构造方法:
			无参构造:
			有参构造

一个标准手机类的写法: class Student{ //成员变量 private String name ; private int age ; private char gender ;

//无参构造方法
public Student() {}

//有参构造
public Student(String name,int age,char gender) {
	this.name = name ;
	this.age = age ;
	this.gender = gender ;
}

//setXXX/getXXX()方法
public void setName(String name) {
	this.name = name ;
}
public String getName() {
	return name ;
}
public void setAge(int age) {
	this.age= age;
}
public int getAge() {
	return age ;
}

public void setGender(char gender) {
	this.gender= gender ;
}
public char getGender() {
	return gender ;
}

//学习
public void study() {
	System.out.println("学生在学习...");
}
public void sleep() {
	System.out.println("学生困了,就需要睡觉...");
}

}

//测试类 public class StudentDemo { public static void main(String[] args) {

	//方式1:创建学生类对象
	//无参构造+set/getXXX()相结合的方式
	Student s = new Student() ;
	s.setName("高圆圆");
	s.setAge(28);
	s.setGender('女');
	System.out.println(s.getName()+"----"+s.getAge()+"---"+s.getGender());
	System.out.println("----------------------------");
	
	//方式2:直接通过有参构造形式
	Student s2 = new Student("高圆圆", 27, '女') ;
	System.out.println(s2.getName()+"----"+s2.getAge()+"---"+s2.getGender());
	
}

} 6、static关键字 (1) 定义一个人类 成员变量:姓名 年龄 国籍 创建了三个Person对象,每一个对象的国籍都是中国,值是重复的,这样的话在堆内存中比较浪费内存空间,不好 针对这种情况,多个对象对同一个变量进行共享,这个时候Java提供了一个关键字---static: 静态的(共享的) 在方法区中:开辟一个静态区域: 都是静态标记 (2) 关于static关键字:

	1)静态随着类的加载而加载
	2)static优先于对象存在
		回想:main  public static void main(..){...}
	
	3)static共享数据,可以被多个对象进行共享
		举例:	饮水机(staticd的:共享的)
				水杯(不能共享的...)
	4)如果数据被静态修饰的,它可以被类名直接调用
				被静态修饰的方法:	类名.方法名()
				被静态修饰的变量:	类名.变量名;

(3)static用法: 一个类中可有静态变量,也可以有非静态 可以有静态成员方法,也可以非静态的成员方法 静态的方法只能访问静态变量,或者是静态的方法 非静态的方法,既可以访问静态变量也可以非静态的变量...

			简单记:静态只能访问静态

7、this关键字 定义变量,方法,类,接口,做到见名知意 在手机类中的公共的访问方法中,对应局部变量名称应该做到见名知意 虽然做到见名知意了,但是局部变量将成员变量可以隐藏掉,Java提供一个关键字:this this:代表是当前类对象,或者是(当前类对象的引用),解决局部隐藏了成员变量 例如: class Phone{

//私有修饰
private String brand ;
private int price ;
private String color ;

//成员方法
//提供公共的访问方法
public void setBrand(String brand) {

// brand = brand ; this.brand = brand; }

//获取手机品牌
public String getBrand() {
	return brand ;
}

public void setPrice(int price) {

// price = price ; this.price = price ; } public int getPrice() { return price ; }

public void setColor(String color) {
	//color = color ;
	this.color = color ;
}
public String getColor() {
	return color ;
}

}

//测试类 public class Test {

public static void main(String[] args) {
	
	//创建手机类对象
	Phone p = new Phone() ;
	p.setBrand("华为");
	p.setPrice(1999); 
	p.setColor("黑白");
	
	System.out.println(p.getBrand()+"---"+p.getPrice()+"----"+p.getColor());
	System.out.println("-----------------------");
	
	Student s = new Student() ;
	s.setName("高圆圆");
	s.setAge(28); 
	s.setsId("xx002");
	s.setGender('女');
	s.setTitle("学习委员");
	
	System.out.println(s.getName() + "----" + s.getAge() + "----" + s.getsId() + "----" + s.getGender() + "----"
			+ s.getTitle());
}

} 8、类的组成中有一个成员:成员方法 成员方法的分类: 1)按照返回值划分 void的形式:没有具体的返回值 非void形式:有具体返回值 2)按照参数进行划分 空参 有参 //创建一个学生类 class Student {

private String name ;
private String age ;

public Student() { //alt+shift+s+c
}

//成员方法
public String show() { //有返回值没有参数的
	return "helloworld" ;
}


//没有返回值,有参数的情况
public void method(String s) {
	System.out.println(s);
}

//没有返回值,没有参数的情况
public void function() {
	System.out.println("function student...");
}

//有返回值,有参数的情况
public String function2(String s1,String s2) {
	return s1+ s2;
}

}

//测试类 public class Test {

public static void main(String[] args) {

	//创建学生类对象
	Student s = new Student() ;
	
	String str = s.show() ;
	System.out.println(str);
	s.method("Java");
	s.function();
	String str2 = s.function2("hello", "world") ;
	System.out.println(str2);
	
}

} 9、构造方法 构造方法作用: 就是给对象进行进行初始化 构造方法也属于一类的组成: 成员变量 构造方法 成员方法 构造方法: 1)方法名和类名相同 2)构造方法,连void都没有 构造方法的注意事项: 1)之前没有写无参构造,系统会默认提供无参构造 2)如果我们无参构造或者有参构造,系统不会在提供无参构造;定义一个类的时候,永远给出无参构造; 构造方法是可以重载的: