java(5)面向对象(第一天)
声明:由于学习所用环境为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());
}
}