构造方法及其重载:

  1. /*
  2. 构造方法格式特点
  3. * a:方法名与类名相同(大小也要与类名一致)
  4. * b:没有返回值类型,连void都没有
  5. * c:没有具体的返回值return;
  6. * 构造方法的重载
  7. * 重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表
  8. 构造方法注意事项
  9. * a:如果没有给出构造方法,系统将自动提供一个无参构造方法。
  10. * b:如果给出了构造方法,系统将不再提供默认的无参构造方法。
  11. * 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出
  12. */
  13. class Demo_Constructor {
  14. public static void main(String[] args)
  15. {
  16. Person p = new Person("lee",18);
  17. p.show();
  18. }
  19. }
  20. class Person{
  21. private String name;
  22. private int age;
  23.  
  24. public Person(){} // 构造方法
  25.  
  26. public Person(String uname,int uage){ // 构造方法的重载
  27. this.name = uname;
  28. this.age = uage;
  29. }
  30.  
  31. public void show(){
  32. System.out.println("name:"+name+",age:"+age);
  33. }
  34. }

成员变量的赋值:

  1. /*
  2. 成员变量的赋值
  3. */
  4. class Demo_Person1 {
  5. public static void main(String[] args)
  6. {
  7. Person p1 = new Person("李四",18);
  8. p1 = new Person("李四",19); // //运行结果貌似是改名了,其实是将原对象变成垃
  9.  

  10. System.out.println("name:"+p1.getName()+"age:"+p1.getAge());
  11. Person p2 = new Person(); // //空参构造创建对象
  12.  
  13. p2.setName("王五");
  14. p2.setAge(19);
  15. System.out.println("name:"+p2.getName()+"age:"+p2.getAge());
  16. }
  17. }
  18. class Person{
  19. private String name;
  20. private int age;
  21. public Person(){}
  22.  
  23. public Person(String name,int age){
  24. this.name = name;
  25. this.age = age;
  26. }
  27.  
  28. public void setName(String name){
  29. this.name = name;
  30. }
  31. public String getName(){
  32. return name;
  33. }
  34.  
  35. public void setAge(int age){
  36. this.age = age;
  37. }
  38. public int getAge(){
  39. return age;
  40. }
  41.  
  42. }

创建一个对象的步骤
* 例:
    * Student s = new Student();
    * 1,Student.class加载进内存
    * 2,声明一个Student类型引用s
    * 3,在堆内存创建对象,
    * 4,给对象中属性默认初始化值
    * 5,属性进行显示初始化
    * 6,构造方法进栈,对对象中的属性赋值,构造方法弹栈
    * 7,将对象的地址值赋值给s
static关键字:

  1. /*
  2. static关键字的特点
  3. * a:随着类的加载而加载
  4. * b:优先于对象存在
  5. * c:被类的所有对象共享
  6. * d:可以通过类名调用
  7. * 其实它本身也可以通过对象名调用。
  8. * 推荐使用类名调用。
  9. * 静态修饰的内容一般我们称其为:与类相关的,类成员
  10. 如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
  11. */
  12. class Demo_Person2 {
  13. public static void main(String[] args)
  14. {
  15. Person p1 = new Person();
  16. p1.setName("李四");
  17. p1.setCountry("cn");
  18. System.out.println(p1.getName()+p1.getCountry()); // 李四cn
  19.  
  20. Person p2 = new Person();
  21. p2.setName("王五");
  22. System.out.println(p2.getName()+p2.getCountry()); // 王五cn
  23. }
  24. }
  25. class Person{
  26. static String country;
  27. String name;
  28. public void setName(String name){
  29. this.name = name;
  30. }
  31. public String getName(){
  32. return name;
  33. }
  34.  
  35. public void setCountry(String country){
  36. this.country = country;
  37. }
  38. public String getCountry(){
  39. return country;
  40. }
  41. }

