java基础知识总结(一)
满满的干货=-=
(一)环境变量的作用: 每个人刚开始学习java的时候,肯定都是安装JDK,配置环境变量,怎么配置网上教程很多很多,但是为什么这么配置呢?
我配置的环境变量:
- JAVA_HOME:C:\Program Files\Java\jdk1.8.0_172
- Path:%JAVA_HOME%\bin
- CLASSPATH:.(一个.)
网上比较全面的环境变量:
- (1)JAVA_HOME:C:\Java\jdk1.8.0_05(即JDK的安装路径)
- (2)Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
- (3)CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(注意前面的一个.)
为什么有的需要配而有的不需要呢?下面来说每一个环境变量的具体作用:
- JAVA_HOME:这个算是这三个里面最重要的了,如果你刚开始学肯定会怀疑为什么Path里面要引用JAVA_HOME,而不是直接写一个C:\Program Files\Java\jdk1.8.0_172\bin,如果你没有这么思考过,那你学习知识就有点。。。其实JAVA_HOME的 存在是有原因的,原因之一:作为JDK位置的引用命名,方便管理,Path中引用JAVA_HOME后,以后更换JDK只需要修改JAVA_HOME就完事了,原因之二:如果你继续往后学的话,使用eclipse你会发现eclipse自动找到了你的JDK,这就是 因为eclipse找到了你的JAVA_HOME,包括以后一些软件例如Tomcat,如果你没有JAVA_HOME,将无法启动。
- Path:这个并不是java特有的,这是windows系统可执行文件的存放路劲,比如说你打开cmd,然后在C:\Users\DEVELOPER>目录下输入了一个qq.exe命令,系统首先在当前目录下搜索是否有qq.exe文件,如果没有就去Path下配置的所有路径当中寻找,还没有就报"不是内部或外部命令,也不是可运行的程序或批处理文件"。我配置这个%JAVA_HOME%\bin是为了找到java.exe、javac.exe等命令,网上教程的%JAVA_HOME%\jre\bin是为了找到java.exe、javaw.exe等,大家可以打开目录自己去看一下就知道都有什么命令了。而我们配置这些命令的搜索路径,目的只有一个那就是你写一个java文件要通过cmd(命令行界面)来编译和运行,先通过javac xxxxx.java生成class文件,再java xxxxx来执行。我相信当你用到eclipse之后就不会再这么折磨自己了。所有说当使用IDE开发后path下的配置的java环境变量就没有用了。
- CLASSPATH:同上,也是在cmd(命令行界面)来编译和运行,先通过javac xxxxx.java生成class文件,再java xxxxx来执行。这个CLASSPATH就是class文件的存放路径,如果在编译的时候不知道class的生成路径,默认是在当前目录下生成,也就是和源代码java文件在一块,然后再执行java xxxxx命令开始执行class文件,看起来好像是没有问题,但是如果在class文件当中需要引用其他class文件(也就是导包,或者同一包下的其他类)运行就会失败,因为系统找不到需要的class文件,CLASSPATH的目的就是告诉系统去哪里找class文件,一个“.”代表当前目录下寻找,一般是自己写的多个类,编译后生成多个class文件。%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar是去JDK中寻找官方的类库(jar包就是class文件的集合),so,CLASSPATH没有用,因为我们是用IDE开发,IDE自己有自己管理class文件的方式,我们不需要关心它在哪存放,去哪寻找,我们只写代码,编译并运行就好啦。
综上所述。三个环境变量,只有JAVA_HOME是必须要配置的(例如:没有JAVA_HOME,Tomcat服务器是打不开的)。Path和CLASSPATH只是在命令行界面要用到的,使用IDE开发就没有作用了。
(二)修饰符总结
我刚开始学习的时候,到修饰符这真的是一脸懵逼,就比如说我们平时常用的public、protected、default、private、static、final、abstract组合起来分别取修饰类、属性、方法,那么多情况简直让人头皮发麻。其实修饰符这里不用太去计较,在学习的过程中逐渐就会明白什么情况下用什么了。没必要很着急的去掌握每一种情况。
(1)权限修饰符:修饰类、属性和方法,用于表示访问权限,权限从高到低位:public>protected>默认(就是没有写权限修饰符)>private
- private :私有权限,只能在当前类下访问,一般用来修饰属性,将属性封装起来不为他人道也。
- 默认(default) :默认就是包访问权限,只能在同一包下进行访问,不同包下的子类也不能访问,注意区别protected,
- protected: 子类访问权限,同一包下和不同包的子类可以访问(比默认权限多了一个不同包下的子类)
- public :公共访问权限,即没有限制,公交车人人皆可上。
对于权限修饰符来说,区别protected和default的方法是:protected总是保护自己的孩子嘛,当然是子访问权限啦,我们在开发阶段只需要掌握private和public就足够了,前者用来修饰属性,后者用来修饰构造器和方法。以此来实现属性不可见,仅向外提供操作的面向对象思想
(2)状态修饰符-static:可以修饰成员变量和方法,表示成员变量或者方法是属于类的,被所有对象所共享,随着类的加载而加载(加载在方法区的静态区),意思是不需要对象即可调用,比如说Arrays类中的所有方法都是static的调用时直接通过类名.方法名调用
(3)状态修饰符-final:可以修饰类,方法,变量。修饰类,类不能被继承。修饰方法,方法不能被重写。修饰变量,变量是一个常量(不可更改,当变量是一个引用类型时,不可被更改的是地址值,而地址值对应的内容可以更改,似乎没有多大用处,所有一般用来修饰基本类型)。对于static和final总结一下,static的本意是静态,一般有俩种用途:其一是系统提供的工具类,这些类造对象是毫无意义的,static可以让他们直接通过类名调用方法,例如Arrays.toString(int[] a)。其二是我们自己写的类,这些类实例化的时候对象的某个属性或许某个方法全部都一样,static可以帮助我们只初始化一次,大大提高效率,说到这里已经很明显了,那么既然static是修饰对象所共有的一样的属性或者方法,那么他的值基本就固定了,我们便用final来声明这个属性或者方法不可更改,所以说有static的地方一般都有final(有的同学可能去看了Arrays的源码,发现所有方法都只有static修饰却没有final,同学们别忘了啊,final修饰方法是防止方法被重写,而Arrays类的构造器是private的,没有构造器就没有子类,没有子类哪来的方法重写),而有final却不一定有static,final修饰的是一个常量,而常量在使用前是必须赋值的(没有值叫什么常量啊)。下面是俩种初始化方法:
public class FinalDemo { private final int a; public FinalDemo(int a) {
this.a = a;
} }
public class FinalDemo { private final int a = 2; }
final最常见的用途是,在局部内部类引用局部变量时扩大局部变量的生命周期,所谓的扩大生命周期就是,将一个虚拟机栈(局部变量)的数据移动到方法区(常量)中(详情在下图),以防止局部变量过短的生命周期走到头而局部内部类还在使用该变量
(4)抽象修饰符-abstract:可以修饰类和方法,修饰类,类是抽象类,修饰方法,方法是抽象方法(没有方法体的方法)需要子类或者实现类重写此方法,注意,有抽象方法的类一定是抽象类,也必须是抽象类,抽象类中不一定有抽象方法(那么没有抽象方法的抽象类有什么作用呢?抽象类是不能实例化的,即禁止他创对象),接口中方法修饰符都是public abstract(无论你写或是不写,默认都是这俩个)
总结一下:禁止类创建对象的俩种方式
- 构造器私有:该类不能创建对象,同是也不能被其他类继承,一般用作工具类。
- 将类抽象化:该类不能创建对象,强迫其他类来继承他,重写某些方法。
java基础知识总结(一)的更多相关文章
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
- Java基础知识系列——String
最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...
- 学习android学习必备的java基础知识--四大内部类
学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- java基础知识梳理
java基础知识梳理 1 基本数据类型
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- Java 基础知识(一)
Java基础知识篇: 一.关键字解释 1. final:修饰非抽象类,非抽象方法和属性, 以及修饰方法参数,代表“无法改变的”.出于对设计或者效率的考虑使用该关键字. final类无法被继承,fina ...
- java 基础知识三 java变量
java 基础知识 三 变量 1.作用域 {} 包围起来的代码 称之为代码块,在块中声明的变量只能在块中使用 2.常量 就是固定不变的量,一旦被定义,它的值就不能再被改变. 3.变量 变量必须在程序 ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
随机推荐
- C Shell中的变量数组
今天刚刚在看一点C Shell的内容,发现一个挺好玩的东西!就是环境变量可以像数组那样来设置!具体设置语法如下: set variable=(element1 element2 ...) //注意元素 ...
- PAMIE- Python实现IE自动化的模块
PAMIE- Python实现IE自动化的模块(附 网易注册代码) 收藏 安装: 今晚弄了一下.已经成功导入PAMIE.具体步骤如下 1.假如你要用PAM30那就就得去下个Python 3.0安装.因 ...
- 怎么给罗技K480 增加Home、End键
最近看张大妈上很多人分享了我的桌面,有感于整天低头码字不利健康,隧鼓捣起自己的电脑桌了. 此处省略N字... 进入正文,我码字用的是罗技的K480蓝牙键盘 码了几行代码,发现没有Home.End键,这 ...
- opencart框架分析与概况
1. Opencart的系统架构 1.1. 架构分析 Opencart是有自己的开发架构的,其架构的核心都在system\engine 下,访问控制统一用 根目录下的 index.php 来协调. R ...
- node.js学习笔记之json数据转string
Node.js中的JSON问题 var str = '{"dir":"kunhony","param":"archive&qu ...
- jquery hover()的使用
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- TVideoCapture类的源码,继承TCustomPanel,用于视频捕获(用到了SendMessage和SetWindowPos等API)good
unit VideoCapture; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, ...
- 在 win10 环境下,设置自己写的 程序 开机自动 启动的方法
原文:在 win10 环境下,设置自己写的 程序 开机自动 启动的方法 1.是登录自己用户时才能开机启 C:\Users\username\AppData\Roaming\Microsoft\Wind ...
- C/C++ static用法
这篇文章没有太多的实际内容,简单记录下static的用法.顺便试一下用markdown来写文章. 1. 在函数中使用 我们都知道在一个函数中的变量是存储在栈区中,函数的每一次调用都伴随着变量的重新定义 ...
- PHP模拟单链表的数据结构
<?php /*** * 单链表 */ //节点,下标,节点名称,下一个节点的地址 class Node { public $id; public $name; public $next; pu ...