static修饰方法(静态的成员方法):

访问方式:

  1. 可以使用对象进行访问                   对象.静态函数名();
  2. 可以使用类名进行访问                   类名.静态函数名();

静态函数要注意的事项:

  • 静态函数是可以使用类名或者对象进行调用的,而非静态函数只能使用对象进行调用
  • 静态的函数可以直接访问静态的成员(函数与变量),但是不能直接访问非静态的成员。         原因:静态函数是可以使用类名直接调用的,这时候可能还没有存在对象,而非静态的成员数据是随着对象的存在而存在的。
  • 非静态的函数是可以直接访问静态与非静态的成员             原因:非静态函数只能由对象调用,当对象存在的时候,静态数据老早就存在了,而非静态数据也随着对象的创建而存在了。
  • 静态函数不能出现this或者super关键字                原因:因为静态的函数是可以使用类名调用的,一旦使用类名调用,这时候不存在对象,而this关键字是代表了一个函数的调用者对象,这时候产生了冲突。

推荐使用类名直接访问静态的成员   (节省内存     简便)

静态的数据的生命周期:  静态的成员变量数据是优先于对象存在的。

静态代码块是在类.calss文件加载到内存的时候就马上执行的。

static什么时候修饰一个函数呢?          答:如果一个函数没有直接访问到非静态的成员时,那么就可以使用static修饰了。    一般用于工具类型的方法

静态函数不能访问非静态的成员?   不正确(不能直接访问)        静态函数只要存在有对象,那么也可以访问非静态的数据。 只是不能直接访问而已。

静态的成员变量与非静态的成员变量的区别:

作用上的区别:

  1. 静态的成员变量共享一个数据给所有对象使用。
  2. 非静态的成员变量的作用是描述一类事物的公共属性

数量与存储位置上的区别:

  1. 静态成员变量是存储方法区内存中,而且只会存在一份数据
  2. 非静态的成员变量是存储在堆内存中,有n个对象就有n份数据

生命周期的区别:

  1. 静态的成员变量数据是随着类的加载而存在,随着类文件的消失而消失。
  2. 非静态的成员数据是随着对象的创建而存在,随着对象被垃圾回收器回收而消失。

main函数的详解:

  • public    原因: 为了保证让jvm在任何情况下都可以访问到main方法
  • static (静态)静态可以让jvm调用main函数的时候更加的方便。不需要通过对象调用。
    •   不使用static修饰的麻烦:

      • 需要创建对象调用
      • jvm不知道如何创建对象,因为创建对象有些是需要参数的,参数传递什么东西呢?
  • void   没有返回值  因为返回的数据是给jvm。而jvm使用这个数据是没有意义的,因为返回的时候意味这main函数结束了,所以这个数据也没用了。所以就不要了。
  • main   函数名。    注意:main并不是关键字,只不过是jvm能识别的一个特殊的函数名而已。
  • arguments    参数        担心某些程序在启动时需要参数。

单例设计模式:保证一个类在内存中只有一个对象

模式:模式就是解决一类问题的固定步骤。

单例设计模式的步骤:(饿汉单例设计模式)

  1. 私有化构造函数
  2. 声明本类的引用类型变量,并且使用该变量指向本类对象
  3. 提供一个公共静态的方法获取本类的对象
public class SingleCreative {

    public static void main(String[] args) {
// TODO Auto-generated method stub
Single1 s1=Single1.getInstance();
Single1 s2=Single1.getInstance();
System.out.println(s1==s2);
} } class Single1{ private static Single1 s=new Single1();
private Single1() {} public static Single1 getInstance() {
return s;
}
}

懒汉单例设计模式:

  1. 私有化构造函数
  2. 声明本类的引用类型变量,但是不要创建对象
  3. 提供公共静态的方法获取本类的对象,获取之前先判断是否已经创建了本类的对象,如果已经创建了,那么直接返回对象即可,如果还没有创建,那么先创建本类的对象,然后再返回
public class Single {

    public static void main(String[] args) {
// TODO Auto-generated method stub
Single2 s1=Single2.getInstance();
Single2 s2=Single2.getInstance();
System.out.println(s1==s2);
} }
class Single2{ private static Single2 s;
private Single2() {} public static Single2 getInstance() {
if (s==null) {
s=new Single2();
}
return s;
}

推荐使用:饿汉单例设计模式    (因为懒汉单例设计模式会存在线程安全问题  )

继承:继承是通过关键字extends体现的       父类(超类 基类)   子类

继承的格式:

  class  类名1   extends   类名2{

}

继承要注意的事项:

  1. 千万不要为了减少重复代码而去继承,只有真正存在着继承关系的时候才去继承。
  2. 父类私有的成员不能被继承。
  3. 父类的构造函数不能被继承。
  4. 创建子类对象时默认会先调用父类无参的构造函数。
    1.   为什么要调用父类的构造方法呢?这样子做的意义在哪儿?
      • 调用父类的构造方法是可以初始化从父类继承下去的属性的。

super关键字:super关键字代表了父类空间的引用。

super关键字的作用:

