黑马程序员技术交流社区

标题: 初学Java基础的经历小结 [打印本页]

作者: 杨猛    时间: 2018-3-24 23:55
标题: 初学Java基础的经历小结

学习总结,每个人都有自己的学习方法,就像遇见一个事物,每个人都有自己不同的见解.所以交流变成了社会进步的阶梯,只有与更多的人交流才能够更有效的提高自己!下面我分享一下关于这半个多月以来自己所学到的java的一些总结:
总结个人感觉还是写一些我自己认为比较重要的知识吧.首先,对于java要有了解,知道java是什么,能够干什么.并且了解java的发展史.这部分虽然老师说只需要了解,但我觉得还是很重要的.接着便是java语言的特点:简单性、解释性、高性能、开源、跨平台等,最重要的就是面向对象和跨平台.什么是跨平台:Java程序想要在不同系统平台上(windows,linux,mac)运行,需要配置不同系统平台的Java虚拟机(JVM);如何实现跨平台:不同系统平台配备不同的JVM.JVM,JRE,JDK三者的关系
                JVM:翻译官
                JRE:Java运行时环境(JVM + 类库)
                JDK:开发工具(包含JRE)
                总结:我们利用JDK编写代码,最终交给JRE去运行
然后学会了安装和使用JDK,并且如何让JDK在任何位置都能运行的方法:配置环境变量.配置了path环境变量之后有什么好处?
a 这样我们就可以在任意盘符,任意文件去使用javac,java;
b这样的应用程序意味着我们可以在任意盘符,任意文件中去编写我们的代码.
随后便开始进入java语言学习内容.编译过程的注释分为:
a. 单行注释:                //注释内容
b. 多行注释:        /*注释内容
                                  注释内容
                                  注释内容*/
c.文档注释:                /**.......*/
这些注释的作用是:只用于我们解释说明程序和调试所用.
然后便是java里的关键字与标识符的命名规则:
        a包相当于文件夹,一般是公司域名倒着写,例如:com.itheima
                b类或者接口
                        如果是一个单词,首字母大写
                        如果是多个单词,每个单词的首字母都大写
                c方法或者变量
                        如果是一个单词,全部字母小写
                        如果是多个单词,从第二个单词开始首字母大写
                d常量
                        如果是一个单词,全部字母大写
                        如果是多个单词,每个单词之间用_分开
变量和常量,其中变量的定义格式以及使用时的注意事项:
        a:作用域问题
          同一个区域不能使用相同的变量名(我们目前的同一个区域指的就是main方法)
b:初始化值问题
          局部变量在使用之前必须赋值
c:一条语句可以定义几个变量
                        int a,b,c...;
数据类型和数据类型的转换
数据类型四类八种,其中各自的取值范围要牢记.
数据类型的转换:
隐式转换:小的数据类型与大的数据类型运算的时候,小的数据类型会自动提升为大的数据类型.
强制转换:当大的数据类型转换为小的数据类型时,可能会损失精度,所以不建议使用强制转换.如果一定要使用的话就在数据前面增加强制转换符.
运算符:
a 算术运算符:+, -, *, /, %.注意其中的 +和%
+ :1 加法操作; 2 正号; 3 字符串的连接符:任何数据类型与字符串相连接都会变成一个字符串.
% :1 当左边的绝对值小于右边绝对值时,结果是左边; 2 当左边的绝对值等于右边或是右边的倍数时,结果是0           3 当左边的绝对值大于右边绝对值时,结果是余数;4 %运算符结果的符号只和左边相等,与右边无关.
b 赋值运算符 = ,+= ,-= ,*= ,/= ,%= .后面5个把运算符左边和右边的数据进行运算,再赋值给左边.
c 关系运算符(也叫比较运算符,也叫条件运算符)
                ==,!=,>,>=,<,<=
                注意事项:
                        1.无论你操作的数据是简单还是复杂,最终得到的结果都是boolean类型
                        2."==" 不能写成"="
d 逻辑运算符
                1.基本的:&,逻辑与,有false则false
                                  |,逻辑或,有true则true
                                  ^,逻辑异或,相同为false,不同为true
                                  !,逻辑非,非false则true,非true则false
                2.特殊的:&&,短路与,左边为false,右边不执行,最终结果与&相同
                                  ||,短路或,左边为true,右边不执行,最终结构与|相同
流程控制语句:可以控制程序的执行流程,包括顺序结构,选择结构,循环结构.其中选择结构的语句的两种if和switch以及两种的不同格式写法,执行流程,注意switch语句中的case穿透问题.循环的三种循环方式和格式,可以试一下3种格式的相互转换以增强记忆.
三种循环结构的区别
                a.for循环和while循环必须先判断条件是否成立,条件成立才会执行循环体
                b.do...while循环至少执行一次循环体
                c.for循环与while循环的区别:
                        如果你想在循环结束后,继续使用控制条件的那个变量,用while循环
                        否则,用for循环,不知道使用哪个循环就使用for循环,因为变量及早的从内存中释放,提高了内存的使用效率
        3).死循环
                两种最简单的死循环格式:
                        while(true) {
                        }
                        System.out.println("------------------");
                        for (; ; ) {       
                        }
控制跳转语句
        1.break语句
                应用场景:switch,循环,跳出循环
        2.continue语句
                应用场景:循环,终止本次循环,继续下次循环
        3.return语句
                应用场景:结束方法