static的注意事项
    * a:在静态方法中是没有this关键字的
        * 如何理解呢?
            * 静态是随着类的加载而加载,this是随着对象的创建而存在。
            * 静态比对象先存在。
    * b:静态方法只能访问静态的成员变量和静态的成员方法
        * 静态方法:
            * 成员变量:只能访问静态变量
            * 成员方法:只能访问静态成员方法
        * 非静态方法:
            * 成员变量:可以是静态的,也可以是非静态的
            * 成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
        * 简单记:
            * 静态只能访问静态。

  1. class Demo_Person3 {
  2. public static void main(String[] args)
  3. {
  4. Demo d = new Demo();
  5. d.showDemo1();
  6.  
  7. Demo.showDemo2();
  8. }
  9. }
  10.  
  11. class Demo{
  12. static String country = "cn";
  13. String name = "李四";
  14.  
  15. public void showDemo1(){
  16. System.out.println(country);
  17. System.out.println(name);
  18. // 相当于
  19. System.out.println(this.name); // this可以省略
  20. }
  21. public static void showDemo2(){
  22. System.out.println(country);
  23. // System.out.println(name);// 错误: 无法从静态上下文中引用非静态 变量 name
  24. // System.out.println(this.name); //
  25. }
  26. }

静态变量和成员变量的区别:
* 静态变量也叫类变量  成员变量也叫对象变量
* A:所属不同
    * 静态变量属于类,所以也称为为类变量
    * 成员变量属于对象,所以也称为实例变量(对象变量)
* B:内存中位置不同
    * 静态变量存储于方法区的静态区
    * 成员变量存储于堆内存
* C:内存出现时间不同
    * 静态变量随着类的加载而加载,随着类的消失而消失
    * 成员变量随着对象的创建而存在,随着对象的消失而消失
* D:调用不同
    * 静态变量可以通过类名调用,也可以通过对象调用
    * 成员变量只能通过对 象名调用

main方法的格式解释:

  1. class Demo3_Main {
  2. public static void main(String[] args) {
  3. /*
  4. public : 被jvm调用,所以权限要足够大
  5. static : 被jvm调用,不需要创建对象,直接类名.调用即可
  6. void : 被jvm调用,不需要有任何的返回值
  7. main : 只有这样写才能被jvm识别,main不是关键字
  8. String[] args : 以前是用来接收键盘录入的
  9. */
  10.  
  11. System.out.println(args.length);
  12. for (int i = 0;i < args.length ;i++ ) {
  13. System.out.println(args[i]);
  14. }
  15. }
  16. }

说明书的制作过程:
对工具类加入文档注释
通过javadoc命令生成说明书
    * @author(提取作者内容)
    * @version(提取版本内容)
    * javadoc -d 指定的文件目录 -author -version ArrayTool.java
    * @param 参数名称//形式参数的变量名称
    * @return 函数运行完返回的数据
// javadoc -d api -version -author ArrayTool.java

  1. /**
  2. 这是一个数组工具类,里面封装了查找数组最大值,打印数组,数组反转的方法
  3. @author fly
  4. @version v1.0
  5. */
  6. public class ArrayTool {
  7. //如果一个类中所有的方法都是静态的,需要再多做一步,私有构造方法,目的是不让其他类创建
  8.  
  9. 本类对象
  10. //直接用类名.调用即可
  11. /**
  12. 私有构造方法
  13. */
  14. private ArrayTool(){} //设计模式:单例模式
  15.  
  16. //1,获取最大值
  17.  
  18. /**
  19. 这是获取数组中最大值的方法
  20. @param arr 接收一个int类型数组
  21. @return 返回数组中最大值
  22. */
  23. public static int getMax(int[] arr) {
  24. int max = arr[0]; //记录第一
  25.  
  26. 个元素
  27. for (int i = 1;i < arr.length ;i++ ) { //从第二个元素开始遍历
  28. if (max < arr[i]) { //max与数组
  29.  
  30. 中其他的元素比较
  31. max = arr[i]; //记录住较
  32.  
  33. 大的
  34. }
  35. }
  36.  
  37. return max; //
  38.  
  39. 将最大值返回
  40. }
  41. //2,数组的遍历
  42. /**
  43. 这是遍历数组的方法
  44. @param arr 接收一个int类型数组
  45. */
  46. public static void print(int[] arr) {
  47. for (int i = 0;i < arr.length ;i++ ) { //遍历数组
  48. System.out.print(arr[i] + " ");
  49. }
  50. }
  51. //3,数组的反转
  52. /**
  53. 这是数组反转的方法
  54. @param arr 接收一个int类型数组
  55. */
  56. public static void revArray(int[] arr) {
  57. for (int i = 0;i < arr.length / 2 ;i++ ) { //循环次数是元素个数的一半
  58. /*
  59. arr[0]与arr[arr.length-1-0] 交换
  60. arr[1]与arr[arr.length-1-1] 交换
  61. arr[2]与arr[arr.length-1-2] 交换
  62. */
  63. int temp = arr[i];
  64. arr[i] = arr[arr.length-1-i];
  65. arr[arr.length-1-i] = temp;
  66. }
  67. }
  68. }

