Java面向对象(一)

面向对象

什么是面向对象?面向对象与面向过程的区别是什么?

什么是面向对象?

面向对象,就是数据和数据的操作放到一个整体----对象,通过对象来实现某些操作

面向对象与面向过程的区别是什么?

面向过程是一步一步实现方法,从来实现某些操作。

它们两者自己的区别可以用一个大象放冰箱的例子。

 对于面向过程来说:

第一步:需要打开冰箱

第二步:人推大象进冰箱

第三步:关闭冰箱

对于面向对象来说:

大象作为一个对象(大象有走进冰箱方法)

冰箱作为一个对象(冰箱有打开和关闭方法)

从这里可以看出,每个对象是独立的,都拥有自己的功能,我们只需要专注于每个对象的功能

这样的模型更加适合人类的思维,想实现什么功能,直接生成对象调用对象的方法即可。

类和对象

类和对象的概述:

类:是一中抽象的概念,它是多种事物中的一种共性,比如:人这个类,汽车这个类,它们都只是概念

对象:是一个个独特的个体,它们都拥有自己独特的属性,方法

类与对象的区别:

类是对象的抽象概念,而对象是类的具体实现,所以类本身是不占用内存空间,而对象是一个具体的事物需要占用内存空间。

在开发中,只有先创建类,才可以实现对象。

类语法的定义:

[权限修饰符---public]   class  类名{
        //类中成员  
        //属性----变量
        //行为----方法
}

代码:

 1 public class Car {
 2     //声明姓名属性
 3     String name;
 4     //声明年龄
 5     int age;
 6 
 7     //行为方法
 8     public void show(){
 9         System.out.println("这是一个show()方法");
10     }
11 }

对象语法的定义:

类名   对象 = new 类名();

如何通过对象调用属性或方法:

//这样可以访问属性,也可以给属性赋值
对象名.属性

//调用方法
对象名.方法名(形参列表)

代码展示:

 1 public class Test {
 2     public static void main(String[] args) {
 3         Car car=new Car();
 4         //给属性赋值
 5         car.name="宝马";
 6         car.age=2;
 7         //调用方法
 8         car.show();
 9     }
10 }

封装

面向对象(oop)中三大特点封装继承多态

封装是对信息的隐藏,将类中的信息封装起来,只提供部分的方法给外部使用,这样可以提高类的安全性。

举个例子:

 1 public class Test {
 2     public static void main(String[] args) {
 3         Car car=new Car();
 4         //给属性赋值
 5         car.name="宝马";
 6         //如果没有封装,外界可以直接赋一些不合理的值如:
 7         //车龄怎么可能是-2,这个明显不太合理
 8         car.age=-2;
 9         //调用方法
10         car.show();
11     }
12 }

所以想让外界不能直接调用属性,这时需要使用private关键字。

例子:

Car类

 1 public class Car {
 2     //声明姓名属性
 3     private String name;
 4     //声明年龄
 5     private int age;
 6 
 7     //行为方法
 8     public void show(){
 9         System.out.println("这是一个show()方法");
10     }
11 }

Test类

 1 public class Test {
 2     public static void main(String[] args) {
 3         Car car=new Car();
 4         //给属性赋值
 5 //        car.name="宝马";  此时直接调用会报错
 6 //        car.age=-2;      此时直接调用会报错
 7         //调用方法
 8         car.show();
 9     }
10 }

但是我们要如何去给这些属性赋值,或如何调用访问这些属性呢?

就需要用到get/set方法的使用。

 1 public class Car {
 2     //声明姓名属性
 3     private String name;
 4     //声明年龄
 5     private int age;
 6 
 7     //行为方法
 8     public void show(){
 9         System.out.println("这是一个show()方法");
10     }
11     //getName方法获取name属性
12     public String getName() {
13         return name;
14     }
15     //setName方法设置name属性
16     public void setName(String name) {
17         this.name = name;
18     }
19     //getAge方法获取age属性
20     public int getAge() {
21         return age;
22     }
23     //setAge方法设置车龄
24     public void setAge(int age) {
25         this.age = age;
26     }
27 }

Test类