方法:
格式
                修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2) {
                        方法体语句;
                        return 返回值;
作用:提高代码的复用性       
如何定义一个方法:明确返回值类型和参数列表
方法的调用:
                        a.单独调用,但是对于有返回值的方法,单独调用没有意义.
                        b.输出调用,不能用于返回值为void的方法.
                        c.赋值调用(推荐),不能用于返回值为void的方法.       
方法的注意事项:
                        1).方法不调用不执行
                        2).方法与方法是平级关系,不能嵌套定义
                        3).方法中定义的参数之间用逗号隔开
                        4).调用方法的时候不用传递数据类型
                        5).如果方法有明确的返回值,一定要用return带回一个值
方法重载
                在同一个类中,方法名相同,参数列表不同,与返回值类型无关.
数组
a.数组是用来存储同一数据类型的多个值的集合,可以将数组看成是一个容器
        b.数组既可以存储基本数据类型,也可以存储引用数据类型
数组的定义格式:
                        数据类型[] 数组名 = new 数据类型[数组长度];
:
                                存储基本数据类型:
                                        int[] studnetAges = new int[100];
                                存储引用数据类型:
                                        String[] studentNames = new String[100];
动态初始化
                1).什么是初始化?
                        就是为数组开辟连续的内存空间,并为每个数组元素赋值
                2).什么是动态初始化?
                        只给定数组长度,由系统给出每个元素的初始化值
                3).动态初始化格式:
                        数据类型[] 数组名 = new 数据类型[数组长度];
                4).不同数据类型使用动态初始化会有不同的默认值:
                        整数类型:byte,short,int,long默认初始化值都是0
                        浮点类型:float,double默认初始化值都是0.0
                        布尔类型:boolean默认初始化值false
                        字符类型:char默认初始化值'\u0000
内存分配
                a.栈内存:存储局部变量
                b.堆内存:存储new出来的数组/对象
                c.方法区:面向对象部分讲解
                d.本地方法区:和系统相关
                e.寄存器:给CPU使用
静态初始化
                1).什么是静态初始化?
                        在定义数组的时候,直接为每个数组元素赋值
                2).静态初始化格式:
                        数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...}
                        简化格式:
                        数据类型[] 数组名 = {元素1,元素2,...};
        数组操作的两个常见小问题
                a.数组索引越界异常(ArrayIndexOutOfBoundsException)
                        产生原因:访问了不存在的索引
                b.空指针异常(NullPointerException)
                        产生原因:数组已经不指向堆内存了,你还用数组名去访问元素
数组的操作
                a.遍历:拿到数组中的每一个元素
                    数组的长度:arr.length
                        数组的最大索引:arr.length - 1
                b.获取最值
                c.反转
面向对象
面向对象思想特点:
                        1).将我们从执行者变成了指挥者
                        2).将复杂的事情简单化
                面向对象特征:
                        1).封装
                        2).继承
                        3).多态
类与对象
1).如何描述现实世界事物
                        属性        该事物的描述信息(名词)
                        行为        该事物能够做什么(动词)
                        :我们如何描述人?
                                属性:身高,年龄,性别
                                行为:学习,玩耍
                2).如何在代码中描述现实世界事物
                        成员变量:就是属性,和以前定义变量是一样的,只不过位置发生了变化,在类中方法外
                        成员方法:就是行为,和以前定义方法是一样的,只不过没有static关键字
        成员变量和局部变量的区别
                1).定义的位置不同:
                        * 成员变量:在类中方法外
                        * 局部变量:在方法中
                2).在内存中的位置不同:
                        * 成员变量:属于对象,对象在堆内存
                        * 局部变量:属于方法,方法在栈内存
                3).生命周期不同
                        * 成员变量:成员变量随着对象的创建而创建,随着对象的消失而消失
                        * 局部变量:局部变量随着方法的调用而存在,随着方法的弹栈而消失
                4).初始化值不同
                        * 成员变量:有默认初始化值
                        * 局部变量:没有默认初始化值,在使用之前必须赋值
匿名对象
                1).什么是匿名对象
                        没有名字的对象
                2).应用场景
                        a:调用方法,仅仅只调用一次的时候
                        注意:调用多次的时候,不适合,匿名对象调用完毕就是垃圾,可以被垃圾回收器回收
                b:匿名对象可以作为实际参数传递.
封装(重点!!!)
        1.什么是封装
                隐藏对象的属性和实现细节,仅对外提供公共的访问方式(如插板)
        2.封装的好处
                1).提高了安全性
                2).提高了代码的复用性
关键字介绍
        a.private 关键字
                * 是一个权限修饰符
                * 可以修饰成员变量,成员方法
                * 其修饰的成员只能在本类中访问
                注意:私有只是封装的一种体现形式,不能说封装就是私有
        b.this 关键字
                * 代表当前对象的引用
                * 应用场景:区分成员变量和局部变量
构造方法(重点!!!)
        1.概述
                * 给对象的属性进行初始化
                * 构造方法特点:
                        1).方法名与类名相同(大小写一致)
                        2).没有返回值类型,连void都没有
        2.构造方法的重载
                回忆:方法重载:方法名相同,参数列表不同,与返回值类型无关
                构造方法注意事项:
                        1).如果我们没有给出构造方法,系统默认会提供一个无参构造方法
                        2).如果我们已经给出构造方法,系统将不会提供无参构造方法,这个时候如果需要无参构造方法,需要手动给出,建议永远手动给出
        3.给成员变量赋值的两种方式的区别
                1).setXxx()方法:修改属性值
                2).构造方法:给对象中的属性进行初始化
最后希望大家都能拥有一个自己想要的未来






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2