day06java基础学习笔记

     2022-03-15     749

关键词:

面向对象

当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始改进,能不能把这些步骤和功能再进行封装,封装时根据不同的功能,进行不同的封装,功能类似的,或者有关联关系的封装在一起,这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。

比如,有如下三个人,每个人都有自己的功能:使用伪码体现

    张三{
       Public void  部署程序(){
            System.out.println("部署java程序");
       }
    }

    李四{
       Public  void 写代码(){
            System.out.println("写java代码")
       }
    }

    老板{
        Public static void main(String[] args){
            李四.写代码();
            张三.部署程序 ();
            ...
        }
    }

从以上的概述可以得出这样的结论:

  • 面向过程:强调的是过程,每个过程及实施都要自己一步一步去实施,考虑的事情比较多

例:首先学习Java语法,然后编写Java程序,然后编译,运行其中的每个细节都要自己去实施;

  • 面向对象:强调的是对象,需要某些功能的时候,去找具有这样功能的对象,然后由对象去调用功能

例:知道张三会写Java程序,去找张三,让张三写程序,把结果交给我只需要找人去干活,然后等待结果即可。

面向对象思想的特点

  • 是一种更符合我们思想习惯的思想
  • 可以把事情更加简单化,不必考虑事情的每一个细节,只在宏观把握
  • 将我们从执行者变成了指挥者

类和对象

  • 对象:可以理解成具有某些功能的综合体
  • 类:同一种事物的抽象,将他们的共同属性和行为抽象出来
面向对象的编程过程:实际上就是不断的编写各种“类”,然后利用类去创建对象,再使用对象,指挥对象完成功能
  • Java中的类:

有成员变量对这个类的属性进行描述;有成员方法对这个类的行为进行模拟。

成员变量 -- 类的属性

成员方法 -- 类的功能

总结Java中的类和对象

  • 类:一组相关的变量和方法的结合,是一个抽象的概念
  • 对象:是类实例化创建出来的,是“类”这个概念的具体表现形式
举例
  • 学生(类):是一个类,它是一个抽象的概念,有学号,姓名,年龄等属性;有学习,写作业等行为的都属于学生,不是指的某一个个体
  • 张三(对象):是学生类的一个具体对象,他是一个学生,具有学生的属性和行为

类的定义

定义一个学生类

    public class Student {
        //成员变量,学生类的属性
        public String name;         //成员变量是有默认值的,引用数据类型,默认为null
        public int age;     //0
        public String address;
        //成员方法,学生类的行为
        public void study(){
            System.out.println("study");
        }
        public void eat(){
            System.out.println("eat");
        }
        public void sleep(){
            System.out.println("sleep");
        }
    }

定义一个手机类

    public class Phone {
        //成员变量,手机类的属性
        public String brand;      //成员变量是有默认值的,引用数据类型,默认为null
        public int price;
        public String color;
        //成员方法,手机类的功能
        public void call(String name){
            System.out.println("给"+name+"打电话");
        }
        public void sendMessage(){
            System.out.println("发短信");
        }
    }

类的使用

创建对象

    类名 对象名 = new 类名();

使用对象的变量或者方法

    对象名.成员变量;
    对象名.成员方法;

定义一个测试类对上面学生类进行测试

    ////定义测试类,这个类主要是用来存放main方法,让JVM执行,不是用来创建对象用的
    import home.Student;    
    public class StudentTest {
        public static void main(String[] args) {
            //类名 对象名 = new 类名();
            Student stu = new Student(); 
            //输出成员变量值
            System.out.println(stu.name);
            System.out.println(stu.age);
            System.out.println(stu.address);
            //给成员变量赋值
            stu.name = "张三";
            stu.age = 24;
            stu.address = "北京昌平";
            //重新输出成员变量值
            System.out.println(stu.name+stu.age+stu.address);
            //调用方法   对象名.方法名
            stu.study();
            stu.eat();
            stu.sleep();
        }
    }

定义一个测试类对上面手机类进行测试

    public class PhoneTest {
        public static void main(String[] args) {
            //创建手机对象
            //类名 对象名 = new 类名();
            Phone p = new Phone();  //直接输出成员变量值
            System.out.println(p.brand+" "+p.price+" "+p.color);
            //给成员变量赋值
            p.brand = "apple";
            p.color = "gold";
            p.price = 5000;
            System.out.println(p.brand+" "+p.price+" "+p.color);  //再次输出
            //调用方法
            p.call("张三");
            p.sendMessage();
        }
    }

1个Phone对象的内存图及初始化过程

技术分享

Phone p = new Phone();

Phone p这一步实在栈空间内开辟空间,也叫压栈;new Phone()这一步加载Phone.class文件,同时在堆中开辟内存空间;

sop(p.brand + " " + p.price + " " + p.color)这一步是将实例变量显示初始化值;