random:

  1. import java.util.Scanner;
  2. /*
  3. class Demo_Math {
  4. public static void main(String[] args)
  5. {
  6. // double d = Math.random(); // 返回带正号的 double 值,该值大于等于 0.0 且小
  7.  
  8. 于 1.0。返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。
  9. // System.out.println(d);
  10. }
  11. }
  12. */
  13. class Demo_Math {
  14. public static void main(String[] args)
  15. {
  16. Scanner sc = new Scanner(System.in);
  17. System.out.println("输入一个1~100之间的整数");
  18. int g = (int)(Math.random()*100)+1;
  19. while (true)
  20. {
  21. int re = sc.nextInt();
  22. if (re > g)
  23. {
  24. System.out.println("大了");
  25. }else if (re < g)
  26. {
  27. System.out.println("小了");
  28. }else{
  29. System.out.println("猜中了");
  30. break;
  31. }
  32.  
  33. }
  34.  
  35. }
  36. }

代码块:

  1. /*
  2. 局部代码块
  3. * 在方法中出现;限定变量生命周期,及早释放,提高内存利用率
  4. 构造代码块 (初始化块)
  5. * 在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并
  6.  
  7. 且在构造方法前执行
  8. 静态代码块
  9. * 在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且
  10.  
  11. 只执行一次。优先于主方法执行。
  12. * 一般用于加载驱动
  13.  
  14. */
  15. class Demo1_Code {
  16. public static void main(String[] args)
  17. {
  18. {
  19. //局部代码块
  20. int x = 10;
  21. }
  22. // System.out.println(x); // 错误: 找不到符号 x
  23. new Stu();
  24. new Stu();
  25. }
  26.  
  27. static {
  28. System.out.println("主方法类中的静态代码块");
  29. }
  30. }
  31. class Stu{
  32. public Stu(){
  33. System.out.println("构造方法");
  34. }
  35. {
  36. //构造代码块
  37. study();
  38. }
  39. public void study(){
  40. System.out.println("xx-----");
  41. }
  42. static {
  43. System.out.println("Stu中的静态代码块");
  44. }
  45. }
  46. /*
  47.  
  48. 主方法类中的静态代码块
  49. Stu中的静态代码块
  50. xx-----
  51. 构造方法
  52. xx-----
  53. 构造方法
  54. */

继承:
   让类与类之间产生关系,子父类关系

继承的好处和弊端:
* A:继承的好处
    * a:提高了代码的复用性
    * b:提高了代码的维护性
    * c:让类与类之间产生了关系,是多态的前提
* B:继承的弊端
    * 类的耦合性增强了。
    
    * 开发的原则:高内聚,低耦合。
    * 耦合:类与类的关系
    * 内聚:就是自己完成某件事情的能力

Java中类的继承特点:
* A:Java中类的继承特点
    * a:Java只支持单继承,不支持多继承。(一个儿子只能有一个爹)
        * 有些语言是支持多继承,格式:extends 类1,类2,...
    * b:Java支持多层继承(继承体系)
*
    * 如果想用这个体系的所有功能用最底层的类创建对象
    * 如果想看这个体系的共性功能,看最顶层的类

子类只能继承父类所有非私有的成员(成员方法和成员变量)
子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。

this和super都代表什么
    this:代表当前对象的引用,谁来调用我,我就代表谁
    super:代表当前对象父类的引用
this和super的使用区别
    a:调用成员变量
        this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
        super.成员变量 调用父类的成员变量
    b:调用构造方法
        this(...)    调用本类的构造方法
        super(...)    调用父类的构造方法
    c:调用成员方法
        this.成员方法 调用本类的成员方法,也可以调用父类的方法
        super.成员方法 调用父类的成员方法
        
子类中所有的构造方法默认都会访问父类中空参数的构造方法
因为子类会继承父类中的数据,可能还会使用父类的数据。
所以,子类初始化之前,一定要先完成父类数据的初始化。