1 public class Test {
2     public static void main(String[] args) {
3         Car car=new Car();
4         //给属性赋值
5         car.setAge(2);
6         car.setName("宝马");
7         car.show();
8     }
9 }

访问修饰符

封装的访问修饰符有四种,分别为public、protected、缺省、private

①public:公共的。整个工程项目都能访问。

②protected:受保护的。被本包以及不同包下的子类访问。

③默认:被本包访问。

④private:私有的。本类访问。

它们作用的范围从大到小:public > protected > 缺省 > private

范围如下:

this关键字

每个类都有一个内置类对象-----this

使用场景:

 1 public class Car {
 2     //声明姓名属性
 3     private String name;
 4     //声明年龄
 5     private int age;
 6     public void show(){
 7         System.out.println(name+"的车龄:"+age);
 8     }
 9     //setName方法设置name属性,但是形参名与属性名一致时
10     public void setName(String name) {
11         name = name;
12     }
13     //setAge方法设置车龄,但是形参名与属性名一致时
14     public void setAge(int age) {
15         age = age;
16     }
17 }

Test类:

1 public class Test {
2     public static void main(String[] args) {
3         Car car=new Car();
4         //给属性赋值
5         car.setAge(2);
6         car.setName("宝马");
7         car.show();
8     }
9 }

效果展示:

 我明明通过set方法来设置车名和车龄了,为什么展示默认值呢?

 这里类里面的形参名与属性名一致,对于变量会存在就近原则第一个name会认为是形参那个name

所以name=name最终没有将形参内容赋值给属性,此时就需要用到this关键字

解决方法:

 1 public class Car {
 2     //声明姓名属性
 3     private String name;
 4     //声明年龄
 5     private int age;
 6     public void show(){
 7         System.out.println(name+"的车龄:"+age);
 8     }
 9     //setName方法设置name属性,但是形参名与属性名一致时
10     public void setName(String name) {
11         //使用this.属性名这样就可以选中类中的属性就可以进行真正的赋值操作
12         this.name = name;
13     }
14     //setAge方法设置车龄,但是形参名与属性名一致时
15     public void setAge(int age) {
16         //使用this.属性名这样就可以选中类中的属性就可以进行真正的赋值操作
17         this.age = age;
18     }
19 }

构造方法

 构造方法是用来创建对象时调用的方法,用于对象的实例化,对于有参构造方法可以在传入参数的同时对类成员的属性进行赋值。

它与其他普通的方法有所不同。

①方法名要与类名一致
②构造方法不能有返回类型

③如果没有显示的创建构造方法,jvm会自动提供一个无参的构造方法,如果创建构造方法后,jvm将不再提供无参的构造方法。

语法:

//这里的类名为Person
public class Person{

   修饰符   Person(形参列表){
             //代码内容;

   }
}

举个例子:

Person类:

 1 //Person类
 2 public class Person {
 3     private String name;
 4     private int age;
 5     //实现一个无参构造方法,类名要与方法名一致,无返回类型
 6     public Person(){
 7 
 8     }
 9     //实现一个有参构造方法
10     public Person(String name,int age){
11         this.name=name;
12         this.age=age;
13     }
14     public void show(){
15         System.out.println("我叫:"+name+"今年"+age);
16     }
17     public String getName() {
18         return name;
19     }
20 
21     public void setName(String name) {
22         this.name = name;
23     }
24 
25     public int getAge() {
26         return age;
27     }
28 
29     public void setAge(int age) {
30         this.age = age;
31     }
32 }

Test测试类:

 1 //Test测试类
 2 public class Test {
 3     public static void main(String[] args) {
 4         //通过无参构造方法实例化一个对象
 5         Person student=new Person();
 6         student.setName("张三");
 7         student.setAge(18);
 8         //并调用show()方法
 9         student.show();
10         //通过有参构造方法实例化一个对象
11         Person teacher=new Person("李四",27);
12         //并调用show()方法
13         teacher.show();
14     }
15 }

效果展示:

 String类

String类作为jdk种自带的一个类,它拥有许许多多的方法,提供程序员使用,这里我们将讲讲一些String类种常用的方法

在学习使用String类方法之前我们还需要学习如何创建一个String类

方法一:直接给String类赋值

