JAVASE第6天笔记

来源:互联网 发布:淘宝脱毛仪器有效果吗 编辑:程序博客网 时间:2024/05/26 12:55

Day06 课堂笔记

标签(空格分隔): java基础


阶段总结+往后学习大纲

  • 1,java语法知识(1-5)

    • day01
      • 计算机软件硬件 安装JDK和配置环境变量 java概述 写了小程序HelloWorld
        注释 关键字 标识符
    • day02
      • 常量 进制(原反补) 变量 数据类型 类型转换 运算符
    • day03
      • 运算符 Scanner屏幕录入对象 流程语句(if-switch结构)
    • day04
      • 循环结构(for while do-while) 方法(函数) 定义 怎么调用
    • day05
      • 一维数组 二维数组
  • 2,面向对象思想(6-10)

    • 面向对象思想-面向过程思想
    • 什么是类 - 类的组成
    • 什么是对象 - 对象和类的关系
    • 三大特征 : 封装 继承 多态
    • 内部类 包
  • 3,API的学习(11-14)
  • 4,集合(15-18)
  • 5,IO流(19-23)
  • 6,多线程(24-25)
  • 7,网络编程(26)
  • 8,反射+新特性(27)

面向对象思想

  • 面向过程与面向对象有哪些区别与联系?最好能举例说明

    • 面向对象:注重的是对象
    • 面向过程:注重的是过程
      举例 :
      学生要学习编程?
    • 面向过程 : 学生自己找资料 一步步自学成才
    • 面向对象 : 找个好的培训机构,选个帅的好的老师,调用老师的教学方法

    • 面向过程 : 代表语言 C语言 ,函数(方法)

    • 面向对象 : 代表语言 java语言 , C++,维护代码非常方便

    • 经典案例: 把大象装进冰箱

    • 面向过程思想:
      (1)打开冰箱
      (2)放进大象
      (3)关上冰箱

    面向对象思想:

  • 以后在咱们的开发中,你要是想让你的代码具有面向对象的思想,你必须从以下几点开始考虑:

    • (1)这个需求涉及到哪些类
      • (UML 建模语言:分析需求里面有哪些类)
      • 名词提炼法 : 大象 冰箱
    • (2)这个类有哪些内容(属性/行为)
      • 冰箱 : 打开冰箱 关闭冰箱
      • 大象 : 装进
    • (3)类和类之间的关系
      大象类 冰箱类 测试类
  • 面向对象的思想特点有哪些?(面试时候讲的)

    • (1)更符合我们生活中的思想(懒人思想)
    • (2)把复杂的事情变得简单化
    • (3)从执行者变成指挥者,角色发生转变
  • 面向对象的三大特征分别是什么?
    封装 继承 多态

类和对象

  • 什么是类,什么是对象?他们在生活中的体现分别是什么。

    • 类:一组相关属性行为的集合
    • 对象:该类事物的具体体现
      举例
      类 : 人
      对象 : 具体到某个人
  • 什么是成员变量,什么是成员方法?

    • 成员变量 : 定义在类中,方法外的变量 属性
    • 成员方法 : 对象的行为
  • 学习编程语言?

    • 主要是用编程语言来描述这个世界,解决生活中问题
  • 怎么用编程语言描述?
    • 在java中,我们要去描述生活中的事物,我们就需要使用类class去描述
  • 描述生活中的事物的时候,需要描述什么呢?
    • 属性 行为
      举例 :
      人 属性: 三围 体重 身高 名字
      行为 : 吃饭 睡觉 打dota 打lol 开车….
  • 在java中,事物的属性和行为是怎么描述的?
    • 属性:在java中对应 成员变量
    • 行为:在java中对应 成员方法

学生类的定义(非常非常非常重要)

