先分享下我学习java的方法....
无论是书和视频还是面授,别人都喜欢先把知识用生活中的案例进行描述,最后做个结论,然后再结合代码进行知识的传授。那么我们在学习的时候就应该把思维跟进到生活的案例中,如果懂了最好,不懂就听最后的结论看能不能听懂,但是无论懂不懂都应该把最总的结论记录到笔记中,如果没懂,请把没有懂得地方做个记录,变成别人能听懂的问题向讲师或者论坛贴吧发问。最后当看到代码的时候,除了根据他人的思路去看代码外,还应该向自己多问几个问题,这个代码是怎么执行的(执行流程),效果是怎样的。如果代码有不懂的地方,请提问"这句代码是什么意思?","这句代码是通过什么来调用的?","这个代码只能这么写吗?","这个代码我用到其他地方会不会可能报错?"。那么这些都是一些真实有用的方法。
最后总结一下,自学或者培训的方法就是。多敲代码,多敲代码,多敲代码,记笔记,记笔记,记笔记,提问,提问,提问,联想,联想,联想
做到这几点,学起java才不会感觉特别累。
那么,二楼上干货
无论是书和视频还是面授,别人都喜欢先把知识用生活中的案例进行描述,最后做个结论,然后再结合代码进行知识的传授。那么我们在学习的时候就应该把思维跟进到生活的案例中,如果懂了最好,不懂就听最后的结论看能不能听懂,但是无论懂不懂都应该把最总的结论记录到笔记中,如果没懂,请把没有懂得地方做个记录,变成别人能听懂的问题向讲师或者论坛贴吧发问。最后当看到代码的时候,除了根据他人的思路去看代码外,还应该向自己多问几个问题,这个代码是怎么执行的(执行流程),效果是怎样的。如果代码有不懂的地方,请提问"这句代码是什么意思?","这句代码是通过什么来调用的?","这个代码只能这么写吗?","这个代码我用到其他地方会不会可能报错?"。那么这些都是一些真实有用的方法。
最后总结一下,自学或者培训的方法就是。多敲代码,多敲代码,多敲代码,记笔记,记笔记,记笔记,提问,提问,提问,联想,联想,联想
做到这几点,学起java才不会感觉特别累。
那么,二楼上干货
代码:
public class Hello World {
public static void main(String[] args){
System.out.println("Hello World!!");
}
}
首先对于零基础的人来说,上述代码会问到的问题很多。归纳为下面几个
1.上述代码编写在哪里(使用什么软件工具进行编写)
2.上述代码怎么运行(个人理解为JAVA代码的运行机制)
3.运行上述代码需要什么准备(个人理解为JAVA运行环境--JDK/JRE/JVM)
4.上述代码完全看不懂(干货了)
那么,针对上述问题,需要解答的或者相关的东西太多,我分楼解答
记事本或者editplus,记住用他们就好,如果你问我到底用哪个,那么给个建议,前三天使用记事本,后面都用editplus,等我告诉你什么时候可以用eclipse了再用。editplus我晚点会发个安装和配置教程
java代码是写在后缀为.java的文件中的,那么可以直接运行这个.java文件吗?是不行的,不能直接运行.java文件。而我们的java文件想要运行,必须经过一次处理---->编译。当java文件经过编译后,会在同目录生成一个.class文件,文件名一样。比如:Test.java经过编译后会生成一个Test.class文件,而这个Test.calss文件才是可以运行的。
可以这么理解,java文件只是提供给程序猿编写和观看的,而电脑并不认识,那么把程序猿能看懂的Java文件进行编译后,电脑就能认识了,并且可以去执行它。但是我们程序猿又不认识了...
如下图:
第三个问题:运行代码的准备,JVM/JRE/JDK
这三个是什么东西呢?
首先要知道,java程序是可以跨平台的。什么叫跨平台呢?就是同一个java程序可以在多个操作系统下运行。
如下图所示
但是,在这里大家需要知道,我们的java程序就是java代码,而java代码并不能执行,能执行的是class文件。那么也就是说class文件可以在多个平台下运行?不是的,,class文件不能跨平台,之所以说java程序跨平台的原因是因为一份程序猿能看懂的java文件,可以在不同平台中用不同的编译器,编译成不同版本的class文件,最终平台只会执行它能读懂的class文件,如下图
这才是java程序的跨平台原理。记住一句话,java程序能够跨平台,但是编译器也就是JVM不能跨平台。
那么JVM到底是什么呢?大家可以理解为,用其他底层语言(比如C和汇编)来写的可以读懂和检查java代码的程序。
JVM也是我们熟知的JAVA虚拟机
总结:
1,安装应用软件需要考虑操作系统的的兼容性,不同操作系统需要的版本是不同的,那么一个应用要在不同的操作系统中运行,需要开发不同的版本。增加了工作量和成本。
2,有没有一种方法能实现只需一个版本,在不同的操作系统下都能运行呢?
3,JAVA的JVM(虚拟的电脑)-也是一个软件,给我们提供了这样一种便利。但是JVM不是跨平台的。
4,需要给不同的操作系统开发不同的JVM,java程序运行在JVM当中,就实现了跨平台的原理。
那么我们怎么安装JVM呢?既然是一个程序那么就是可以安装的,请稍等,再来看看JVM与JRE和JDK之间的关系
我们的JAVA程序需要用到java底层内部的一些类库,比如HelloWorld案例中的String、System,以及修饰符public static等等,那么这些东西属于java本身的,它放在了什么地方?我们JVM去编译和执行java程序时怎么去访问?
这些类库放的地方是JRE中,我们的JRE也属于一个软件,不过严格来说应该属于安装型的一个放有基本类库和JVM的仓库。我们也熟称运行环境。
那么也就是说:JRE中包含了JVM和基本类库----JRE=JVM+基本类库。
松了一口气,终于知道我们该安装什么了。但是事实告诉你,如果你只需要运行java程序可以安装JRE,如果你是开发者,那么JRE还不能满足我们。
因为开发中还会经常使用到一些开发工具,比如文档工具,编译工具,运行工具等等。那么这些东西存在与那里呢?
JDK(严格说是JDK安装目录下bin目录中),JDK包含JRE和开发工具。那么也就是说JDK==JRE+开发工具。
JVM、JRE、JDK他们的关系就是如下图
总结下:
JVM = java虚拟机 java软件运行其中
JRE = java运行环境包括 JVM 和其它的类库
JDK = JRE 和一些开发工具(bin目录下)
了解了JVM,JRE,JDK后能回答第二题了。java代码是怎么编译和运行的。
编译:通过bin目录下的javac.exe进行--->cmd命令为:cd java文件目录--->javac Test.java
运行:cmd命令为-->java Test在执行这些命令前需要安装JDK并配置好环境变量,安装JDK(不需要安装JRE,JDK中就包含了JRE),环境变量怎么配置都行,配置好之后在cmd命令中输入java能出来东西就成。具体配置方法就不细讲,百度很多图片说明。
解释下javac和java命令。javac属于编译,编译的是java文件,那么javac后跟上的是带后缀的文件名。而java是执行命令,执行的是代码,所有后面跟的不是文件,而是文件中的类名,也就是代码 class后的单词 。
public class A{ }
这个格式是定义一个类,类名叫A,什么叫类?目前可以理解为写代码的地方
这里需要注意一点,假如我A.java文件中的代码为
public class A{ }
那么编译后的class文件名就是A.class
如果A.java文件中的代码为
public class B{ }
那么编译后的class文件名就是B.class
说明编译时,是以类为单位和核心进行编译的。如果一个java文件中有
public class A{ }
和
public class B{ }
两个类,那么编译后会生成两个文件A.class和B.class
接下来讲解代码
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello World!!");
}
}
public class HelloWorld{
}
这是一个整体,作用是申明一个类。虽然一个程序的最小单元是一条线程,但是java程序的最小单元可以理解为一个类,如果一个java程序连一个类都没有,那么就可以理解为一个错误的代码。
class是java中的一个关键字,作用是用来申明类和描述字节码文件(.class编译型文件)。HelloWorld代表的是一个类名,只是单词有点意义,本身意义不打。比如人的名字一样,作为一个代号存在,本身并没有多大意义。可以替换为Test、A、B
public 在这个申明语句中是个重点。public本来是访问权限修饰符,后面具体详细解释。public用在类的申明中有点特殊。哪里特殊呢?
1.使用public修饰的类,文件名(.java文件)和类名必须保持一致。
2.public修饰的类在一个java文件中最多只能存在一个,最少可一个类都不使用public修饰
所以上述说HelloWorld可以替换为Test,A,B需要多做一件事,因为public class HelloWorld只能存在于HelloWorld.java文件中,如果想改类名,要么更换.java的文件名,要么删除public修饰符。
public static void main(String[] args){}这个是主方法,我们称之为程序的入口,因为JVM底层再调用这个方法。
所以 public static void就可以把他们看成一个整体了,必须满足这样的格式,才算是一个主方法。这个整体简单描述下,这里的public就只是简单的权限修饰符了,static代表静态的,底层直接使用类名来调用而不是对象,这里也不做多解释。记住这么写就行。void为该方法的返回值类型,void代表空,意思是这个方法不返回任何数据。main跟类名一样只是一个代号。但是如果是主方法的话,mian就不能更换,因为JVM只认main为主方法,当然不仅仅是main这个能代表的。String[]代表一个数组类型,后面解释,记住这么写就行。args只是一个参数名,如果把String[]比作一个装水的杯子。那么args就是这个杯子的名字,就是"杯子"这个名字,或者你比较时尚的话可以给这个杯子取个名字,比如"宝贝儿",那么这里的args就是"宝贝儿"。跟类名,main-方法名一样只是代号。
那么public static void main(String[] 宝贝儿){}就是一个主方法,args既然是代号就可以任意替换,main不行,底层只认这个单词。
public static void main(String[] 宝贝儿){}这个整体就是主方法了,整体,切记,出了agrs可以任意替换外,其他换一种写法这个整体就不是主方法了,也不是程序的入口了。程序没了入口就运行不起来了。
所以,英语差的写10遍吧~~~~
上述的public static可以任意调换位子,String[] args可以写成String args[] 都是可以的,都算主方法,但是不推荐这么做。不推荐的意思就是谁用谁傻X 大家都不这么用,你这么用并不能显示你的特殊,只能得到别人对你的歧视,记住这句话,java中有或者任何一门语言都有他自己的规范,你不这么写才是对的。你不这么写就算不报错,也会与一大堆人来说你,说不定还会得罪人或者领导...相信我说的没错~~
明天发变量和数据类型的,嗯就这样
我记得如果jdk和eclipse版本不一致,eclipse就起不来。32位和64位好像确实有冲突,但是linux应该不是。我记得我在win系统下编译了JavaWeb项目后可以 直接发布到Linux系统中。
将变量之前先讲个生活案例,在咱们生活当中有许多装东西的容器。比如:水杯,饭碗,茶杯,垃圾桶…..那么这些都是装东西容器,其中水杯装水、饭碗装饭、茶杯装茶、垃圾桶装垃圾。而且大家需要知道的是,我的水杯也能装茶、茶杯也能装水(但是一般情况下茶杯装水杯容量的水会满(溢)出去),饭碗只能装饭不能装垃圾,垃圾桶只能装垃圾不能装饭。当然这些事常识。那么来看看变量,变量也是容器。但是java中的变量容器装的是撒?数据,是的变量是装数据的容器,如水杯、茶杯、饭碗、垃圾桶一样都是。只是在Java中,装的东西是数据了。书中数学就学过变量,看一个表达式 y = x +2;当x=2是 y=4 ;x=3时y=5,那么在初中时x和y都是变量。
Java中的变量也能这么使用,使用时需要先声明变量 x = 2或者x = 5.5。但是这里有点不同,跟生活案例一样,水杯装水,茶杯装茶,饭碗装饭,垃圾桶装垃圾这些容器在生产时就定义了他们装的东西。那么我们变量在声明时也需要有这么一个定义,定义这个变量装什么类型(整数还是小数还是”hello”),必须先定义装的类型。而这些类型就是java中的数据类型,数据类型包括整数类,小数类,字符型,boolean型和引用类型。那么定义变量的格式就是:
数据类型 变量名 = 值;
例:int x = 5;//其中int表示整数型,x是变量的名字 5代表变量的值
注意:而且变量一旦使用某种数据类型声明之后,类型就不可被更改。也就是说当x被int类型声明之后x就只能装数字,不能装小数(在java中整数类型和小数类型是两个大类型)、字符、boolean、引用类型。比如生活案例中的水杯被生产就定义只能装水,不能装饭和垃圾。饭碗只能装饭不能装垃圾,垃圾桶只能装垃圾不能装饭,当然这里有些新手会反驳,那么请你不要反驳,不要转牛角尖,饭碗装水也可以?在这里我们看成饭碗不能装水可好?
总结:变量是装数据的容器,声明时必须使用数据类型进行声明,而且一旦声明该变量就只能对应类型的数据了。
int x = 5;//声明一个int类型(数据类型中的整数类型)的变量x并给变量赋值
x = 10;//更改变量x的值为10。那么这个变量的值就从5变为了10。使用变量时不需要加数据类型,只有声明时才加上数据类型那么测试变量完整的代码为:Test.java文件中的代码
public class Test{//在Test.java文件中申明一个类Test
public static void main(String[] args){//主方法--程序的入口,虚拟机运行时要执行的地方
int x = 5;//声明变量
x = 10;//变量更改值
System.out.println(x);//将值打印到控制台
}
}
"/**/"是多行注释"/*"和"*/"中间的内容会被注释,可以换行注释或注释多行的意思。"/** */"是文档注释,与"/**/"多行注释效果类似,区别在于文档注释可以使用jdk中javadoc.exe命令编译为固定格式的文档