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 ...
随机推荐
- 要想深入理解mysql索引?这16个点你必须要了解!
前言 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQ ...
- 4种MySQL分页查询优化的方法,你知道几个?
前言 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点.下面简单说一下我知道的 ...
- 表格数据js初始绑定
html调用js文件,js初始化时发送Ajax请求,获取页面数据将其写入在html页面上展示 html <div class="card-body"> <!-- ...
- 深入理解this原理(JavaScript)
文章目录 JavaScript中this的原理 一.问题的由来 二.内存的数据结构 三.函数 四.环境变量 JavaScript中this的原理 一.问题的由来 学懂 JavaScript 语言,一个 ...
- Python高级应用程序设计任务
Python高级应用程序设计任务要求 用Python实现一个面向主题的网络爬虫程序,并完成以下内容:(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台) 一.主题式网络爬虫设计方案( ...
- css重点知识和bug解决方法
1.图片向下撑大3像素问题 在一个盒子里面放一张图片,默认情况下,图片会向下撑大3像素,有以下几种解决方法: 1.1 给图片添加display:block: 1.2 给图片添加 float:left: ...
- JS---案例:无缝的轮播图
案例:无缝的轮播图 w <!DOCTYPE html> <html> <head lang="en"> <meta charset=&qu ...
- iOS开发makeKeyAndVisible和makeKeyWindow区别
参考链接:https://www.jianshu.com/p/c7647caa8bd1
- 集合系列 Map(十四):WeakedHashMap
WeakedHashMap 也是 Map 集合的哈希实现,但其余 HashMap 的不同之处在于.其每个节点的 value 引用是弱引用,可以方便 GC 回收. public class WeakHa ...
- K 折验证
为了在调节网络参数(比如训练的轮数)的同时对网络进行评估,你可以将数据划分为训练集和验证集.但由于数据点很少,验证集会非常小(比如大约100 个样本).因此,验证分数可能会有很大波动,这取决于你所选择 ...