JAVA的面向对象
oop主要有三大特征:
1.封装
2.继承
3.多态
类和对象
1.类
类是对一组具有相同的属性和相同方法的事物。
2.对象
以面向对象的编程思想来看客观世界的话,客观世界是由事物组成的,每一个实际存在的事物都是一个对象。
在oop中对象是用来创建,类是对象的模板,对象是类的实例。
封装类
是现实世界中某人一类型事物的共同特征和相同行为,用Java语言模拟包装到一个程序单元中,并隐藏行为的实现过程。封装一个类就是根据实际应用从同一类型事物中抽象出相关的共同特征和行为。
访问控制符[修饰符]class 类名{
[属性声明]
[方法声明]
[构造器声明]
}
定义属性
在类的主体中,用来代表这个类型事物共有特征的结构,也可以把属性理解为类的某个具体特征
访问控制符[修饰符]数据类型 属性名[=值]
定义方法
方法在面向过程的编程语言中称作函数,它是一段代码的集合,用来实现某个特定的功能
访问控制符[修饰符]返回值类型 方法名(参数列表){
方法体
}
例
public class Person{
public String name;
private int age;
char gender='男';
//无返回值
public void speak(String word){
System.out.println(name+"说:"+word);//在方法中使用类的属性
//return
}
//有返回值的方法
public int add(int a,int b){
int c =a+b;
return c;
}
}
定义构造器
构造器也称构造方法 作用在于构建并初始化对象。
访问控制符构造方法名称(参数列表){
构造方法体
}
在语法中,访问控制符指构造方法被访问的权限;构造方法名称必须与类名相同;参数列表的语法格式和方法的参数列表的语法格式相同
public class Person{
public String name;
private int age;
char gender='男';
public Person(){
}
public Person(String n,int a,char g){
name =n;
age =a;
gender=g;
}
public void speak(String word){
System.out.println(name+"说:"+word);
}
public int add(int a,int b){
int c= a+b;
return c;
}
对象的创建与使用
创建一个对象的语法是使用new关键字来调用类的构造方法
new 构造方法(参数列表);
new Person();
new Person("z",26,'男',175.0,64.5);
属性的初始化
利用类来创建对象时,如果调用的构造方法没有显示地给某人属性的值,那么它会被自动赋为默认值:数字0,布尔值false,对象变量null。
Person person =new Person();
对象的使用
对象创建好之后,就可以拿来使用,使用对象的操作不外乎两种方式:引用对象的属性和引用对象的方法
1.引用属性
对象变量名.属性名
列:
Person.age=24;
char c=person.gender;
System.out.println(C);
引用方法
对象变量名.方法名(参数值列表)
person.speak();
String temp=person.info();
System.out.println(temp);
方法重载
方法重载是一种Java语法现象,指在一个类内部出现了多个方法名相同,但参数列表(参数类型,个数,顺序)不同的方法。
方法重载的作用是使功能相同,但参数不同的方法下采用相同的方法名称,便可以程序员使用。调用被重载的某个方法时,系统会根据参数表的不同,来选择对应的方法
public class Person{
private String name;
private int age;
private chargender;
public Person(String n,char g,int a){
name = n;
gender=g;
age =a;
}
public Person(){
}
public void speak(String word){
System.out.println(name+"说:"+word);
}
public void speak(){
System.out.println("无语")
}
public static void main(String[] ages){
Person person=new Person();
person.speak("你好");
person.speak();
}
}
}
递归方法
一个方法体内部调用到它自身,就是方法的递归。递归方法包含一种隐式的循环,它会重复执行某段代码,但这种重复执行却不需要用循环语句来完成。
public int factorial(int n){
int res=0;
res =factorial(n-1) *n;
return res;
}
this关键字
类的每个非静态方法(没有被static修饰)都会隐含一个this引用名称,它指向调用这个方法的对象。当在方法中使用本类的属性时,都会隐含地使用this名称,当然也可以明确指定。this可以看作是一个变量,它的值就是当前对象的引用,可以通过this关键字来显示访问类的成员。
//public 类的构造方法
public Person(String n,char g,int a)
{
name=n;
gender=g;
age=a;
}
//public 类的构造方法
public Person(String n,char g,int a)
{
this.name=n;
this.gender=g;
this.age=a;
}
this的真正作用在于解决成员变量与参数的模糊性,当局部变量(方法的参数或方法体中定义的变量)和成员变量(类的属性)重名时,可以显示地访问成员变量。
public Person(String name,char gender,int age){
this.name=name;
this.gender=gender;
this.age=age;
}
例子:
public class Person{
private String name;
private char gender;
private int age;
public Person(String name,char gender,int age){
this.name=name;
this.gender=gender;
this.age=age;
}
public Person(){
this("信息",'男',22);
}
public void speak(String word){
System.out.println(name+"说"+word);
}
public void speak(){
System.out.println("无语");
}
}
public static void main(String[] ages){
Person person=new Person();
person.speak("你好");
person.speak();
}
属性,参数和局部变量
属性,参数和局部变量都是数据的载体,它们在作用,使用方式和作用域都有所不同。
属性作为类的成员,经常被称为成员变量,它的作用是用来保存对象的属性值;定义在类的主体里,方法之外;它的作用域在类的主体里面,可以被本类的所有方法访问到。
参数作为方法的一部分,用来将输入值进行传递给方法,它定义在方法的名中,它只能在本方法内使用。
局部变量是定义在方法体内的一个临时变量,用来临时存储数据,它的作用域是从它声明的位置开始到本方法的结束为止。在其他方法中是不能访问到。
public class VariableScopeTest{
private String attr;
public void test(int a){
int b=a+100;
System.out.println(b);
}
}
JavaBean
JavaBean是一个可以重复使用的软件组件。实际上JavaBean是一种Java类,是通过封装属性和方法,成为具有某种功能或者处理某个业务的对象,简称Bean;
特点:
可以实现代码的重复使用
易编写,易维护,易使用
可以在任何安装Java运行环境的平台的使用,不需要重新编译。
public class JavaBeanTest{
private String name;
private int age;
public JavaBeanTest(){
}
public String getName(){
return name;
}
public void setName( String name){
this.name=name
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age
}
}
编译包
带有包的类的源代码,在编译成字节码时,不能直接用javac编译,需要带“-d”这个参数来编译。
--在当前目录下
javac -d . Studnet.java
--在指定目录下
javac -d D:\corejava\ch03 Studnet.java
jdk常用的包
java.lang:包含一些Java语言的核心类。
java.util:包含一些实用工具类
java.io:包含提供多种输入输出的类。
java.net:包含执行网络相关操作的类
java.sql包含java操作数据库的一些API。
java.text 包含一些用来处理文本,日期,数字等,
java.swing 包含构成“轻量级”窗口的组件。