重中之重-----------基础
底层结构决定上层建筑,所以,基础很重要。
自信心
在开始说基础之前先说明一下自信心的重要性,没有自信心学什么东西都学不好。
核心自信*****
核心自信从三个方面来说
客观自信
通过实践,行动,积累成功经验,来反哺主观自信。
主观自信
改变思维认知,扭转以往的错误思维。
生理状态
决定是否有能量面对主观焦虑。
以上是正确的自信心培养方式, 举例一些反例,来说明核心自信和条件自信的区别:
大众价值观(有钱了就自信)
裙带关系(有朋友陪伴就觉得自信)
特殊技能(对某方面相对擅长或有经验,在使用该技能时,就觉得自信)
角色扮演(当自己强制扮演某个角色时就特别有自信,当被戳穿时,就会失去自信)
总结:
通过外在条件增强自己的自信心。 就是需要按下一个按钮才能提升自己的自信心。 过度依赖条件自信,会减弱自信。
再一个就要说如何学习,好多人都是一腔热血一身混劲不知道怎么用:
学别的不知道,但是学java做好以下入个门是绝对可以的了。
如何学习?
关于实践:
多练
多调
多想
方向+勤奋+坚持
程序员是敲出来的
不要机械性的照抄,最好能够将老师的代码整理出一个思路,将老师的代码关闭之后去实现这个思路。这样慢慢的编程思想就有了。
关于阅读:
----------------------这一页是摘自 Head First 设计模式一书。
与java无关的话说完了,接下来就说一些java基础,当然我不会从计算机组成和jvm(java虚拟机)说起,因为文章会显得太冗余也不适合初学者,而我也不会把java说的很细致,既然要学这门语言,那我就默认为你会看好多相关书籍,那些书籍各有所长,会细致介绍这门语言,我只是在这点出几个点和一些基础概念:
public class HelloWorld{
public static void main (String [] args){
String helloWorld = "hello world";
System.out.print(helloWorld);
}
}
既然要学java,hello world肯定写了,java运行和编译环境搭建了,如果没搭建去百度搭建的方法。
那我就从helloworld说起
1.1 什么是标识符?
标识符就是程序员在编写程序时,给类/变量/方法等起的名字,换句话说所有我们自己可以定义的名字统称为标识符(如:上面代码中的 HelloWorld,helloWorld )
1.2 什么是关键字?
关键字是系统有特殊含义的标识符, 这些有特殊含义的标识符,程序员在起名时,不能与关键字重名(会出问题的),换句话说关键字都是系统定义的。
补充:关键字是不用刻意去背记的,常出现的稍加记忆,在以后的使用中自然会记住。
1.3 标识符的命名规则
1)标识符由字母,数字,下划线和$组成;
2)第一个字符不能是数字
3)不能与关键字重名
注意:
1) 在Java 中是严格区分大小写的, Abc 和abc 是两个不同的标识符
2) 标识符原则上没有长度限制
3) 命名时最好做到见名知义
4) 要符合命名规范
5) 程序员在命名时,一般不使用$
2. 数据是什么?
数据就是信息在计算机中的载体.
信息: 老师手里有十个苹果
数据: 10 、’苹果
在计算机中的数据存储在内存和硬盘中不管是内存中,硬盘中,还是CPU 中处理的数据都是0 和1.
3.字面量
Java 程序是用来处理数据的
数据分为不可变的和可变的两类.
不可变的又分为字面量和final 常量.
字面量又称为直接量. 包括所有的整数,小数,字符,布尔,字符串和null
final常量为不可改变的量,暂时不用理会。
4.变量
变量就是在程序的运行过程中,它的值可以发生变化的量。
根据定义变量的位置,可以把变量分为局部变量和成员变量
成员变量: 在类中定义的变量
局部变量: 在代码块中定义的变量
变量的作用域:就是变量在哪个范围内有效
成员变量:整个类
局部变量:从定义的位置开始,直到包含它的大括弧结束
5.数据类型的分类
在Java 中把数据类型分为基本类型和引用类型两大类
基本类型又包括:整数类型,小数类型,字符类型和布尔类型四部分 引用类型包括:类,接口,数组
自动类型转换 byte -->short -->int -->long -->float -->double char -->int -->long -->float -->double
强制类型转换:不能进行自动类型转换时,可以进行强转 (顾名思义强制就是将某一数据类型强行转换为另一数据类型)
6.运算符
Java 程序是用来处理数据的 通过运算符实现对数据的处理 运算符有: 算术,关系,逻辑,赋值,条件,字符串连接....
7.基本的输入和输出
/* 从键盘上读取数据, 使用Scanner 类, 需要先把这个类导入 System,String 也是系统定义的类,这两个类在java.lang 包中 系统会自动导入java.lang 包中的类 */ import java.util.Scanner; //Step1, 导入Scanner 类 class Demo06 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //Step2, 创建Scanner 对象 //System.in 代表系统的标准输入设备,即键盘; System.out 代表系统的标准输出设备,即显示器 System.out.println("请输入一个整数"); int i = sc.nextInt(); System.out.println("请输入一个小数"); double dd = sc.nextDouble(); System.out.println("请输入一个字符串"); String str = sc.next(); System.out.println("请输入一个布尔值"); boolean flag= sc.nextBoolean(); //从键盘上读取字符存储到char 类型变量中, System.out.println("请输入一个字符"); String ccText= sc.next(); //先以字符串的形式读取 char cc = ccText.charAt(0); //再从字符串中把字符分离出来 //字符串中有一个方法charAt(index) 可以返回字符串中某个位置上的字符 System.out.println("cc==" + cc); } } 基本的输出 1. 在屏幕上打印信息后换行 System.out.println("Hello World!"); 2. 只打印不换行 System.out.print("123"); 3.格式输出 System.out.printf("name:%s " , "laoWang"); //%s 输出字符串 int age = 33; System.out.printf("age:%d", age); //%d 输出整数 System.out.printf(" 0123456789 "); System.out.printf("age:%6d ", age); //占6 位,默认右对齐 System.out.printf("%-6dage ", age); //左对齐 System.out.printf("小数:%8.2f", 12.345678); //%f 输出小数
8.控制流程和控制语句:
什么是流程控制?
流程控制就是用来控制计算机指令的执行顺序.流程控制有三种基本结构:顺序结构,选择结构,循环结构重复的执行某段代码
为了实现控制流程于是就有了控制语句
/* if 语句 选择结构包括if 语句和switch 语句 格式一: if( 条件){ 语句块 } 先判断条件, 如果条件成立就执行大括弧中的语句块;如果条件不成立就不执行 格式二: if ( 条件){ 语句块1 }else{ 语句块2 } 判断条件, 如果条件成立就执行语句块1; 如果条件不成立就执行语句块2 switch 语句 switch( 表达式) { case 常量1 : 语句块1; break; case 常量2 : 语句块2; break; case 常量3: 语句块3; break; case 常量4 : 语句块4; break; default : 语句块n break; } 1) 先计算switch 表达式的值, 找与该值匹配的case 常量值, 转到相应的Case 子句执行; 2) 在case 子句中遇到break 语句就跳出switch 结构; 3) 如果所有的case 常量值都不匹配,则执行default 子句 4) case 后面跟的必须是常量,并且常量值不能重复 5) case 子句没有先后顺序 6) 即使default 子句也可以放在其他case 子句前面, 总是在所有的case 常量值都不匹配的情况下才会执行 7) 如果case 子句没有break 语句,程序会继续向下执行下面的case 子句, 这是case 的穿透, 直到遇到break 语 句或者执行完switch 语句 8) switch 后面的表达式可以是int/String/枚举类型, byte/short/char 可以自动提升为int 类型,也可以. switch 表达式为枚举类型 交通红绿灯, 如果是绿灯就通过,红灯就停,黄灯就等--------(switch 表达式为枚举类型) */ import java.util.Scanner; class Demo07 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //使用枚举类型定义变量,并赋值 // TrafficLight light = null; TrafficLight light =TrafficLight.Red; // System.out.println( light ); System.out.println("请输入Red,Green,Yellow 代表信号灯"); String lightStr = sc.next(); //把字符串转换为枚举类型 light = TrafficLight.valueOf( lightStr ); switch ( light ){ case Red: System.out.println("停"); break; case Green: System.out.println("行"); break; case Yellow: System.out.println("等"); break; } } } /* 1)enum 是一个关键字,用来定义枚举类型. 就类似于class 用来定义类 2) enum 后面跟的是枚举类型名, TrafficLight 是一个数据类型 3) enum 中的内容也是用一对大括弧括起来 4) TrafficLight 这个数据类型定义的变量只能取值Red, Green, Yellow; */ enum TrafficLight{ Red, Green, Yellow; } while 循环 while( 条件){ 语句块,又称为循环体 }
先判断条件是否成立, 如果条件成立就执行语句块(循环体), 执行完循环体之后再判断条件是否成立, 如果条
件成立继续执行循环体,如果条件不成立,就退出循环
break
应用场景:
1) 在switch 结构中, 可以跳出switch 结构
2) 在循环中, 可以中断循环
do{}while()
do {
循环体
}while( 循环条件);
先执行循环体,再判断循环条件是否成立;如果条件成立继续执行循环体, 否则退出循环
任何循环都可以使用while 循环
do...while 循环的使用场景
一般情况下,如果循环条件需要用户输入或者需要通过循环体计算时,可以使用do..while 循环
for 循环
for( 初始化表达式; 条件表达式; 循环体后表达式){
循环体
}
1)先执行一次初始化表达式;
2)判断条件表达式是否成立,如果成立就执行循环体, 如果不成立就退出循环
3) 执行循环体
4) 执行循环体后表达式
5)循环执行第2)~4),
注意:
1)一般情况下,在初始化表达式中定义一个在for 循环中使用的局部变量
2)在循环体后表达式中修改循环控制变量的值
所有的while 循环都可以使用for 循环,同样,所有的for 循环都可以使用while 循环
for 循环的使用场景
一般情况下,循环次数确定时,使用for 循环
循环次数不确定时,使用while 循环
9.什么是方法?
方法就是为了完成某个功能而编写的一段代码.
println() 方法可以在屏幕上打印信息
next() 方法可以从键盘上读取一个字符串
random() 方法返回一个[0,1)之间的随机小数
如果以后想使用这个功能时就直接调用这个方法即可.
方法的优点:
1)使代码理念简洁
2)实现代码复用
3)方便维护
4.2 方法的定义
[修饰符] 返回值类型方法名( 方法参数列表) {
方法体
}
1)方法的修饰符有: public/protected/private, static , abstract, final ,synchronized 等
2)返回值类型是指调用方法时返回这个值的数据类型. 如调用Math.random()方法返回一个[0,1)之间的小数,那
么random()方法的返回值类型应该是double 类型; 如println()方法是在屏幕上打印信息,不需要返回值,这个方法的返
回值类型用void 来表示; 如nextInt()方法从键盘上读取一个整数并返回,这个方法的返回值类型就是int 类型
3)方法名就是程序员起的名字,它一般是一个动词, 第一个单词小写,其他每个单词首字母大写
4)方法名后面小括弧中的内容是方法参数, 方法参数的作用是用来接收一个数据. 如println()方法在屏幕上打印信息,在调用println()方法时,需要给这个方法指定要打印的内容, println()方法就是通过参数来接收数据的; 如果方法不需要参数,如random()方法没有参数,小括弧不能省
5)方法体用一块大括弧括起来
4.3 方法的调用
1) 在程序中,定义了方法, 该方法在没有调用之前,不会执行
2) 通过方法名来调用方法
3) 如果在定义方法时,给方法指定了参数, 在调用方法时,必须传递对应的值. 参数个数一样,参数类型要兼容
4) 如果方法没有返回值,即方法的返回值类型为void, 在调用方法时,这条调用语句只能单独存在
5) 如果方法有返回值,在调用方法时, 可以把方法的返回值保存到一个变量中;可以把方法的返回值打印到屏幕上;可以把方法的返回值作为其余表达式的一部分
4.4 形参与实参
1) 在定义方法时,指定的参数称为形式参数,简称为形参在调用方法时,给方法传递的参数称为实际参数,简称为实参
2) 在定义方法时,形参不存在,相当于一个占位符, 表示可以接收某个类型的数据
3) 在调用方法时, 在栈区中给方法分配存储空间, 同时给方法的形参分配存储空间,这时形参才存在
4) 在调用方法时,把实参的值传递给形参
5) 形参与实参是相互独立的,在方法中对形参进行了重新赋值,不影响实参的值
6) 当方法执行完毕,在栈区中给方法分配的存储空间就被释放, 方法的形参及局部变量也被释放
/*方法的重载
* 在同一个类中,方法名相同,方法参数列表不同(包括参数个数,或者参数类型不同)
*
*为什么重载?
* 相同的功能,使用同一个方法名, 如在屏幕上打印任意类型的数据都可以使用println()方法
*/
10.面向对象与面向过程
面向过程强调的是解决问题的步骤, 各个步骤之间是紧密相关的;
面向对象是以事物为中心,通过给事物发送消息来完成工作.
2 类与对象的概念
现实世界中客观存在的实体称为对象.
万事万物皆对象
类是所有对象相同部分的抽象
类是对一组对象相同特征和相同行为的抽象描述.
对象是具体的,类是抽象的
类就可以看作是图纸(模板), 对象是根据图纸设计而成的实物
3.如何定义类
在现实世界中,认识自然的规律是先有对象,再有类.
在Java 中,先有类, 通过类定义对象
格式:
[修饰符] class 类名{
//静态特征, 用变量来保存
//行为, 用方法来表示
}
1)类的修饰符有:public , abstract, final
2)类名在命名时, 每个单词的首字母大写
4 定义对象
类名 对象名= new 类名() ;
/*
*1)类是一种引用数据类型,就可以定义变量
* 2)给类定义的变量进行初始化时, new 类名();
* 3)类定义的变量,准确的说是对象的引用, 一般就简单的称它为对象
* 4)类定义了对象之后,对象就有了类中定义的成员变量和成员方法
* 对象通过成员运算符(.)来访问成员变量和成员方法
* 5)一个类可以定义多个对象
* 6)同一个类的对象可以相互赋值
*/
空指针异常
当一个对象没有初始化时,或者说这个对象的值为null 时, 访问这个对象的成员变量或者成员方法就会产生空指针异常.