首页 > 编程语言 > 详细

零基础自学JAVASE Part8

时间:2021-06-02 09:16:18      阅读:18      评论:0      收藏:0      [点我收藏+]

前言

  这几天跑到了上海,期间又要看房又要打探一下周边的美食,导致这几天来java自学的中断。

又因为后面的内容粗略的浏览过,难度也在逐渐提高,学懂学透直至会用的时间周期可能会越来越长。

不过,怎么能被这种还没有发生的事情所吓倒呢,加油。

 

重点:

技术分享图片

 

1. javabean 书写规范

javabean: 一个普通的类,就来描述事物的类,里面不包含任何的业务逻辑,只是用来存储数据.
  比如: Teacher, Student, Mobile…..(作为数据的载体)
规范:
  成员变量私有化
  提供 get 和 set 方法( 右键->source->generate getters and setters -> select All->OK 自动生成)
  提供无参构造方法(右键->source->generate constructor using fields-> selectAll/deSelectAll->OK 自动生成)
  提供有参的构造方法

 例子:

package com.baidu.javase05;

public class YuanGong {
    private String name; //成员变量私有化
    private int age;
    private double salary;
    
    
    public YuanGong() {} //无参构造方法
    
    //提供相应的get、set方法
    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 double getSalary() {
        return salary;
    }
    public void setSalary(double salary) {
        this.salary = salary;
    }
    
    //自动生成和成员变量相对应的有参构造方法
    public YuanGong(String name, int age, double salary) {
        super();
        this.name = name;
        this.age = age;
        this.salary = salary;
    }
    
    
    
}

 

2. 同名局部变量和成员变量的调用问题

例子:

public class People {
    String name = "张三";
    public void print() {
        System.out.println(name);
    }
    
    public void print(String name) {
        System.out.println(name);
    }
    
    public void print1(String name) {
        System.out.println(this.name);
    }
    
    public static void main(String[] args) {
        People p = new People();  //首先创建实例p
        System.out.println(p.name); //因为name有初始值,打印出来的结果是“张三”
        p.name = "李四";
        p.print(); //上一步name赋值为“李四”,因此打印出来的结果是“李四”
        p.print("王五"); //打印输入的参数,打印出来的结果是“王五”
        p.print1("赵六"); //this.打印的是成员变量,打印出来的结果是“李四”
    }
}

 

3. static关键字

  静态的方法中只能调用外部用 static 修饰的变量和方法,如果非要调用非静态的,需要创建对象. 原因是静态的变量或方法,最先加载到内存中,如果此时没有对象,那么成员变量还不存在,所以不能调用。
 
成员变量: 对象名调用    对象名.成员变量    p.name
静态变量: 类名调用     类名.静态变量     StaticDemo.b 
 
例子:
public class StaticDemo {
    int a=  1;
    static int b= 2;
    
    //静态方法中只能调用static修饰的int b,调用a的话需要创建对象
    public static void main(String[] args) {
        int c; //不能print,因为局部变量不赋初始值无法使用
        System.out.println(b);
        System.out.println(StaticDemo.b); //类名调用
        
        StaticDemo demo = new StaticDemo();
        System.out.println(demo.a);
        
    }

}

 

4. 代码块
静态代码块: static {}
构造代码块:{}
局部代码块:定义在方法中的{}   局部代码块执行完毕后会立马释放
注: 静态代码块  先于 构造代码块  先于  构造方法
 
例子:
public class CodeBlockDemo {
    static int count = 0;
    static {
        System.out.println("执行静态代码块");
    }
    
    {
        count++;
        System.out.println("执行构造代码块");
    }
    
    public CodeBlockDemo() {
        System.out.println("执行一次无参构造方法");
    }
    public CodeBlockDemo(int a) {
        System.out.println("执行一次有参构造方法"+ a);
    }
    public void print() {
        System.out.println("执行成员方法");
    }
    
    
    
    public static void main(String[] args) {
        CodeBlockDemo c1 = new CodeBlockDemo();
        CodeBlockDemo c2 = new CodeBlockDemo(10); //执行构造代码块+执行一次有参构造方法
        CodeBlockDemo c3 = new CodeBlockDemo(20);
        CodeBlockDemo c4 = new CodeBlockDemo();
        CodeBlockDemo c5 = new CodeBlockDemo(30);

    }

}

 