/** A:案例演示    * 属性:姓名,年龄,性别    * 行为:学习,睡觉* B:我们如何描述现实世界事物    * 属性    就是该事物的描述信息(事物身上的名词)    * 行为    就是该事物能够做什么(事物身上的动词)* C:Java中最基本的单位是类,Java中用class描述事物也是如此    * 成员变量  就是事物的属性    * 成员方法  就是事物的行为* D:定义类其实就是定义类的成员(成员变量和成员方法)    * a:成员变量    和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。    * b:成员方法    和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。*/class Student {    String name;                        //姓名    int age;                            //年龄    String gender;                      //性别    public void study() {               //定义学习的方法        System.out.println("学生学习");    }    public void sleep() {               //定义睡觉的方法        System.out.println("学生睡觉");    }}

手机类的定义

/** 模仿学生类,让学生自己完成    * 属性:品牌(brand)价格(price)    * 行为:打电话(call),发信息(sendMessage)玩游戏(playGame)*/class Phone {    String brand;                   //品牌    int price;                      //价格    public void call() {            //打电话        System.out.println("打电话");    }    public void sendMessage() {     //发信息        System.out.println("发信息");    }    public void playGame() {        //玩游戏        System.out.println("玩游戏");    }}

对象怎么使用?怎么创建?(非常非常非常重要)

  • 描述一个事物的时候,我们要定义一个类,但是如果我们要使用这个类的时候,我们另外需要定义一个测试类,这个测试类必须具有main方法,因为main方法是程序的入口,如果没有main方法无法执行.
    我们要描述类,要使用类,最少要写两个类!

    • (1)你描述的事物那个类
    • (2)测试类,具有主方法main方法
  • 使用类的时候,我们怎么使用?

    • 要使用一个类,必须先创建对象!
      创建对象的格式?
      格式 类名 对象名 = new 类名();
      解释:对象名 :其实就是标识符
      类名 : Student Person Phone
      举例:Student s = new Student();
  • 创建完对象之后,怎么去用?
    • 调用成员变量,怎么调用?
      对象名.成员变量名;
      解释:成员变量名就是你定义成员变量的时候起的名字 name age
      举例 :s.name = "超帅" s.age = 18;
    • 调用成员方法,怎么调用?
      对象名.成员方法名;
      解释 :方法名 就是你定义方法的时候起的名字 study() sleep()
      举例: s.study(); s.sleep();

类的写法(必须会写)

第一步: 先写类 class Student {} 第二步: 在大括号里面 书写成员变量 String name; int age;第三步: 写成员方法,public void study(){          System.out.println("学习");  }

测试类的写法(必须会写)

  • 前提条件:要有main方法
    举例如下:
    手机类的测试类
class Demo2_Phone {    public static void main(String[] args) {        //创建对象 格式 类名 对象名 = new 类名();        Phone p = new Phone();        //调用对象中的属性并赋值        //格式 对象名.成员变量名 = 初始化值;        p.brand = "锤子";        p.price = 998;        System.out.println(p.brand + "..."  + p.price);        //调用成员方法        //格式 对象名.成员方法名();        p.call();        p.sendMessage();        p.playGame();    }}

学生类的测试类

class Demo1_Student {    public static void main(String[] args) {        //创建对象的格式:类名 对象名 = new 类名();        //对象名:其实就是合法的标识符,如果是一个单词所有字母小写,如果是多个单词,从第二个单词开始首字母大写        Student s = new Student();        //* D:如何使用成员变量呢?        //* 对象名.变量名        s.name = "张三";        s.age = 23;        System.out.println(s.name + "..." + s.age);        //* E:如何使用成员方法呢?        //* 对象名.方法名(...)        s.study();        s.sleep();    }}

汽车类的写法

汽车类(Car)     属性:车的颜色(color),车的轮胎个数(num)      行为:车会跑(run)class Car {    String color;    int num;    public void run(){        System.out.println("老司机开车了...没时间解释,赶紧上车!");    }}
class Demo1_Car {    public static void main(String[] args) {        Car c1 = new Car();             //创建对象        //调用属性并赋值        c1.color = "red";               //为车的颜色赋值        c1.num = 8;                     //为车的轮胎数赋值        //调用行为        c1.run();        Car c2 = new Car();             //创建对象        c2.color = "black";             //为车的颜色赋值        c2.num = 4;                     //为车的轮胎数赋值        c2.run();        //c2 = null;                        //用null把原来的地址值覆盖掉了        //c2.run();                     //c2里面记录的是null,所以报出空指针异常        Car c3 = c2;        c3.run();    }}/*车的属性    车的颜色    车的轮胎数车的行为    车运行*/class Car {    //成员变量    String color;                       //车的颜色    int num;                            //车的轮胎数    public void run() {                 //车运行        System.out.println(color + "..." + num);    }}
  • 内存加载 (会画出来)
    • 栈内存
      方法进栈内存 局部变量
    • 堆内存
      new出来对象
    • 方法区
      字节码文件(.class文件) 代码
  • 执行流程:
    • 第一步:DemoCar.class 加载到内存区下的方法区区域
    • 第二步:找到main方法,main方法进入栈内存
    • 第三步:开始读取main方法里面的代码 ,顺序读取
      Car c1 = new Car();
      读取的时候,会去找Car类,如果有,就把Car类加载到方法区
      注意:如果是第一次加载,在方法区没有这个类,就会把这个类加载,如果方法区里面已经有了这个类,这个时候就不会再次加载这个类,而是直接使用!不管之后的类创建多少次对象,这个类都只是加载一次
      如果没有,报错!
      Car c1 是在main方法里面,在栈内存里面
    • 第四步:Car类加载完毕,new Car();
      一看到new这个关键字,就回去堆内存分配空间;然后把对应的成员变量信息分别初始化;先默认初始化—>显式初始化
    • 第五步:分配完空间之后,加载完所有的成员变量信息后,会把地址值给到栈内存中的那个对象引用 Car c1,也就相当于说c1保存了堆内存中new Car出来的地址值
    • 第六步:代码顺序往下执行,开始显式赋值;如果在这里调用了方法,这个方法也是进入栈内存!
class Demo1_Car {    public static void main(String[] args) {        Car c1 = new Car();             //创建对象        //调用属性并赋值        c1.color = "red";               //为车的颜色赋值        c1.num = 8;                     //为车的轮胎数赋值        //调用行为        c1.run();        Car c2 = new Car();             //创建对象        c2.color = "black";             //为车的颜色赋值        c2.num = 4;                     //为车的轮胎数赋值        c2.run();        //c2 = null;                        //用null把原来的地址值覆盖掉了        //c2.run();                     //c2里面记录的是null,所以报出空指针异常        Car c3 = c2;        c3.run();    }}/*车的属性    车的颜色    车的轮胎数车的行为    车运行*/class Car {    //成员变量    String color;                       //车的颜色    int num;                            //车的轮胎数    public void run() {                 //车运行        System.out.println(color + "..." + num);    }}

关于java垃圾回收

  • 当一个对象没有任何的引用指向的时候,它会在堆内存中变成垃圾,这个时候会等待垃圾回收机制进行回收,但是并不一定马上就会被回收,等到一定的时间,就会自动清理.
  • 我们如果希望把一个对象变成垃圾,可以怎么做?
    那就把这个对象的引用赋值为null;null常量专门给引用数据类型赋值.
  • 在java中,我们不需要手动把引用赋值为null,为什么?因为java中有垃圾回收机制,它会自动帮我们清理垃圾,和C语言这种不一样.
  • 当主方法方法弹栈后,所有的引用都会消失,也就意味着所有的对象都失去了引用,这个时候,所有对象就自动变成垃圾,等待回收!

成员变量和局部变量(理解,知道区别)

局部变量:声明在方法上或者在方法中的变量称为局部变量成员变量:类中,方法外

成员变量与局部变量有什么区别?

区别 成员变量 局部变量 类中位置 类中,方法外 方法声明上,方法体内 内存位置 堆内存中 栈内存中 生命周期 随着对象的创建而存在,随着对象的消失而消失 随着方法的调用而进栈,随着方法的弹栈(消失)而消失 初始化值 有默认初始化值 没有

在使用变量的过程中, 查找变量的顺序是什么?
注意:就近原则

class Man {    String name; //成员变量;    int age; //成员变量; 默认值为 0    public void drive(){ //开车方法        int age = 10; //局部变量 在方法里面        System.out.println(age); //这里使用age,就会优先使用最近的变量    }}

方法的形式参数是类名的时候如何调用?(非常非常非常重要)

数据类型 :基本数据类型 和 引用数据类型
基本:四类八种
引用数据类型:数组 类 接口 枚举

class Man {    String name;     int age;     public void drive(Student s){  //形式参数 是在小括号里面        //这个方法应该如何调用?怎么调用呢?    }}

案例解释

class Student_Demo {    public static void main(String[] args) {        Student s = new Student();        s.setName("罗健");        s.setAge(28);        //怎么调用方法? 单独调用 赋值调用 输出调用        //没有返回值的方法只能使用单独调用 格式: 方法名(传入方法需要的对应数据类型参数);        teachDrive(s);        Person p = new Person();        p.setName("健康");        p.setAge(19);        teachLookGirl(p);  //Student_Demo.java:10: 错误: 无法将类 Student_Demo中的方法 teachLookGirl应用到给定类型;    }    //方法:功能 这个功能描述的,老司机带学生开车    public static void teachDrive(Student s){        System.out.println("老司机教" + s.getName() + "开车了,没时间解释了,赶紧上车!" );    }    public static void teachLookGirl(Person p){        System.out.println("老司机教" + p.getName() + "看美女了,没时间解释了,赶紧上车!");    }}//Person类class Person{    private String name;    private int age;    public void setName(String name){        this.name = name;    }    public String getName(){        return name;    }    public void setAge(int age){        this.age = age;    }    public int getAge(){        return age;    }}//传递的参数是类类型时候class Student{    private String name;    private int age;    public void setName(String name){        this.name = name;    }    public String getName(){        return name;    }    public void setAge(int age){        this.age = age;    }    public int getAge(){        return age;    }}

总结 :如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。

class Demo1_Student {    public static void main(String[] args) {        print(10);        Student s = new Student();                  //创建对象,并将对象的地址值赋值给s        print(s);//0x0011    }    public static void print(int x) {               //基本数据类型当作形式参数        System.out.println(x);    }    public static void print(Student stu) { Student stu = 0x0011;       //引用数据类型当作形式参数        stu.name = "张三";        stu.age = 23;        stu.speak();    }}/** A:方法的参数是类名public void print(Student s){}//print(new Student());    * 如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。*/class Student {    String name;                    //姓名    int age;                        //年龄    public void speak() {        System.out.println(name + "..." + age);    }}

匿名对象(知道怎么用,能看懂,也会用)

匿名: 没有名字 实名有什么用?一般怎么用? 传递参数使用 或者调用一次方法的时候使用

什么是匿名对象,有什么特点?
木有名字的对象就叫匿名对象,特点就是没名字
什么时候可以使用匿名对象?
(1)当我们需要调用一次,仅仅一次的时候,我们就可以使用匿名对象
(2)匿名对象可以当做参数传递
匿名对象最大的作用?
节省代码,将两行代码改成一行。

举例class Student {    String name;                    //姓名    int age;                        //年龄    public void speak() {        System.out.println(name + "..." + age);    }    public void drive(){        System.out.println("开车");    }}class Test{    public static void main(String[] args){        //没有匿名对象前的做法        Student s = new Student();        s.speak();        s.speak(); //节省空间        //有了匿名对象后,就可以一行代码搞定 ,仅调用方法一次的时候才用        new Student().speak();        new Student().drive();    }}举例 : 当参数传递的时候Student s = new Student();   //深圳宝安红灯区1号XXX路       s                 new Student()XXX家地址     深圳宝安黄灯区1号XXX路public void test(Student s){ //罗健家地址    s.drive();}

假设我是一个不知道匿名对象是什么的程序员,我可不可以不用匿名对象?
可以!

封装(非常非常非常重要)

什么是封装?有什么好处?
隐藏事物的属性(成员变量)和实现细节,对外提供公共的访问方式
好处:
提高代码的安全性
提高代码的复用性
隐藏了实现细节
封装的原则是什么?
将不需要对外提供的属性都隐藏起来,然后提供公共访问方式

被private修饰的成员有什么特点?
(1)只能在本类中访问,在其他类中不能被访问
举例:

        class Student{            private String name;            private int age;            //set / get方法            public void setName(String xingming){ //xingming = "张三"              name  = xingming;            }            public void setAge(int nianling){                if(age < 0 || age > 100){                    System.out.println("你设置不对,年龄没有负数!");                }else{                  age = nianling;                }            }            //获取的也要书写            public void drive(){                System.out.println(name + "开车");            }        }        class Test{            public static void main(String [] args){                Student s = new Student();               // s.name = "张三"; //不允许这样访问,因为name已经被private修饰,所以无法在这个类中访问               //只能使用公开访问方式来赋值               s.setName("张三");               //s.age = -10;               s.setAge(-10);            }        }

封装指的就是private,这句话对吗?
不对,private只是封装的一种
(思考题)getter/setter方法一定要成对出现吗?
不一定要成对出现,可能以后开发中只需要设置,不需要获取,但是大部分情况下,都是成对出现,开发中几乎都是成对的.
分页技术:

this关键字

this关键字解决什么问题?有什么用?不用行不行?如果不用,我们可以改变局部变量声明的那个变量名

this关键字是什么?用途是什么?
this代表当前对象的引用
用途: 区分成员变量和局部的重名问题

class Demo_this {    public static void main(String[] args) {        //this代表的就是当前对象,谁调用了方法,this就是谁        Student s = new Student();        s.setName("张三");        s.setAge(18);        s.drive();    }}class Student{    //成员变量    private String name;    private int age;    //提供公共的访问方式    //set方法 没有学习this之前的做法    /*    public void setName(String xingming){        name = xingming;    }    public void setAge(int nianling){        age = nianling;    }*/    //使用this关键字后,方法就变得见名知意了,这个时候,用户更加清楚这个方法是干什么用!    public void setName(String name){ //张三        //区分成员变量名和局部变量名        this.name = name;    }    public void setAge(int age){        this.age = age;    }    //get方法    public String getName(){  //只是获取数据,不需要传入参数        return name;    }    public int getAge(){        return age;    }    public void drive(){        System.out.println(name + ".." + age + "在开车...");    }}

案例

class Demo2_Phone {    public static void main(String[] args) {        Phone p1 = new Phone();        p1.setBrand("三星");        p1.setPrice(5288);        System.out.println(p1.getBrand() + "..." + p1.getPrice());        p1.call();        p1.sendMessage();        p1.playGame();    }}/*手机类    属性:品牌brand,价格price    行为:打电话call,发短信sendMessage,玩游戏,playGame*/class Phone {                               //java bean    private String brand;                   //品牌    private int price;                      //价格    public void setBrand(String brand) {    //设置品牌        this.brand = brand;    }    public String getBrand() {              //获取品牌        return this.brand;                  //this.可以省略,你不加系统会默认给你加    }    public void setPrice(int price) {       //设置价格        this.price = price;    }    public int getPrice() {                 //获取价格        return price;    }    public void call() {                    //打电话        System.out.println("打电话");    }    public void sendMessage() {             //发短信        System.out.println("发短信");    }    public void playGame() {                //玩游戏        System.out.println("玩游戏");    }}

课外补充

class Person_Demo {    //程序入口    public static void main(String[] args) {        //第一层 用户注册 MVC三层结构        Person p = new Person();        p.setName("张三");        p.setPhoneNum("188888888");        p.setPassWord("123456");        p.setEmail("8888@qq.com");        //第二层 需要调用service层传递数据 逻辑判断        //业务逻辑判断        //第三层 调用持久层ORM层 对数据的持久化操作  mysql数据库        String name = p.getName();        String phoneNum = p.getPhoneNum();        String password = p.getPassword();        String email = p.getEmail();        //使用持久化技术把这些数据存储到数据库表中 ---JDBC连接数据库        System.out.println("存储姓名:" + name);        System.out.println("存储手机号码:" + phoneNum);        System.out.println("存储密码:" + password);        System.out.println("存储邮箱:" + email);    }}class Person{    private String name;    private String phoneNum;    private String password;    private String email;    public void setName(String name){        this.name = name;    }    public void setPhoneNum(String phoneNum){        this.phoneNum = phoneNum;    }    public void setPassWord(String password){        this.password = password;    }    public void setEmail(String email){        this.email = email;    }    public String getName(){        return name;    }    public String getPhoneNum(){        return phoneNum;    }    public String getPassword(){        return password;    }    public String getEmail(){        return email;    }}
0 0
原创粉丝点击