super(…)或者this(….)必须出现在构造方法的第一条语句上
*/

  1. class Demo_extends {
  2. public static void main(String[] args)
  3. {
  4. // new Son().A();
  5. new Son();
  6. }
  7. }
  8. class Father
  9. {
  10. int a = 10;
  11. int b = 30;
  12. private int c = 40;
  13. public Father(){ // Object类最顶层的父类
  14. System.out.println("Father的构造方法");
  15. }
  16. public Father(int a,int b){
  17. this.a = a;
  18. this.b = b;
  19. System.out.println("a:"+a+"b:"+b); // a:10b:10
  20. }
  21. }
  22. class Son extends Father
  23. {
  24. int a = 20;
  25. public Son(){
  26. // super(); // 系统默认会加上,用来访问父类的空参构造
  27. this(10,10); // 调用自类的有参构造
  28. }
  29. public Son(int a,int b){
  30. super(a,b); // 调用父类的有参构造
  31. }
  32. public void A(){
  33. System.out.println(this.a); //
  34. System.out.println(super.a); //
  35. System.out.println(this.b); //30
  36. // System.out.println(super.c); //错误: c 在 Father 中是 private 访问控制
  37. }
  38.  
  39. }

继承含有代码块的执行顺序:

  1. class Demo_extends2 {
  2. public static void main(String[] args)
  3. {
  4. new B();
  5. }
  6. }
  7. class A
  8. {
  9. static{
  10. System.out.println("静态代码块A");
  11. }
  12. {
  13. System.out.println("构造代码块A");
  14. }
  15. public A(){
  16. System.out.println("构造方法A");
  17. }
  18. }
  19. class B extends A
  20. {
  21. static{
  22. System.out.println("静态代码块B");
  23. }
  24. {
  25. System.out.println("构造代码块B");
  26. }
  27. public B(){
  28. System.out.println("构造方法B");
  29. }
  30. }
  31. /*
  32.  
  33. 静态代码块A
  34. 静态代码块B
  35. 构造代码块A
  36. 构造方法A
  37. 构造代码块B
  38. 构造方法B
  39. */

方法重写概述及其应用:
* A:什么是方法重写
    * 重写:子父类出现了一模一样的方法(注意:返回值类型可以是子父类)
* B:方法重写的应用:
    * 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样

,即沿袭了父类的功能,又定义了子类特有的内容。

方法重写的注意事项:
* A:方法重写注意事项
    * a:父类中私有方法不能被重写
        * 因为父类私有方法子类根本就无法继承
    * b:子类重写父类方法时,访问权限不能更低
        * 最好就一致
    * c:父类静态方法,子类也必须通过静态方法进行重写
        * 其实这个算不上方法重写,但是现象确实如此,(静态只能覆盖静态)
        
    * 子类重写父类方法的时候,最好声明一模一样。

方法重写与重载:
    * Override和Overload(重载)的区别?Overload能改变返回值类型吗?
    * overload可以改变返回值类型,只看参数列表
    * 方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一

致(或者是子父类)的
    
    * 方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。

* 子类对象调用方法的时候:
        * 先找子类本身,再找父类。

final修饰变量的初始化时机:

  1. class Demo3_Final {
  2. public static void main(String[] args) {
  3. Demo d = new Demo();
  4. d.print();
  5. }
  6. }
  7. /*
  8. * A:final修饰变量的初始化时机
  9. * 显示初始化
  10. * 在对象构造完毕前即可
  11. */
  12.  
  13. class Demo {
  14. final int num; //没有后面的num = 10;,就错误了,成员变量的默认初始化值是无效值
  15.  
  16. public Demo() {
  17. num = 10; // 在对象构造完毕前即可
  18. }
  19. public void print() {
  20. System.out.println(num);
  21. }
  22. }

