在后面这几天主要对Java语言的面向对象编程技术进行学习,包括对Java类,对象,接口,包的等重要概念及其应用。Java编程的主要任务是定义Java类和创建对象。
类的概念与定义
类是具有相同属性和服务的一组对象的集合。
类:类是一个模板,它描述一类对象的行为和状态。
对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状 态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
类的定义:
class 类名
{
成员变量;//有什么特征及属性
成员方法;//做些什么
}
实例:
class EmpInfo
{
//成员变量
String name;
String designation;
String department;
//成员方法
void print(){
System.out.println(name+"is"+designation+"at"+department);
}
}
2.类的声明
类在使用前,必须先声明,然后才可以声明变量,创建对象。
类的声明语法如下:
[标识符] class 类名[extends 父类名] [implements 类所实现的接口列表]{
//类的属性
//类的方法
}
标识符public,abstract,final说明了类的属性。
public:表明这个类可以在其他任何类中使用。
abstract:表明这个类是抽象类,不能被实例化。
final:表明这个类不能被继承,既没有子类。
实例:
public class Person {
//类的成员变量可以先声明,不用初始化,类成员变量是有默认值
public String name; //姓名,String的默认值是null
private int age; //年龄,int的默认值是0
public static String sex = "男"; //静态类变量-后面详解
/**
*行为,方法,也叫函数
*方法的名称如果是多个单词,首个的单词的首字母小写,其他的单词首字母大写,这样就像一个驼峰一样,所 *以叫驼峰命名法
*/
public void showName(){
System.out.println("姓名:" + name);
getAge(); //同一个类中,所有的方法可以直接互相调用,不用new去实例化对象
}
//有返回值的函数
public int getAge(){
return age;
}
}
public class People {
public static void main(String[] args){
//实例化Person类,也就是创建Person对象
Person person = new Person();
//声明一个Person类型的变量,变量名person,实例化Person类并且给person赋值,赋值的值就是当前的实例
person.name = "张三"; //给person对象的name属性赋值
person.showName(); //对象的方法的调用
int i = person.getAge();
System.out.println(i);
person.age = 11; //给person对象的age属性赋值
int a = person.getAge();
System.out.println(a);
}
}
//注:如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰.
如何编写类?
在Java中,类就是对现实生活中的类的描述,描述生活中类其实就是描述这一类事物的属性和行为,根据类的定义,我们可以定义一个人类,人类就具备了一定的外在的表现形式(属性)和内在的功能(行为):
外在的表现形式(属性):姓名、性别、身高、体重、籍贯等;通过成员变量来实现
内在的功能(行为):吃饭、睡觉、打豆豆、买烟等;通过方法来实现的
注意:刚开始接触面向对象,成员变量和方法都是非static静态修饰的,后面的内容会单独讲解static静态用法
public class Person{
/*外在的表现形式字段属性*/
String name="张三";
char gender='男';
int age=18;
/*内在的功能方法*/
public void eat(){
System.out.println("吃饭了");
}
public void sleep(){
System.out.println("睡觉了");
}
}
ii.如何编写对象?
在Java中通过new关键词来产生当前类的一个具体的实例、对象
public class PersonTest{
public static void main(String[] args){
//1:创建一个Person对象
Person zs=new Person();
zs.eat();
System.out.println(zs.name);
}
}
注意事项: 类是一个引用类型,我们定义的所有的类都是一个自定义的数据类型,这些数据类型都是引用类型。
凡是引用类型在创建对象时必须通过使用关键词来创建。
创建方式:
类型名称 变量名=new 类型名称();
使用对象属性:对象名.成员变量
使用对象方法:对象名.方法名
同一个类的每一个对象有不同的成员变量的存储空间
同一个类的每个对象共享该类的方法
iii.对象和类的内存分析
案例分析如下:
public class Dog{
/*成员变量对象中抽取出来外部的表现形式(属性)*/
String color;
int age;
String nickName;
/*成员方法对象中抽取出来内部的功能(行为)*/
public void eat(){
System.out.println("小狗在吃饭");
}
public void shout(){
System.out.println("小狗在叫");
}
}
public class DogTest{
public static void main(String[] args){
//创建一个Dog对象
Dog d=new Dog();
//调用对象的功能
d.eat();//对象.可以翻译为的,就是d对象的eat方法
int age=d.age;
System.out.println(age);
}
}
public claas Demo01{
//成员变量
String name;
int age;
//成员方法
public void point(String place){
System.out.println("我在"+place+"睡觉");
}
}
public class DemoTest01{
public static void main(String[] args){
//创建一个a对象
Demo01 a=new Demo01();
//调用对象的属性并重新赋值
a.name="张山";
a.age=14;
//调动对象的方法并传入值
a.point("沙发");
//创建一个b对象
Demo01 b=new Demo01();
//调用对象的属性并重新赋值
b.name="李四";
b.age=15;
//调动对象的方法并传入值
b.point("床上");
System.out.println(a.name);//结果:张山
System.out.println(a.age);//结果:14
System.out.println(b.name);//结果:李四
System.out.println(b.age);//结果:15
}
}
实例:
创建一个对象
/**
* 这是一个对象:人
*/
public class Person {
// 对象的属性
private String name;
private int age;
private char sex;
// 对象的方法(功能)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
void eat(){
System.out.println("吃东西");
}
void run(){
System.out.println("跑步");
}
}
使用一个对象
public class TestPerson {
public static void main(String[] args) {
// 创建对象
Person2 person2 = new Person2();
// 调用对象给属性赋值
person2.setName("jack");
// 用对象调用方法
person2.run();
}
}
this关键字的使用
this关键字表示对象本身。
this关键字主要使用在下面三种情况:
1.解决局部变量与成员变量同名的问题;
2.解决方法参数与成员变量同名的问题;
3.用来调用该类的另一个构造方法。
特别注意:Java语言规定,this关键字只能用在非static方法(实例方法和构造方法中),不能用在static方法中。
一、局部变量与成员变量同名,此时局部变量会隐藏成员变量
public Employee(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
二、方法参数与成员变量同名
public void setName(String name) {
this.name = name;
}
三、用来调用该类的另一个构造方法
public Employee() {
this("李明",25,3000);
}
注意:前提条件是:在同一个类中一个构造方法调用另一个构造方法。 如果在构造方法中调用了另一个构造方法,则this语句必须是第一条语句。