Java学习笔记 - Chapter 1
写在前面:
该学习笔记基于《Head First Java》一书,仅供个人参考备忘使用,可能会存在诸多问题,也会随着学习的推进不断修改,因此请酌情将其当作参考。
文章目录
- Java程序的基本结构:
- 两类文件:
- 源文件:.java
- 可执行文件:.class
- Java程序结构:
- class
- 方法
- 花括号{}
- 分号;
- 面向对象?
- 对象的组成部分
- 实例变量
- 方法
- 对象的创建方式
- 基础知识
- 关键字
- 变量
- 按照定义位置分类:
- (1)局部变量(local variable)
- (2)实例变量(instance variable)
- 按照定义类型来分类:
- (1)primitive主数据类型
- (2)对象引用类型
- 垃圾收集机制
- 全局变量?
Java程序的基本结构:
两类文件:
源文件:.java
包含显式编写的java源代码
可执行文件:.class
经过编译之后,产生的由字节码组成的文件,可以直接运行
(不同于C语言中会生成一个.exe文件作为可执行文件)
Java程序结构:
源文件>类>方法>语句
代码形式:
public class learning {public static void main(String[] args) {System.out.println("Hello!");}}
这是一个最基本的java程序,需要至少含有一个class、一个main()方法。
Java程序会默认从调用的类中的main()方法开始运行,若调用的类中没有main()方法,则会在运行时出错。
class
类,是编译生成的文件单位,也是运行java程序时所需要调用的东西。
通常一个.java源文件中会含有若干个class,其中只能有一个是public class,且这个class的类名必须要与源文件的名字保持一致;其余的类名可以在命名允许的范围内随意命名。
通过命令行编译的指令:
javac filename.java
当代码无误时,会基于filename.java源文件中编写的所有class,生成若干个.class文件。
编译器并不会要求在一个.java文件中必须要有一个main()方法,但想要得到可运行的程序,必须在某个类中包含一个main()方法作为入口点。
通过命令行运行java程序(实际上是某个class文件)的指令:
java classname
注意在运行时类文件是不需要加.class后缀的。
方法
有时也被称为函数(在面向过程的语言中较多),在面向对象的Java语言中,作为类的一种附属物而存在。换言之,方法不可能单独存在于类之外。
花括号{}
Java语言中的花括号是界定类、方法的标识符,一个类中的所有成分全都在同一个花括号下,而一个方法中的所有语句,也同样在一个花括号中。
分号;
Java语言承袭了C语言用分号分隔语句的习惯。
面向对象?
不同于面向过程的编程思想,面向对象(OOP)中,一切都是对象。
类是对象的模板,创建一个对象,即是对类的实例化。
下面这张表简要地描述了类和变量中的成分之间的对应关系:
类 | 对象 | |
---|---|---|
变量 | 实例变量(instance variable) | 状态 |
方法 | 方法 | 行为 |
对象的组成部分
结合具体代码来简要说明:
class People {private String name;public void setName(String theName) {name = theName;}public void getName() {return name;}
}public class test {public static void main(String[] args) {People me = new People();me.setName("Ordinary");String myName = me.name;System.out.println(myName);}
}
实例变量
体现对象的状态。
如上面的private String name,即表征了生成的people对象的名字这一特性。
方法
方法表征了对象能够做出的行为。
面向对象的语言,在创建类时,一般会基于所有的实例变量设置getter和setter方法,隐式地对实例变量进行存取。上面的setName和getName即是用于设置和读取实例变量name的方法。
(Java使用private标识符标记变量、方法的私有性质,使得其仅可在类的内部被使用,后续在封装中会更加详细地介绍)
对象的创建方式
new className()
Java中对象的创建使用的是new关键字,new className()整体返回所创建对象的引用,可以将其赋值给同类型的对象引用类型变量(关于变量类型,下面会详细介绍)。
基础知识
所有编程语言都绕不开基础语法。
关键字
Java中的关键字,我个人感觉相比C语言要复杂一些,毕竟C还是面向过程的。先介绍一些初学者比较常用的吧:
关键字 | 用途 |
---|---|
public | 声明公有,即可在程序内部任意位置进行使用 |
private | 声明私有,指某些变量、方法仅可用于类中 |
class | 定义类 |
interface | 定义接口 |
abstract | 用于修饰类,表明类是抽象类 |
extends | 用于修饰类,表示类的继承关系 |
implements | 实现接口 |
new | 用于创建新的对象 |
static | 表明变量或方法是静态的 |
try/catch | 尝试执行某个代码段,并伺机捕捉异常 |
throw | 抛出异常 |
另外一些诸如if、else、while等表达基本逻辑的关键字,与C语言基本一致,故在此不过多赘述。
变量
按照定义位置分类:
(1)局部变量(local variable)
定义在方法中,仅可在此方法内部被使用。
(2)实例变量(instance variable)
定义在类中、方法外(一般来说,只有创建了相应类的对象,才会有实例变量这一概念,但静态变量属于特例,静态变量会在一切对象创建之前先被实例化。实例变量在一些其他语言中常被称为类的属性),根据其公有、私有性质,有不同的使用标准。
按照定义类型来分类:
(1)primitive主数据类型
也就是Java中最基础的一些类型,包含以下几类:
类型 | 位数 | 值域 |
---|---|---|
boolean | 由Java虚拟机决定 | true/false |
char | 2 bytes(16 bits) | 0~65535 |
byte | 1 bytes(8 bits) | -128~127 |
short | 2 bytes(16bits) | -32768~32767 |
int | 4 bytes(32 bits) | -2147483648~2147483647 |
long | 8 bytes(64 bits) | 太大了…… |
float | 4 bytes(32 bits) | 规模可变 |
double | 8 bytes(64 bits) | 规模可变 |
(2)对象引用类型
“对象引用类型”这一概念是面向对象的语言与面向过程的语言的一大区别。
面向过程的语言中,变量通常是如此定义的:
type variable = value;
但创建新的对象,却与这种方式有一些不同:
calssType object = new classtype();
二者最大的区别,在于新的关键字new。
new这个关键字,代表在堆区(heap)上创建一个对象,并返回对该对象的“引用”。
由于类大多是程序编写者自己创建的,因此其占用空间是不确定的,也就是说,不能再像之前对于primitive主数据类型的那样,为以类为模板创建的对象分配一个固定的存储空间(通常这种固定式的存储空间存在于栈(stack)中)。故面向对象的语言采取了一种全新的模式,使用“堆”上的内存空间来存储对象本身,而使用“栈”中的对象引用类型变量来取用对象的属性和方法。尽管各种对象的大小可能各有不同,但所有“引用”的大小都是相同的。
对象引用类型变量采用句点运算符来对所引用对象的属性及方法进行调用:
object.variable;
object.method();
用书上的话来说,变量object实际上就是个“遥控器”,而对象是电视机本身。
垃圾收集机制
Java的堆区存在垃圾收集机制。当某些对象不再被任何变量所引用时,Java虚拟机就会将其标记为“可回收”的,并在适当的时机将其清理。
全局变量?
Java中并没有严格的全局变量概念,但是有一类变量可以看作是全局性质的变量。
public static final type variable = xxx;
使用public修饰,代表该变量可被任意调用;
使用static修饰,代表该变量在对象被创建之前就会被加载,且对所有对象保持一致(即“静态”的概念,之后会详细介绍);
使用final修饰,代表变量在子类或者其他位置不可被覆写或修改。
“我々は背負った罪によって道を選ぶではなく、選んだ道で罪を背負うべきだからだ。”
——蒼崎橙子
To be Continue……
Java学习笔记 - Chapter 1相关推荐
- java学习笔记11--Annotation
java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...
- java学习笔记13--反射机制与动态代理
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...
- 准备写java学习笔记
准备写java学习笔记 java int 转载于:https://blog.51cto.com/cryingcloud/1975267
- Java学习笔记--StringTokenizer的使用
2019独角兽企业重金招聘Python工程师标准>>> Java Tips: 使用Pattern.split替代String.split String.split方法很常用,用于切割 ...
- java学习笔记12--异常处理
java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...
- Java学习笔记(十)--控制台输入输出
输入输出 一.控制台输入 在程序运行中要获取用户的输入数据来控制程序,我们要使用到 java.util 包中的 Scanner 类.当然 Java 中还可以使用其他的输入方式,但这里主要讲解 Scan ...
- java学习笔记16--I/O流和文件
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input Output)流 IO流用来处理 ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
最新文章
- CSS3选择器 :read-only选择器 CSS3选择器 :read-write选择器
- oracle期末重点,oracle期末复习题及答案
- 手势检测的回调方法中onfling与onscroll的区别
- 界面按钮太多 聊天机器人都快被玩坏了
- 《深入理解OSGi:Equinox原理、应用与最佳实践》一2.2 Bundle
- ie 浏览器布局中的 offset
- 求二叉树中以x为根的子树的深度_还在玩耍的你,该总结啦!(本周小结之二叉树)...
- 对互联网海量数据实时计算的理解
- freeswitch 用户配置详解_FreeSwitch安装配置记录-阿里云开发者社区
- spring异常:Could not resolve placeholder
- 在大米云主机中采用CentOS 6.5 部署Redmine 3.3
- 图表无法显示中文字,都是方框框?
- vi删除选中内容_vi 删除指令的使用
- java queue GATK_gatk4使用总结
- Python如何导入自己编写的py文件(.pyx文件 .pyd文件)
- ArcMap投影后的数据添加经纬网
- 据说程序员写完代码是这个样子,99%的人都中枪了
- 万能命令:wn.run/
- 【重要】TCRT5000系列光电对管的使用 基于STM32+Cubemax
- linux打开csv命令,在Linux命令行中将xlsx转换为csv