5. 继承
5.1 格式
  class  子类名  extends  父类名{
  }
 
5.2 注意
java 中的继承只支持单继承,不支持多继承(C++),支持多层继承
Object:(万类之祖) 如果一个类没有继承任何类,那么他默认继承自 Object
父类中的私有成员不能被继承
 
5.3 同一个文件中定义多个类
  一个文件中可以定义多个类,但是必须只能有一个类使用public类, 并且用public修饰的类必须和文件名相同main 方法必须定义在用public修饰的类中(定义在非public修饰的类中无法执行)
  同一个包中不能定义名字相同的类一个文件中定义多个类(the class already defined) 
 
5.4 super关键字
  super:可以看做是父类中的一个引用, 用于区分子类中和父类中同名的成员(成员变量,成员方法),super 指代的是父类中的值
  区别this:可以看做是本类中的一个对象,用于区分同名的局部变量和成员变量,this 指代的是成员变量
应用:
  this.成员变量    super.成员变量
  this.成员方法()    super.成员方法()
调用构造方法:
  this(参数); ------调用本类中的构造方法
  super(); -------调用父类中的构造方法
注意: this和super不能用于static方法中
 
5.5 继承中构造方法的关系
  子类中的构造方法默认会调用父类中无参数的构造方法,如果父类中没有无参数的构
造方法,子类必须直接或间接地调用父类 中其他的构造方法
public class ExtendsDemo {

    public static void main(String[] args) {
        SuperMan sm = new SuperMan();
        sm.print();
        System.out.println(sm.name);
        Man x = new Man();
        x.print();

    }

}

class SuperMan{
    String name = "超人";
    public SuperMan() {
        super();
    }
    public SuperMan(int a) {
        
    }
    public void print() {
        System.out.println("这是父类的成员方法");
    }
}

class Man extends SuperMan{
    String name = "男人";
    public Man () {
        super();
    }
    public Man (int a) {
        this(); //调用本类中的无参构造方法
    }
    public void print() {
        System.out.println("这是子类的成员方法");
    }
}

class Woman extends SuperMan{
    String name = "女人";
    public Woman () {
        super();
    }
    public Woman(int b) {
        super(1);
    }
}

 

5.8.方法的重载和方法的重写
概念:
  重写(override): 子类中出现了和父类中 方法名一样,返回值类型一样,参数列表一样的方法,就叫做方法的重写
  重载(overload): 一个类中可以存在多个名字相同的方法,但是必须保证参数的个数或类型不同,与返回值无关
注解:
   @override   可以使用该注解验证重写格式是否正确,把它写到子类的方法上.
方法重写的注意事项:
  1. 父类中的私有方法不能被重写(子类中可以同名的方法,只是不叫方法的重写)
  2. 子类重写父类中的方法,访问权限不能更低
  3. 静态的方法要想重写必须写成静态的(也不叫方法的重写)
      (静态方法不能重写-----正确的)
(此处有个相关的练习题,我会在后续自己写好测试后补充)
 
6.final
  final 可以用来修饰类,方法,变量
  final 修饰的类不能被继承
  final 修饰的方法不能被重写
  final 修饰的变量值不能改变, final 修饰的变量要有初始值
一般我们创建常量:
  public static     final
    final: 限制值不能变
    static: 只有一份
final 修饰的变量如果是引用数据类型,代表地址值不能变,可以修改里面的属性值; 
 
7. 单例设计模式
class Singleton{
    private static Singleton s = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
        return s;
    }
}

(这个需要再研究研究,有懂的大佬讲解一下吗 0.0)

 

后记

  因为几天之前是有学过这部分七七八八的了,所以再总结一遍理解的更加深刻,总感觉和上一部分有重叠的地方,

或者是我在之前复习的部分已经写过,我也实在是有点搞混了,见谅见谅

零基础自学JAVASE Part8

原文:https://www.cnblogs.com/gzqcason/p/14839062.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!