面向对象(基础)
面向对象(基础) 序言 面向对象的三条主线: 类及类的成员:属性、方法、构造器;代码块、内部类 特征:封装性、继承性、多态性 其他关键字:static、package、import 概述 对比面向对象和面向过程 POP(Procedure Oriented Programming)以函数为单位,是一种执行者的思维 OOP(Object Oriented Programming)以类为单位,是一种设计者的思维 面向对象编程的两个核心概念:类(Class)和对象(Object),类是具有相同特征的集合,是抽象的;对象是实际存在的该类事物的个体,是具体的。 面向对象完成具体功能的操作流程: 创建类,设计类的成员; 创建对象; 通过对象,调用其内部声明的属性或方法,完成相关功能。 类的使用参考代码: 1234567891011121314151617public class PersonTest {//测试类 public static void main(String[] args) { Person p1= new Person();//创建对象 p1.name="Miku";//通过对象,调用其内部声明的属性或方法 p1.id=233; p1.age=14; p1.gender='女'; System.out.println("姓名:"+p1.name+"标号:"+p1.id+"年龄: "+p1.age+"性别: "+p1.gender); }}class Person{//创建类,设计类的成员; String name; int id; int age; char gender;}//运行结果: 姓名:Miku标号:233年龄: 14性别: 女 类中对象的内存解析 Java中内存结构的划分:虚拟机栈、堆、方法区;程序计数器、本地方法栈 虚拟机栈:以栈帧为基本单位;入栈对应方法的执行;方法的局部变量会存储在栈帧中 堆空间:new出来的结构(数组、对象)1.数组的元素2.对象的成员变量。 方法区:加载的类的模板结构。 参考一段代码: 1234567Person p1= new Person();p1.age=12;class Person{//创建类 String name; int id; int age;} 在内存上,使用new之后,会在堆里创建一段空间用于存储name、id、age,而p1在栈中存储这段空间的首地址。之后对p1.age进行赋值,是在堆中改变了age的值。 可以总结出引用数据类型存储的其实都是地址 类的成员之一:属性 变量可以按类型分类也可以按照声明位置分类,按位置可以分为成员变量和局部变量。 属性的别名:成员变量、field(字段、域) 成员变量和局部变量对比 位置不同 内存分配不同:局部变量保存在栈、成员变量保存在堆 生命周期: 成员变量随对象产生随对象消亡,局部变量在栈帧中分配,随方法出栈消亡 成员变量可用权限修饰符修饰,局部变量不行 默认值:局部变量没有默认初始化值,属性都有其默认初始化值 类的成员之二:方法 Java的方法不能独立存在,必须定义在类里 方法的声明格式: 权限修饰符 + [其他修饰符] + 返回值类型 + 方法名(形参列表)[throws 异常类型]{//方法头 //方法体 } 调用本类方法:方法可以调用本类其他方法,也可以调用自己(递归) return的使用: 结束方法 将结果返回给其调用者 形参和实参 形参:定义方法时,声明的变量成为形参 实参:调用时实际传给形参的变量/常量/表达式 再谈方法 方法是设计类的核心,能否实现功能主要看方法。下面就重载、可变个数形参、值传递机制、迭代等方法的应用再进行补充说明。 重载(overload) 重载是指同一个类中两个方法名相同的情况,要讨论的核心其实是Java编译其辨别不同方法的机制 是否为不同方法仅与方法名和形参列表有关 注:形参列表不同只与形参的类型有关,而与其名称无关。相应的,类型相同,顺序不同也是两个方法。 关于自动类型提升,编译方面会能不自动提升就不自动提升。 可变个数形参(jdk5.0的新特性) 场景:形参类型确定,个数不确定 格式:(类型 ......
Java基本语法
0.简单的DOS命令 md(生成文件),cd(跳转路径),rd(del)(删除文件),dir(显示文件目录) 1.JAVA程序基本结构 JAVA执行的基本流程: 编写.java文件,之后由javac.exe文件生成字节码文件(.class),再由java.exe运行。 简单的HelloWorld程序: 12345class HelloChina{ public static void main(String[] args){ System.out.println("Angel Beats!"); }} 在class内部,可以定义若干方法(method)。 关于命名 JAVA严格区分大小写,而Windows不区分大小写。 类名要求: 类名必须以英文字母开头,后接字母,数字和下划线的组合 习惯以大写字母开头,使用驼峰命名 方法名、变量名: 和类名一样,不过首字母要小写,使用小驼峰命名 关于注释 JAVA特有:文档注释 1234/*** look in my eyes!* @KuoZ*/ 练习题 1.为什么JAVA是半编译半解释型语言? 2.内存泄漏和内存溢出是什么,JAVA还会发生这些问题吗?能否举一个例子? 3.一个JAVA文件里能否声明多个类,有什么限制? 2.变量和运算符 关键字和标识符 JAVA里一共有50个关键字。false和true可以当做关键字来看待。 还有goto和const两个保留字 可以自己起名的都是标识符,包括类名、方法名、变量名、接口名等。 变量 JAVA中变量的两种类型 基本数据类型 整型 byte short int long 浮点型 float double 字符型 char 布尔型 boolean 引用数据类型(先记录三类) 类 数组 接口 基本数据类型 整型 分别占1、2、4、8个字节。与c语言不同,JAVA只定义了带符号的整型。long型结尾需要加L/l。不加则为int类型,但是int类型可以赋值给long型,可以正常运行。 浮点型 分别占用4、8字节。对于float类型,需要加上f后缀,否则默认为double类型。 ps:十进制小数和二进制小数并不能一一对应,二进制小数不能准确表示0.1、0.01……这些10的负次幂的数。所以说对于语句System.out.println(0.1+0.2);输出的结果不等于0.3。 字符型 占两个字节,JAVA的char类型除了用ASCII码外,还可以用Unicode码赋值。综合下来可以有四种形式对char型赋值 char name = '中' 用一对单引号括起来进行赋值,单引号内有且仅有一个字符 char name='\u0036'单引号内是\u+相应的Unicode码 char name='\n'单引号内是转义字符 char name=51直接用ASCII码对字符进行幅值 布尔型 布尔型只有true和false两种取值,且不能用1、0代替。在编译时不谈boolean型的占用字节,在内存分配上,实际上占用4个字节。 1ps:JVM的内存分配问题:小于4个字节的分配1个slot(slot,槽位,等于4个字节),大于四个字节的分配2个slot。 var关键字 使用var时,会自动根据赋值语句来判断变量类型,实际上也就是省了写变量类型。 注意:var关键字在JAVA10之后才有。 常量 使用final表示常量类型,如final int AGE = 20 。常量的命名应全大写,使用常量以避免被人诟病”MagicNumber”。 作用域(scope) 定义作用域时,要遵循作用域最小原则,尽量少定义全局变量,也不要重复使用变量名。 基本数据类型变量运算规则 对于变量之间运算问题,变量的类型问题尤为重要。 除布尔型的其他7种基本数据类型可以参与运算,运算时候的变量类型问题如下: 自动类型提升 自动类型提升用于将容量小的变量类型自动提升为容量大的类型(ps:容量指的是表示数的范围大小而非所占内存大小) 结论: graph LR A[byte]==>B[int] C[short]==>B D[char]==>B B==>E[long] E==>F[float] F==>G[double] 整型常量默认为int型,浮点型默认为double型。byte、short、char之间运算结果为int型。 强制类型转换 强制类型转换用于将变量强制转换为指定类型。使用“( )“,”(...
主题~
一点牢骚 我自己的博客网站基本配置好了,选了张涩涩的miku当头图,或许这样能让我写代码和文的时候肾上腺素提升从而提高效率呢(bushi)。 好像很多技术党都有一个自己博客,我也就东施效颦一下,但是其实更多的原因还是因为他人,也就是跟风。一直以来,我好像都缺乏一个内源的动力和目标,也没有什么自己的想法和意志,一直都是在不停地模仿。但是那又如何呢? 我真的很讨厌自己去做选择,既没有能做出正确决定的视野,连做出决定的决心也没有。算了,我也不想过分自贬,就这样吧。 言归正传,用了一天半搭建的网站还是可以庆祝一下的,也是有了一个个人的空间,或许可以成为我之后若干年还活着的证明。 整体来讲,我想写一个是学习笔记,专业的技术文我也没有写的实力,还有就是一个经验积累,最后就是一些随想,当日记写呗就。 最后附一张可爱的公主殿下!(typora的图片直接插入功能太好用了)