java(5)面向对象(第一天)

来源:互联网 发布:远程登陆windows账号 编辑:程序博客网 时间:2024/05/03 19:06

声明:由于学习所用环境为JDK1.8,java所有代码均在JDK1.8的环境下测试通过,如果环境发生变化,可能会有错误!

一、什么是面向对象编程(OOP)

1、面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种编程思想,它将对象作为问解决问题的基本元素, 利用对象和对象之间的相互作用来设计程序。

面向对象思想把整个世界看成由各种对象来组成的。这些对象具有属性和行为(方法)。
个人总结:面向对象是一种编程思想。类是模板,是一个抽象的概念,描述一类对象的行为和状态。对象是具体的实体,由一组属性和行为(方法)组成。

2、面向对象思考问题的方式

(1)先考虑问题中涉及到的对象有哪些;

(2)对象有哪些属性和方法;

(3)对象之间有哪些联系。

二、类与对象

1、类:类是一个模板,它描述一类对象的行为和状态。类是一个抽象的概念。

2、对象:用来描述客观事物的一个实体,由一组属性和行为构成。对象是实体,也称为类的实例化。
三、类与对象的创建

1、定义类的语法:

[访问修饰符] class 类名{

    //属性和方法的声明

}

eg:public class Person {
    String name;        //姓名
    boolean sex;        //性别
    int age;                //年龄

    public void tread(){ 
        System.out.println(“四处走动…”);
    }
}

2、类中成员变量的定义
定义成员变量的语法:
 [访问修饰符]  数据类型  成员变量名 [= 初始值];
成员变量的类型可以使用Java语言中的任何一种数据类型(包括基本类型和引用类型)。在定义成员变量时可以对其进行初始化。如果不对其初始化,Java会使用默认的值对其进行初始化。成员变量的作用域是整个类体。
3、回顾-局部变量和成员变量

4、类中方法的定义

语法格式:

[访问修饰符] 返回值类型 方法名(形参列表){

 //方法的具体代码

}

5、对象的产生和使用

(1)使用new关键字调用类的构造方法就可以创建一个对象。

(2)构造方法:方法名与类名相同,没有返回值,并且不加void。

                      构造方法的作用在于构造并初始化对象。
                      每个类中都至少包含一个构造方法。
(3)构造方法的分类:有参构造方法和默认构造方法(无参构造方法)。

(4)默认构造方法

默认构造方法就是无参构造方法。java的类每个都必须有构造方法,如果没有定义构造方法,java编译器会提供一个默认的构造方法

eg:public class Dog{

     String name;

     int age;

    public void bark(){

   System.out.printIn("汪汪汪!");

}

public static void main(){

   Dog dog=new Dog();  //用new来调用该类的默认构造方法来创建对象

  dog.bark();

}

}

如果类中已经定义了构造方法,那么编译器将不再提供默认构造方法。

eg:public class Test {
    String name;
    String sex;
    int age;
    public void getTest(){
        System.out.println("输出:"+name+sex+age);
    }
    public Test(String name, String sex, int age) {
        super();
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    public static void main(String[] args) {
    Test test=new Test();  //编译报错,无参构造方法不存在
    }

}

(5)类的实例化内存结构图


通过上图可以看出:引用类型存放在栈内存中,而数据存放在堆内存中。

四、方法重载

方法重载:同一类中,方法名相同,参数列表不同(参数类型不同,参数顺序不同,参数个数不同)

eg:public class Person {
   String name;
   int age;
   String sex;
   public Person(){
       
   }
   
   public Person(String n,int a){
       name=n;
       age=a;
   }
   
   public Person(String n,int a,String s){
       name=n;
       age=a;
       sex=s;
   }
   
   public void say(){
       System.out.println("我叫"+name+",今年"+age+"岁了;性别:"+sex);
   }
   
}
五、栈

栈是一种可以实现"先进后出"的存储结构。

当栈为空时,栈顶指针top->-1;

入栈时,top指针先加1,再存入数据;

出栈时,先读数据,top指针减1;

eg:public class MyStack {
    int top;
    char[] a;
    int max;
    public MyStack(){
        
    }
    public MyStack(int m){
        max=m;
        top=-1;
        a=new char[max];
    }
    
    //入栈
    public void push(char c){
        if(isFull()){
            System.out.print("栈已满");
    }else{
        a[++top]=c;
        }
    }
    
    //出栈
    public char pop(){
        if(isEmpty()){
            System.out.print("栈已空");
            return (char)-1;
        }else {
            return a[top--];
        }
    }
    
    //判断栈是否为空
    public boolean isEmpty(){
        return top==-1;
    }
    
    //判断栈是否已满
    public boolean isFull(){
        return top==max-1;
    }
    
}

测试代码

public class TestStack {

    public static void main(String[] args) {
         String str="西安理工大学";
        MyStack stack=new MyStack(100);
       for (int i = 0; i < str.length(); i++) {
        stack.push(str.charAt(i));
    }
       System.out.print("反转后的字符:");
       while(!stack.isEmpty()){
          System.out.print(stack.pop());
       }
     
    }



原创粉丝点击