p.brand = "三星"; p.price = 3999; p.color= "白色" 这三步是给实例变量赋值并覆盖初始值;

p.call("乔布斯");p.sendMessage();p.playGame(); 这三步实在调用成员方法;

首先定义main方法,main方法储存在方法区的静态区,加载Phone。class文件创建对象Phone p 进行压栈,new Phone在堆中开辟空间并给成员变量初始化值,给成员变量重新赋值,再之后通过main方法中的对象p来调用成员方法,并进行压栈,方法执行完毕后进行弹栈。

实例变量与局部变量

定义:

  • 实例变量:属于类的实例对象,没有static修饰的,目前接触到的成员变量都是实例变量

  • 局部变量:属于方法的变量,只在方法内有效

区别:

在类中的位置不同

  • 实例变量 在类中,并且在方法外定义

  • 局部变量 方法内或者方法声明上(形参)定义

在内存中的位置不同

  • 实例变量 堆内存(属于对象)

  • 局部变量 栈内(属于方法)

生命周期不同

  • 实例变量 随着对象的存在而存在,随着对象的消失而消失

  • 局部变量 随着方法的调用而存在,随着方法的调用完毕而消失

初始化值不同

  • 实例变量 有默认的初始化值(0/false/null)

  • 局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。

形式参数

  • 基本类型作为形式参数:传值,实际上就是把实参的值拷贝一份给形参,形参不论怎么改动,都不会影响到实参的值
  • 引用类型作为形式参数:传递的是实参所指向的实例对象或者数组,即:传递的是实参的引用(地址值),形参和实参具有相同的引用,所以,形参对引用的改动能立即从实参上看到

    public class Demo1{
        public int sum(int a ,int b){
            return a+b;
        }
        public void show(){
            System.out.println("学习");
        }
    }
    测试类
    public class DemoTest {
        public static void main(String[] args) {
            Demo1 d = new Demo1();
            System.out.println(d.sum(5, 6));
            d.show();
        }
    }
    

封装

封装概述

  • 封装是面向对象编程的三个重要特征之一,其余两个是多态和继承。

  • 封装指的是隐藏对象的属性和实现细节,不允许外部直接访问对象的内部信息,而是通过该类提供的方法来实现对内部信息的访问。

为了实现良好的封装,需要从以下两个方面来考虑

  • 把对象的实例变量和实现细节隐藏起来,不允许外界直接访问

  • 把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作

    封装练习
    public class StudentDemo1 {
        private String name;  //封装名字
        private int age;    //封装年龄
        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;
        }
    }
    测试类
    public class StudentDemo1Test {
        public static void main(String[] args) {
            StudentDemo1 sd1 = new StudentDemo1(); //创建对象
            sd1.setName("张三");    //给变量赋值
            System.out.println(sd1.getName());  //通过引用方法对变量进行打印
            sd1.setAge(25);
            System.out.println(sd1.getAge());
        }
    }
    

Private 关键字

  • 是一个权限修饰符。

  • 可以修饰成员(成员变量和成员方法)

  • 被private修饰的成员只能本类中才能访问。

面向对象练习

定义一个类Demo,其中定义一个求两个数据和的方法,定义一个测试类Test,进行测试。

    public class Demo {
        public int num1;
        public int num2;
        public int getSum1(){
            return num1+num2;
        }
    }
    测试类
    public class DemoTest {
        public static void main(String[] args) {
            Demo d = new Demo();
            d.num1 = 10;
            d.num2 = 20;
            System.out.println(d.getSum1());
        }
    }

定义一个长方形类rectangle,定义求周长girth和面积area的方法,然后定义一个测试类Test2,进行测试。

    public class Rectangle {
        public int a; //长方形的长
        public int b;//长方形的宽
        //定义方法求边长
        public int girth(){
            return (a+b)*2;
        }
        //定义方法求面积
        public int area(){
            return a*b;
        }
    }
    测试类
    import java.util.Scanner;  //导包  键盘输入
        public class RectangleTest {
            public static void main(String[] args) {
                Scanner input = new Scanner(System.in);
                Rectangle rect = new Rectangle();  //创建对象
                System.out.println("请输入长方形的长:");
                int a = input.nextInt();
                System.out.println("请输入长方形的宽:");
                int b = input.nextInt();
                rect.a = a;    //给成员变量赋值
                rect.b = b;
                System.out.println("长方形的周长为:"+rect.girth());
                System.out.println("长方形的面积为:"+rect.area());
            }
        }

day09java基础学习笔记

抽象abstract抽象类和抽象方法必须用abstract关键字修饰抽象类格式abstractclass类名{}抽象方法定义,在返回值钱,或修饰符前加上abstract关键字方法没有方法体,即:没有{}abstractpublicvoideat();publicabstractvoideat();抽象类不一定有抽象方... 查看详情

day12java基础学习笔记