05 面向对象:构造方法&static&继承&方法 &final的更多相关文章

  1. 【Java基础】【08面向对象_继承&方法&final】

    08.01_面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块. B:代码块分类 根据其位置和声明的不同,可以 ...

  2. Java面向对象(static、final、匿名对象、内部类、包、修饰符、代码块)

    面向对象 今日内容介绍 u final u static u 匿名对象 u 内部类 u 包的声明与访问 u 四种访问修饰符 u 代码块 第1章 final关键字 1.1 final的概念 继承的出现提 ...

  3. 【Java基础】【07面向对象-构造方法&静态static】

    07.01_面向对象(构造方法Constructor概述和格式)(掌握) A:构造方法概述和作用 给对象的数据(属性)进行初始化 B:构造方法格式特点 a:方法名与类名相同(大小也要与类名一致) b: ...

  4. oopday02(面向对象-构造方法&静态static)

    面向对象之封装 01_面向对象(构造方法Constructor概述和格式) * A:构造方法概述和作用 * 给对象的数据(属性)进行初始化 * B:构造方法格式特点 * a:方法名与类名相同(大小也要 ...

  5. JavaScript面向对象继承方法

    JavaScript的出现已经将近20多年了,但是对这个预言的褒贬还是众说纷纭.很多人都说JavaScript不能算是面向对象的变成语言.但是JavaScript的类型非常松散,也没有编译器.这样一来 ...

  6. java中static特殊性和final(static成员直接被访问,this不能用在static方法中,static不可访问非static)

    java的static关键字 java中,static修饰的成员变量和成员方法叫静态变量和静态方法,不依赖类特定的实例,被类的所有实例共享. 静态变量或类变量 和 实例变量,区别是: 静态变量在内存中 ...

  7. static变量 方法 类 和final

    static变量:声明为static的变量实质上就是全局变量.当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量.静态变量与静态方法类似.所有此类实例共 ...

  8. javaScript面向对象继承方法经典实现

    转自原文javaScript面向对象继承方法经典实现 JavaScript的出现已经将近20多年了,但是对这个预言的褒贬还是众说纷纭.很多人都说JavaScript不能算是面向对象的变成语言.但是Ja ...

  9. 第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解

    第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解 一.    引言 上两节介绍了构造方法的语法及参数,说明了构造方法是Python的类创建实例后首先执行的方法,并说明如果类 ...

随机推荐

  1. CSS3 的box-shadow进阶之 - 基础知识篇

    box-shadow被认为是CSS3最好的特性之一,发挥想象力,搭配其它属性,可以做出很多好看的效果(如下图,将会放在下一篇文章讲解),这篇文章主要讲一下box-shadow的基础知识.       ...

  2. Win10系列:UWP界面布局基础3

    在实际项目开发中,为控件属性赋值时经常会遇到属性值在设计时处于未知状态,而只有在应用程序运行时才能获取到.这种情况下,直接赋值方法是无法满足的,可以使用XAML标记扩展(Markup Extensio ...

  3. Win10系列:VC++调用自定义组件2

    (2)C#调用WinRT组件 在解决方案资源管理器中右键点击解决方案图标,选择添加一个Visual C#的Windows应用商店的空白应用程序项目,并命名为FileCS.接着右键点击FileCS项目的 ...

  4. QuickStart系列:docker部署之Mysql

    这里配置只做开发用,生产环境请根据需要修改或自行搜索其他说明 使用docker安装mysql,目前版本5.7.4(当前时间 2018.1.11) 环境 vm: Centos7 镜像来源 https:/ ...

  5. Saiku部分函数解析(八)

    Saiku函数解析 1.   now()  :  获取当前日期 直接使用即可 2. IIF(logic_exp, string, string): IIF判断,logic_exp是逻辑表达式,结果为t ...

  6. 一: Docker的概念

    附件:https://files.cnblogs.com/files/chaos-li/docker-k8s-devops-master-9287a2ca56433ca076078b564de9488 ...

  7. [整理]Kadane算法

    仅能操作一次时,需每次观察是否有为负情况置零.多次操作时,仅需判断是否后者大于前者. leetcode 53.121.122 [代码] class Solution { public int maxS ...

  8. 5.8 C++重载自增与自减操作符

    参考:http://www.weixueyuan.net/view/6386.html 注意: 自增“++”与自减“--”都是一元操作符,其前置和后置两种形式都可以被重载. 前置 stopwatch ...

  9. Linux文件系统命令 lsof

    命令名:lsof 功能:查看某个端口被占用情况,在配置服务器端口的时候,为了避免冲突,可以通过这个命令查看将要被使用的端口是否被占用. 用法:加-i 参数 eg: renjg@renjg-HP-Com ...

  10. day 26面向对象 的封装 接口 抽象

    大纲分析 # 面向对象# 类 :一类具有相同属性和方法的事物 #类的定义:class #类中可以定义的方法种类: #普通方法 self 对象 #类方法 cls @classmethod 类/对象 #静 ...