JAVASE第6天笔记

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值