⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java3.txt

📁 达内IT培训Core Java全部笔记 是学习Java编程的好东西
💻 TXT
字号:
sd 0804 Javaday3   2008年6月12日类和对象

类:同一类事物的抽象,概念上的定义
万事万物皆是对象

写程序的时候,写的是类,用的是对象

类包括特征(属性),行为(方法),抽象
对象的特征和行为是具体的

由类到对象的过程
new+构造
构造的用处就是为了创建对象


package xx.xx	可没有或只能有一个
			//全小写,分目录class

import xxx.xx 可以有多个
		导入其他包的类库,一定要从CLASSPATH导入

public class 类名(类体)		//类名要求所有单词首字母都要大写
public 只能有一个,可以没有

类体中只能放:
1.属性
2.方法
3.构造
4.语句块
5.内部类

类体里不能放语句


类体中的属性:
	属性的格式:
		[修饰符]	类型	属性名	[=默认值];
	//属性名首字母小写,其他单词首字母大写


	方法的格式:
		[修饰符]	返回类型	方法名([参数列表])[抛出异常]{方法体}
	//方法名也是首字母小写,其他单词首字母大写

	
	构造的格式:
		[修饰符]	类名([参数列表])[抛出异常]{构造体}
		//默认构造有1到n个,类名要求所有首字母大写

	常量:所有单词都大写

get读set写
---------------------------------------------------------------------------------------------
package com.tarena.day03;	//0-1次
//import xx.xx		//0-n次

public class TestThis {	//class 1-n次,但public只能有一次
	private int age;		//成员变量
	public int getAge(){	//方法可以有0-n次
		return age;	//对应返回
	}
	public void setAge(int age){
		this.age = age;	//This.代表成员,不写代表局部
		
	}
	public static void main(String[] args) {
		TestThis tt = new TestThis();	//系统默认的构造,获得对象
		tt.setAge(20);

	}

}
---------------------------------------------------------------------------------------------		


封装:
1.保护数据的有效性,在封装过程中对数据进行有效性检查
2.并且隐藏类的实现细节
3.统一的访问方式
4.增强性能

属性private
提供public 方法操作属性
---------------------------------------------------------------------------------------------
package com.tarena.day03;

public class Person {
	private String name;	//name的默认值是null
	private int age;		//age的默认值0
	{
		System.out.println("{Person}");
	}
	public Person(){			//最好写上无参的构造
		System.out.println("Person");
	}
	public Person(int age){
		//实际上有super(); 但效果等于不执行,因为父类是Object
		System.out.println("Person age");
		//this.age = age;	//违背封装
		this.setAge(age);
	}
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}
	public void setAge(int age){
		if(age<=0 || age>130){
			System.out.println("age error");
		}else{
			this.age = age;
			System.out.println(this.age);
		}
	}
	public int getAge(){
			return age;	//可以写this.age
	}
}
	
class Test{
	public static void main(String[] args) {
		Person p = new Person();
		p.setAge(20);
		p.setName("苏三");

	}
---------------------------------------------------------------------------------------------



boolean 默认值是false
所有数字默认都是0,只是精度不同
char 的默认值是'\u0000'

引用类型:	所有的引用类型的默认是null
类 class
接口 interface
数组 

int i = 10;	//基本类型,不是对象
Person p = new Person();	//创建对象

在内存中,有栈,堆,池(常驻内存),代码段(保存方法)
new 是在堆里申请空间

**在Java中所有的参数传递都是值传递,所有的形参都有副本
---------------------------------------------------------------------------------------------
package com.tarena.day03;

public class TestValue {
		public void test(int i){	//值传递,所有形参都有副本
			i = i/2;
			System.out.println(i);	//打印的是副本i,所以是5,方法执行完这个 副本会消失
		}
		public void test(Person p){
			p = null;
			p.setName("Deng");
		}
	public static void main(String[] args) {
		TestValue tv = new TestValue();
		int i = 10;
		tv.test(i);
		System.out.println(i);		//还是10
	}
}
输出结果:
5
10
---------------------------------------------------------------------------------------------

重载:
相同方法名
参数类型必须不同,参数个数也可以不同
返回值可以不同,但最好定义相同的返回类型

步骤:
new+构造(堆)
1.申请空间
2.初始化
3.执行构造


顺序:
1.属性初始化
2.执行语句块
3.构造代码执行
---------------------------------------------------------------------------------------------
package com.tarena.day03;

public class TestInit {
		private int state1 = 1;//1
		{//2
			System.out.println("{}:"+state1);
			state1 = 3;
		}
		public TestInit(){//3
			System.out.println("con:"+state1);
			state1 = 2;
		}
		public static void main (String[] args){
			TestInit ti = new TestInit();
			System.out.println(ti.state1);
		}
}
输出结果:
{}:1
con:3
2
---------------------------------------------------------------------------------------------

构造重载:
1.只要写2个以上的构造,就会构成重载(自动),需要不同类型和数量的参数
2.不写构造,系统会默认一个无参的构造
3.如果写了构造,系统就不会有默认构造


继承:
继承在逻辑上有 is a 关系
子类is a 父类,	如:学生 是 人
子类可以复用父类的代码
继承是类多态的前提条件


在Java中的继承跟C++不同:
要有extends 关键字,目前讲的是类与类的继承,还有接口继承
public class Manager extends Employee
一个类只能有一个直接父类/基类/超类

类中的属性,方法都可以被继承,构造不能被继承
私有的方法继承不过来,私有属性可以继承过来

在new 一个子类的时候父类的构造会被调用,一种是显式调用,一种是隐式调用父类无参

java.lang.object是所有类的父类,如果没有关键字 extends 那该类的默认父类就是java.lang.object
new 子类的时候会依次调用直接父类的构造,直到object位置
---------------------------------------------------------------------------------------------
package com.tarena.day03;

public class Student extends Person{
		private int id = 1;
		{
			System.out.println("{Student}");
		}
		public Student(){
			super(6);	//显式调用父类有参构造
			System.out.println("Student");
		}
		public Student(int i){
			this();	//调用本类的无参构造,this()只能在第一行
			System.out.println("Student int");
		}
		public void setId(int id){
			this.id = id;
		}
		public int getId(){
			return id;
		}
	public static void main(String[] args) {
		Student s1 = new Student();	//调用父类的无参构造,如果父类定义了有参,那这个子类会报错
//		Student s2 = new Student(3);	//调用了子类的有参,隐式调用父类构造无参
		//s1.age = 5;	//age私有,被封装
		s1.getAge();	//Person
		s1.toString();	//object
		s1.getId();	//Student
	}

}
输出结果:
{Person}
Person age
{Student}
Student
Student int
---------------------------------------------------------------------------------------------

super:代表父类
this:代表子类
this. / super.		调用本类/父类的属性或方法,用法没有限制,可出现在构造中
this() / super()		调用本类/父类构造

this() / super()不能出现在方法里,这种方法只能出现在构造的第一行,所以在同一个构造里,this()或super()只能有一个

执行顺序:
1.先父后子
2.先找this(),再找super() 如果都有没有就会去找super()
3.先语句块,后构造


1.有this()就无super();
2.有super()	//显式
3.无super(),无this()	//隐式调用super()

完整封装:
1.属性private
2.提供public方法操作属性(set/get)
3.构造要调用方法,不要赋值

作业:
完成下面的代码
package com.tarena.day03;

public class TestRan {

	public static void main(String[] args) {
		Math.random();	//[0,1)的随机数
		int temp = (int)(Math.random()*36+1);	//[1,37)
		System.out.println(temp);
		//要求生成7个无重复的随机数
		int[] t = new int[7];
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -