Java学习笔记之面向对象、static关键字
一周Java学习总结
今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字。
面向对象
- 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的。我现在不看书,光靠回忆去想这个特性的解释性语言,只能想到看书时很深刻的一句话,面向对象就是一个更加具体描述一个事件的一种设计方法,就像在公司里面吃饭,面向对象的话就是一个总负责人即类似大厨准备好菜谱什么的,分工下去给下属,每个人负责一个菜,每个人按照自己的秘方去完成,最后总的做出来形成一桌满汉全席。哪一个菜不好吃了,直接可以找到那个负责的进行检查。这样的设计就可以具备通用性和标准模块化,效率有时会更高点。
- 关于面向对象的程序设计三个特点:封装性、继承性、多态性。首先封装性是把对象属性、行为看成一个密不可分的整体封装在独立单位中,一种信息隐蔽的特性其次是继承性:父类与子类的表达与描述就是一种继承性,拥有反映事物一般特性的类,在其基础上派生出反映特殊事物的类。(类是由属性和方法组成)最后是多态性,包括方法重载和对象多态。子类与父类可以相互转换,根据其使用的子类不同完成的功能也不同。
- 类和对象是支撑起整个Java面向对象开发的基本概念单元。类实际上是对象操作的模板,不能直接使用,要通过实例来使用。就像头发(类)借助人(对象)来实现各式各样的装扮。
static关键字
“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”——《Java编程思想》
先讲static关键字并不会影响变量或者方法的作用域。与c/c++的static不同。在C/C++中static是可以作用域局部变量的,但是在Java中切记:static是不允许用来修饰局部变量。
Java中的变量分为成员变量和局部变量;局部变量还分为三种:形参、方法内的局部变量、代码块内的局部变量(作用范围看名字就可以明白,如代码块内的,代码块结束后就开始失效消亡)。成员变量:类体内定义的变量,包括了非静态变量又称实例变量,和静态变量又称类变量。
static字面意思是静态;但是在Java程序中,它是一个标志,作用是将实例成员变为类成员。而且只能修饰在类里定义的成员部分,包括成员变量、方法,内部类、初始化块。不用static去修饰类里的这些成员,它们就属于该类的实例。eg:static int num2 = 20;(这是一个类变量)eg: int num1 = 238;(实例变量)
static修饰的成员属于类,类变量会随着类初始化得到初始化;而没有static修饰的成员变量则属于实例,实例变量随着对象的初始化而初始化。因为在初始化之前一个对象之前,肯定得先初始化该对象所属的类,所以static修饰的时机肯定较实例变量早。
static方法一般称作静态方法,不依赖任何对象就可以进行访问,因此对于静态方法来说,没有this的。注意在静态方法中不能访问非静态成员方法和成员变量。如下图
这里的printIn方法中调用getInfo()会出错,因为静态不能调用非静态。里面会报错“Cannot make a static reference to the non-static method getInfo() from the type BookJava(603979977)”,这英文也很好理解。
下面插入一个例子,更好得去理解static
public class statictest {//考察这个代码的打印情况
//3 第三步
Person person = new Person("Test");
//这里是第一个person参数:test 5运行完4后就开始通过构造器来生成对象,这里Person没有加载过,去找Person
static {
//3有static块,直接运行这一步。所以一开始打印这一句
System.out.println("test static"); }
public statictest() {
System.out.println("test constructor");
//7打印第五句 }
public static void main(String[] args) {
//1主方法入口,第一先读取这里
new MyClass();
}
}
class Person {
//6过来就运行static块,打印第三句
static {
System.out.println("person static");
}
public Person(String str) {
//6打印第一个参数test,第四句
System.out.println("person " + str);
}}
class MyClass extends statictest {
//2继承的是statictest类,所以先看上面的statictest
Person person = new Person("MyClass");
//8运行完stasictest,开始打印这里的person
static{
//4加载statictest完,回来加载MyClass,发现static,直接第二步打印
System.out.println("myclass static");
}
public MyClass() {
System.out.println("myclass constructor");
//9最后运行到这一步,打印出最后一句
}
}
/*答案
test static
myclass static
person static
person Testtest
constructorperson
MyClassmyclass constructor
*/
借鉴网站/博客
Java学习笔记之面向对象、static关键字的更多相关文章
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
- 【原】Java学习笔记016 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // this 关键字 ...
- Java学习笔记--关于面向对象的思考
1.不可改变的类生成对象以及变量的范围 2. 关键词this的使用 3.用类抽象的思想制作软件 4.通过关系模型建立类 5.使用面向对象的范例来设计程序,遵循类设计指导. 已经学习了:怎么定义类已经创 ...
- Java学习笔记(面向对象上)
面向对象(上) 面向对象的特点:封装性(是面向对象的核心思想,将对象的属性和行为封装起来).继承性(主要描述类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展)和多态 ...
- Java学习笔记:04面向对象-内部类_访问修饰符_final
04面向对象-内部类/访问修饰符/final 1.static的介绍 static:关键字,静态的 static的作用是用来修饰类中的成员 2.访问一个类中的某一个成员变量 方法一: _1.创建对象 ...
- 【原】Java学习笔记020 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 成员方法的参数列表 ...
- Java 学习笔记(4)——面向对象
现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...
- 疯狂java学习笔记之面向对象(四) - this关键字
Java中this关键字主要有以下两个方法: 1.this引用 - 可用于任何非static修饰的方法和构造器中,当this用于方法中时,它代表调用该方法的实例/对象;当this用于构造器中时,它代表 ...
- 疯狂java学习笔记之面向对象(八) - static和final
一.static: 1.static是一个标识符: - 有static修饰的成员表明该成员是属于类的; - 没有static修饰的成员表明该成员是属于实例/对象的. 2.static修饰的成员(Fie ...
随机推荐
- 东拼西凑完成一个“前端框架”(4) - Tabs页
目录 东拼西凑完成一个后台 "前端框架" (1) - 布局 东拼西凑完成一个后台 "前端框架" (2) - 字体图标 东拼西凑完成一个"前端框架&q ...
- 【CHRIS RICHARDSON 微服务系列】事件驱动的数据管理-5
编者的话 |本文来自 Nginx 官方博客,是「Chris Richardson 微服务」系列的第五篇文章.第一篇文章介绍了微服务架构模式,并且讨论了使用微服务的优缺点:第二和第三篇描述了微服务架构模 ...
- Openresty快速安装
1. 场景描述 软件老王帮同事初始化服务器,需要安装下Openresty,安装过好多次,但是命令还是记不住,这次又安装记录了下,直接按下面的命令next-next就行了,2-3分钟左右就ok了. 2. ...
- C#中怎样连接数据库并将查询结果转为实体类以及如何加入事务
场景 新建一个程序,需要对数据的表进行查询并将查询结果转换为实体类,然后将多个实体类 再插入到另一个数据库的表中,执行插入的过程中要使用事务. 注: 博客主页: https://blog.csdn.n ...
- git项目创建及在idea工具中使用
1.安装git管理工具 2.在自己github账号上创建一个项目仓库,比如我创建的是renrenView 网页翻译如下: 参数解析如下: 3.本地项目同步到远程仓库步骤 在本地初始化git项目 git ...
- 用Bootstrap做一个历史朝代表
引入CDN,算好需要合并的单元格. <!DOCTYPE html> <html> <head> <!-- 移动设备 --> <meta name= ...
- monkey测试跑多个apk|monkey命令
1.如何跑多个apk的monkey? 黑名单:执行除了黑名单中以外的apk: 白名单:只执行在白名单中的apk. 黑名单的设置方法: a.创建一个名称为blacklist的txt文档,在文件中输入应用 ...
- Java面试题_第一阶段(static、final、面向对象、多线程、集合、String、同步、接口、GC、JVM)
1.1 简述static和final的用法? static:修饰属性,方法,代码块 (1)静态属性:也可叫类变量 类名.属性名 来访问 (共有的类变量与对象无关,只和类有关) 注意:类中的实例变量 ...
- 中移动物联手机端APP软件
https://open.iot.10086.cn/doc/book/device-develop/multpro/sdk-doc-tool/APP.html
- Python活力练习Day1
Day1:输入年月日,判断这一天是这一年的第几天 eg: input : 2019-02-01 output : 32 data = list(input('please input ...