集合/集合框架(List)数组和集合的区别数组长度固定的,一旦定义,就无法改变集合长度可变数组中可以粗出基本数据类型,也可以是对象(实际上是对象的引用集合只能存储对象的引用)Java集合体系:分为Collection和Map两种... 查看详情

day02java基础学习笔记

一、数据类型1.java中默认的整数类型就是int型;但一个数值很小在byte、short的取值范围内时,可以通过赋值来改变数据类型,比如:byte=12;short=15;如果数值过大超过了int的取值范围,java不会把它默认成long类型,需要在数据后... 查看详情

day11java基础学习笔记

冒泡排序相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处,第二次比较厚,最大值放在了倒数第二的位置,一直到第二个元素确定了,整个数组的顺序也就确定了publicclassArrayDemo{publicstaticvoidmain(String[]a... 查看详情

day08java基础学习笔记

继承extends(也叫扩展)多个类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。通过extends关键字可以实现类的继承class子类名extends父类名{}继承的案... 查看详情

day03java基础学习笔记

三元运算符1.格式:(条件表达式)?表达式1:表达式2;2.运算规则:先对条件表达式求值,得出一个逻辑值,如果至为true,则执行表达式1;如果值为false,则执行表达式2。443.典型用法:Stringstr=(5<3)?"5大于3":"5大于3";... 查看详情

零基础入门学习java课堂笔记——day04

Java数组1.数组概述定义:数组是相同类型的有序集合,同一组同一类型的数据可以按照先后次序排列组合在一起,其中一个数据可以称为元素,每个数组元素可以通过一个下表访问它们2.数组声明创建dataType[]arrayRefVar;//firstdataType... 查看详情

day02java基础学习笔记

自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型1.各种进制的表现形式和特点二进制,八进制,十进制,十六进制二进... 查看详情

java学习笔记day_01

...以我按照传智播客的视频和Java核心思想来学习,前面的基础部分主要是用于个人的复习使用的。第一段代码:HelloWorldpublicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.prin 查看详情

php学习day06笔记(初识js)

·JS全称JavaScript,是一种在网页里面使用的脚本语言,JS非常强大,可以实现HTML网页的各种功能和特效。·JS的注释方法:与其他语言相似,JS里的注释方法为·单行注释//xxxxx...·多行注释/*xxxxxxxx      xxxxxxxx*/·JS的输出语... 查看详情

python学习笔记day1基础介绍

Alex博客:http://www.cnblogs.com/alex3714/articles/5465198.html一、本节主要内容Python介绍发展史Python2or3?安装HelloWorld程序变量用户输入模块初识.pyc文件数据类型初识数据运算表达式if...else语句表达式for循环breakandcontinue 表达式while循环... 查看详情

day2计算机基础简介学习笔记

 计算机一般来说计算机是由硬件系统和软件系统组成,今天只了解硬件系统的相关原理。 简单来说一台典型的计算机在硬件方面主要由cpu,储存器,I/O设备和一条系统总线连接起来的。  1.cpucpu是计算机的大脑,... 查看详情

java基础笔记day01

JAVA开发之路---基础篇软件开发软件:一系列按照特定顺序组织的计算机数据和指令的集合常见的软件:      系统软件:windowsdosIOS      应用软件:扫雷等桌面软件什么是开发:制作软... 查看详情

java学习笔记---day1

💕前言:作者是一名正在学习JAVA的初学者,每天分享自己的学习笔记,希望能和大家一起进步成长💕目录💕前言:作者是一名正在学习JAVA的初学者,每天分享自己的学习笔记,希望能和大家... 查看详情

java学习笔记day09

break和continue的区别:break是结束本层循环或用于switch语句中,结束当前case;continue结束这一次循环for(inti=0;i<9;i++){System.out.println(i+"---------"); break;}第一次循环就结束了;for(inti=0;i<9;i++){if(i=5){ continue; } System.out.pri 查看详情

毕向东java视频学习笔记day11-day13多线程

Java_Day12多线程01进程:正在进行中的程序(直译).线程:就是进程中一个负责程序执行的控制单元(执行路径)一个进程中可以多执行路径,称之为多线程。一个进程中至少要有一个线程。开启多个线程是为了同时运行多部分代码。... 查看详情

python全栈100天学习笔记day32linux概述及基础命令(代码片段)

Linux概述Linux是一个通用操作系统。一个操作系统要负责任务调度、内存分配、处理外围设备I/O等操作。操作系统通常由内核(运行其他程序,管理像磁盘、打印机等硬件设备的核心程序)和系统程序(设备驱动、... 查看详情

python学习笔记-day1-python基础(代码片段)

1.python诞生关于Python的起源,吉多·范罗苏姆在1996年写到:六年前,在1989年12月,我在寻找一门“课余”编程项目来打发圣诞节前后的时间。我的办公室会关门,但我有一台家用电脑,而且没有太多其它东西。我决定为当时我正... 查看详情