语法: 
String 字符串名 = "字符串" String str ="qwe123rty";

方法二:使用new关键字实例化String类,并赋值

语法:
String   字符串名  = new   String("字符串");
String    str     = new   String("1quwie3ws");

String类常用的方法

①char charAt(int index):通过字符串索引值index查找到对应的字符(索引值的0开始

1 public class Test {
2     public static void main(String[] args) {
3         String str="Hello world";
4         char c = str.charAt(6);
5         System.out.println(c);
6     }
7 }

②boolean contains(String s):判断s是否包含在字符串中

1 public class Test {
2     public static void main(String[] args) {
3         String str="Hello world";
4         boolean b = str.contains("worlds");
5         System.out.println("是否包含指定字符串:"+b);
6     }
7 }

③boolean endsWith(String suffix):判断字符串是否以suffix结尾

1 public class Test {
2     public static void main(String[] args) {
3         String str="Hello world";
4         boolean b = str.endsWith("world");
5         System.out.println("判断是否以指定的字符串结尾:"+b);
6     }
7 }

④boolean equals(Object anObject):判断字符串与anObject的值是否相等

1 public class Test {
2     public static void main(String[] args) {
3         String str="Hello world";
4         String s="Hello world";
5         boolean equals = str.equals(s);
6         System.out.println("两个字符串是否相同:"+equals);
7     }
8 }

⑤int indexOf(String str):查找字符串str第一次出现的索引位置如果没找到返回-1

1 public class Test {
2     public static void main(String[] args) {
3         String str="Hello world";
4         int i = str.indexOf("wo");
5         System.out.println("第一次出现的位置:"+i);
6     }
7 }

⑥int lastIndexOf(String str):查找字符串str最后一次出现的索引位置如果没找到返回-1

1 public class Test {
2     public static void main(String[] args) {
3         String str="Hello world";
4         int i = str.lastIndexOf("wo");
5         System.out.println("最后一次出现的位置:"+i);
6     }
7 }

⑦int length():获取字符串的长度,注意这是一个方法,不要与数组搞混了。

1 public class Test {
2     public static void main(String[] args) {
3         String str="Hello world";
4         int a = str.length();
5         System.out.println("字符串的长度:"+a);
6     }
7 }

⑧String replace(String oldChar, String newChar):将newChar替换oldChar,并重新返回一个字符串

1 public class Test {
2     public static void main(String[] args) {
3         String str="[Hello world world]";
4         String newStr = str.replace("[", "(").replace("]", ")");
5         System.out.println(newStr);
6     }
7 }

⑨String[] split(String regex):按照regex来分割字符串,并保存到数组中返回

 1 public class Test {
 2     public static void main(String[] args) {
 3         String str="Hello world world";
 4         String[] s = str.split(" ");
 5 
 6         for (String s1 : s) {
 7             System.out.println(s1);
 8         }
 9     }
10 }

⑩boolean startsWith(String prefix):判断字符串是否以prefix开头

1 public class Test {
2     public static void main(String[] args) {
3         String str="Hello world world]";
4         boolean b = str.startsWith("Hello");
5         System.out.println("是否以指定字符串开头:"+b);
6     }
7 }

⑪String substring(int beginIndex):在指定位置截取字符串

1 public class Test {
2     public static void main(String[] args) {
3         String str="Helloworld world]";
4         String substring = str.substring(3);
5         System.out.println(substring);
6     }
7 }

⑫String toUpperCase():将小写字母转成大写字母

1 public class Test {
2     public static void main(String[] args) {
3         String str="Helloworld world]";
4         String s = str.toUpperCase();
5         System.out.println(s);
6     }
7 }

⑬String toLowerCase() :把字符串转化为小写

1 public class Test {
2     public static void main(String[] args) {
3         String str="Helloworld world]";
4         String s = str.toLowerCase();
5         System.out.println(s);
6     }
7 }

⑭String trim():将字符串的前后空格删除

1 public class Test {
2     public static void main(String[] args) {
3         String str="      Helloworld    world]     ";
4         String trim = str.trim();
5         System.out.println(trim);
6     }
7 }

 

posted @ 2023-11-04 15:41  和哗  阅读(11)  评论(0编辑  收藏  举报