  1. 子父类存在着同名的成员时,在子类中默认时访问子类的成员,可以通过super关键字指定访问父类的成员
  2. 创建子类对象时,默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法
public class Demo1 {

    public static void main(String[] args) {
// TODO Auto-generated method stub
Zi z=new Zi("狗娃","铁蛋");
z.print();
} }
class Fu{
int x=10;
String Name;
public Fu() {}
public Fu(String name) {
this.Name=name;
}
public void eat() {
System.out.println("小头爸爸吃番薯");
}
}
class Zi extends Fu{
int x=20;
String name;
public Zi(String name,String Name) {
this.name=name;
super.Name=Name; }
public void print() {
super.eat();
eat();
System.out.println("名字=:"+super.Name);
}
public void eat() {
System.out.println("大头儿子吃龙虾");
}
}

super关键字调用父类构造方法要注意的事项:

  1. 如果在子类的构造方法上没有指定调用父类的构造方法,那么java编译器会在子类的构造方法上面加上super()语句。
  2. super关键字调用父类的构造函数时,该语句必须要是子类构造函数中的第一个语句。
  3. super和this关键字不能同时出现在同一个构造函数中调用其他的构造函数。因为两个语句都需要在第一位。

super关键字和this关键字的区别:

  1. 代表的事物不一致
    1. super关键字代表的是父类空间的引用     (代表一块内存空间)
    2. this关键字代表的是所属函数的调用者对象
  2. 使用前提不一样
    1. super关键字必须要有继承关系才能使用
    2. this关键字不需要存在继承关系也可使用
  3. 调用构造函数的区别
    1. super关键字是调用父类的构造函数
    2. this关键字是调用本类的构造函数

方法的重写:子父类出现了同名的函数,这个我们就称为方法的重写    (父类的功能无法满足子类的需求时)

方法重写的前提:必须要存在继承的关系。

方法重写要注意的事项:

  1. 方法重写时,方法名与形参列表必须一致。
  2. 方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。    (public的权限比不写的要大一点儿)
  3. 方法重写时,子类的返回值类型必须要小于或者等于父类的返回值类型。
  4. 方法重写时,子类抛出的异常类型要小于或者等于父类抛出的异常类型。   Exception (最坏)     RuntimeException(小坏)

instanceof关键字:

instanceof的作用:判断一个对象是否属于指定的类别。

instanceof的使用前提:判断的对象与指定的类别i必须要存在继承或者实现的关系。   (可以对象是子类   也可以对象是父类    判断的类别是它的子类)

instanceof关键字的使用格式:   对象    instanceof   类别     (是  返回true    不是  返回false)

Java学习笔记(8)的更多相关文章

  1. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  2. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  3. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  4. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  5. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  6. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  7. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  10. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

随机推荐

  1. 创建Fragment和传递数值

    下面在扩展一下创建Fragment和传递数值 如果我们不需要传递数值,那就直接可以在宿主activity中,跟平常一样创建fragment,但是如果我们需要传递数据的话,可以使用newInstance ...

  2. 广度优先算法(BFS)与深度优先算法(DFS)

    一.广度优先算法BFS(Breadth First Search) 基本实现思想 (1)顶点v入队列. (2)当队列非空时则继续执行,否则算法结束. (3)出队列取得队头顶点v: (4)查找顶点v的所 ...

  3. 某p2p存在通用上传漏洞

    google链接查找: inurl:shouyi.asp inurl:itemlist_xq.asp?id= 很多存在Fckeditor上传链接: FCKeditor/editor/filemanag ...

  4. android隐藏EditText光标

    在android中如果有EditText,那么在载入时,光标会默认显示在第一个EditText框中,如果不想显示光标,且也不想把该光标移动到下一个EditText框,最简单的方法是在该 EditTex ...

  5. OOM有哪些情况,SOF有哪些情况

    OOM 1.全称为OutOfMemoryError异常,如果虚拟机在扩展栈时无法申请足够的内存空间,抛出它: 2.Java heap异常:java.lang.OutOfMemoryError:Java ...

  6. 【bzoj1649】Cow Roller Coaster

    傻逼dp题. dp[i][j]表示用了i长度已花费成本j所能得到的价值. 然后枚举一下铁轨随便做了. 不行就sort一下. #include<bits/stdc++.h> #define ...

  7. MySQL的数据库引擎的类型(转)

    腾讯后台开发电话面试问到数据库引擎选用的问题,这里补习一下. 本文属于转载,原文链接为:http://www.cnblogs.com/xulb597/archive/2012/05/25/251811 ...

  8. J2EE MySQL Date数据保持一致解决方案

    1.设置MySQL时区,明确指定 MySQL 数据库的时区,不使用引发误解的 CST show variables like '%time_zone%';set global time_zone = ...

  9. [设计模式-行为型]模板方法模式(Template Method)

    一句话 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. 概括

  10. 《深入浅出MyBatis技术原理与实战》——7. 插件

    在第6章讨论了四大运行对象的运行过程,在Configuration对象的创建方法里我们看到了MyBatis用责任链去封装它们. 7.1 插件接口 在MyBatis中使用插件,我们必须使用接口Inter ...