从零开始学习JAVA(入门基础)
博主从零开始学习JAVA(入门基础)
1、搭建JAVA开发环境
卸载JDK(未安装的请忽略)
- 将JDK的安装目录删除
- 删除JAVA_HOME以及CLASS_PATH 环境变量
- 删除PATH下与JAVA_HOME以及CLASS_PATH有关的环境变量
安装JDK
- 去Oracle官网下载JDK或者去一些国内镜像网站下载JDK安装文件
- 将JDK安装到本机中
- 新增环境变量JAVA_HOME,指定路径为JDK的安装目录
- 更新环境变量PATH,加入%JAVA_HOME\bin%、以及%JAVA_HOME\jre\bin%
- 打开电脑DOS命令窗口,输入java -version以及javac命令判断java环境是否安装完毕
2、编程语言中,何为编译型与解释型
编译型
使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。可以理解为有一个解释器,将所有的源代码编译成了硬件可以执行的机械码并直接执行,运行期间无需再次编译(速度快)
解释型
使用专门的解释器对源代码逐行编译成特定的硬件可执行的机械码并且直接执行
3、第一个JAVA应用程序
// 在dos命令行执行 javac HelloJava.java
// 执行 java HelloJava
// 输出结果:Hello JAVA
public class HelloJava{
public static void main(String[] args){
System.out.println("Hello JAVA");
}
}
4、JAVA之中的关键字有哪些
abstract assert boolean break byte case
catch char class const continue default
do double else enum extends final finally
float for goto if implements import instanceof
int interface long native new package private
protected public return short static strictfp
super switch synchronized this throw throws
transient try void volatile while
5、注释的使用
// 这是一个单行注释
/*
这是一个多行注释,我是第一行
这是一个多行注释,我是第二行
*/
/**
这是一个DOC文档注释
*/
6、标识符的定义规则
//JAVA中定义的标识符只能是 字母[a-z][A-Z]、下划线_、美元符号$ 开头
// 正确实例
int name;
int Name;
String _str;
String $str;
// 错误示例
int *1;
int #1;
7、基础数据类型规则
JAVA的8个基础数据类型
/**
位bit是计算机最小的存储单位
1个字节byte 占据8位,也就是1byte = 8bit
*/
// 整数类型
byte 占据1个字节,范围为2^7 到 (2^7)-1
short 占据2个字节
int 占据4个字节
long 占据8个字节
// 浮点类型
float 占据4个字节
double 占据8个字节
// 字符类型
char 占据2个字节
// 布尔类型,值只有true或false
boolean 占据1位
数据类型面试题
- 银行金额需要使用什么数据类型
BigDecimal 类来存储金额 - 为什么浮点数不能用来计算金额
因为不够精确,会损失精度
基础数据类型转换规则
- 自动转换规则
向上转型,意思就是精度小的会向着精度大的进行转型,long与double进行运算后结果为double。 - 强制转换规则
// 在需要强制转换的变量前加入小括号 (数据类型)[变量名]
// 只有向下转型时需要使用强制转换(意思就是精度大的转换为精度小的需要强制转换)
// 强制转换时要注意丢失精度问题
long long1 = 10;
int int1 = (int)a1;
变量、常量、作用域
// 局部变量的作用域仅限于当前方法
// 成员变量只有创建了该类的实例才能使用
// 类变量用类即可调用,作用于当前类
// 使用了final修饰的变量就会变成一个常量
// 变量,顾名思义,可以被多次重新赋值的一个值
算数运算符
自增自减运算符
int a = 10;
int b = a++; // 先赋值再加1,值为10,该行结束后a为11
int c = ++a; // 先加1再复制,值为12
与或非运算符
// 与 &&,两个都为true才为true, && 为断路与,只要左边为false,右边则不进行判断了
// 或 ||,两个都为false才为false,否则为true
// 非 ! ,将false取反为true,将true取反为false
位运算符 & | ^ ~ << >> >>>
& | ^ ~
/*
计算机底层在运算时,会将其转换为补码形式
1、正数的补码等于它的原码
2、负数的补码等于它的原码 (取反 +1) , 而负数的补码转换为原码的时候则需要 (-1 取反)也就是逆运算
3、补码与原码之间的转换时,最高位符号位不用取反
4、使用~进行取反的时候,符号也要取反
5、左移右移时记住一点细节,5>>3 = 5/(2^3) ,5<<3 = 5*(2^3)
*/
// 位运算的应用1:判断奇数偶数,一个数 &1,如果结果为1则是奇数,否则为偶数
int num = 10;
String result = (num & 1)==0 ? "偶数" : "奇数";
/*
位运算的应用2:使用异或^完成两个数之间的值交换
原理:一个数异或自己,再异或一个其他的数,就会变成那个其他的数,例如: 5 ^ 5 ^ 8 = 8,因为5^5之后结果得0,所以再^8时结果为8
两个数字a与b进行交换,a = a^a^b,b = b^b^a;可以看到一个规则,其中两个等式右边都有一个 a ^ b
*/
int a = 10;
int b = 20;
// 由于等式右边都有一个a ^ b
a = a ^ b;
// a 等于了 a^b时,b只需要用自己 ^ 一次a 就可以得到a的值
b = b ^ a;
// 而这个时候 a只需要再^一次自己当初的值即可得到b的值,自己的当初的值已经赋值给了b,所以再^ 一次b即可
a = a ^ b;
System.out.println("这时a的值等于:" + a + " b的值等于:" + b);
javadoc生成java文档
@author 作者名
@version 版本号
@since 指明最早使用的jdk版本
@parram 参数名
@return 返回值
@throws 所抛出的异常
生成javadoc时,需要使用的命令: javadoc -encoding utf-8 -charset utf-8
流程控制
switch
// switch语句中只能编写byte、short、int、char,在jdk1.7时可以使用String
递归思想
递归就是方法自己调用自己,但是递归调用的空间复杂度较高,容易出现栈溢出
例如使用递归编写一个可以计算出阶乘的
public int factorial(int baseNum) {
if (baseNum == 1){
return 1;
}else {
return baseNum * factorial(baseNum - 1);
}
}
java内存 栈、堆、方法区、常量池
栈
- 存放对象的引用(地址)
- 存放基本类型的变量(包括值)
堆
- 存放new出来的对象及数组
方法区
- 存放所有的class文件
- 存放static修饰的方法及其变量
数组的三种初始化及基本特点
静态初始化
int[] arr1 = {1,2,3,4};
String[] arr2 = {new String("s1"),new String("s2")};
动态初始化(包含默认初始化,及对应的数据类型的默认值)
int[] arr2 = new int[10];
数组的基本特点
- 数组长度一旦确定就不能够改变
- 数组只能是固定类型,不能为混合类型(数组中的每个元素都必须为相同类型)
- 数组中的元素可以是基本类型,也可以是引用类型
- 数组创建出的对象存放在堆中,引用存放在栈中
- 并且数组本身即为一个对象
关于二维数组的理解
可以理解为一个数组里装了多个一维数组
数组的选择排序与冒泡排序
// 冒泡排序
public static void bubbleSort(int[] arr) {
// 确定循环次数
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if(arr[i] < arr[j]){
// 交换
arr[i] = arr[j] ^ arr[i];
arr[j] = arr[j] ^ arr[i];
arr[i] = arr[j] ^ arr[i];
}
}
}
}
// 选择排序
public static void selectSort(int[] arr) {
// 确定循环次数
for (int i = 0; i < arr.length - 1; i++) {
// 每次循环都需要得到一个最大或最小的值
for (int j = i + 1; j < arr.length; j++) {
if(arr[i] < arr[j]){
// 交换
arr[i] = arr[j] ^ arr[i];
arr[j] = arr[j] ^ arr[i];
arr[i] = arr[j] ^ arr[i];
}
}
}
}
权限修饰符
权限修饰符 本类 当前包 不同包下的子类 不同包
private √
default(默认) √ √
protected √ √ √
public √ √ √ √
多态中、方法的编译看左边,运行看右边,变量的编译与运行都看左边
记住一点,static修饰的方法不能被重写,所以调用static修饰的方法,编译运行都看左边,而变量无法被重写,所以编译运行也都看左边
public class A {
public static void main(String[] args) {
Father father = new Son();
System.out.println(father.a);
System.out.println(father.b);
father.show();
father.staticShow2();
}
}
class Father{
int a = 10;
static int b = 20;
public void show(){
System.out.println("父类的成员方法");
}
public static void staticShow2(){
System.out.println("父类的静态方法");
}
}
class Son extends Father{
int a = 100;
static int b = 200;
@Override
public void show(){
System.out.println("子类的成员方法");
}
public static void staticShow2(){
System.out.println("子类的静态方法");
}
}
super关键字与this关键字的区别
super
- super 调用父类的构造方法,必须放在构造方法的第一行
- super 必须只能出现在子类的成员方法或者构造方法中
- super和this不能同时调用构造方法!(因为会初始化多次,数据不安全)
this 与 super的区别
- this为当前对象的引用
- super为父类对象的引用
从零开始学习JAVA(入门基础)的更多相关文章
- 从零开始学习java一般需要多长时间?
从零开始学习java一般需要多长时间? 其实学java一般要多久?因人而异,例如一个零基础的小白自学java,每天学习8个小时来算,而且在有学习资料的基础上,每天学习,从零到找到工作,起码要半年起步, ...
- 零基础怎么学Java?Java的运行机制是什么?Java入门基础!
Java语言是当前流行的一种程序设计语言,因其安全性.平台无关性.性能优异等特点,受到广大编程爱好者的喜爱. 想学习Java语言的同学对于Java的运行机制是必须要了解的!! 计算机高级语言的类型主要 ...
- Java入门基础,必读!Java单行、多行和文档注释!
在编写Java的过程中,我们需要对一些程序进行注释.除了方便自己阅读之外,我们还需要为他人更好地理解我们的程序.因此,我们需要对一些程序进行注释,这些注释可以是编程思想,也可以是程序的作用,可以说是J ...
- Java入门基础(类)
类 在Java中表示自定义的数据类型,一个class可以是若干基本类型的组合. public class Student { public String id;//学号 public String n ...
- Java入门基础(变量、操作符与表达式)
Java入门基础 1. 第一个程序 2.变量(命名.运算.整数/小数/字符串.布尔类型) 3.操作符与表达式(算术/逻辑/关系/赋值/自增/类型转换操作符) HelloWorld! public cl ...
- Java入门基础知识点总结(详细篇)
Java入门基础知识点总结(详细篇)~~~~~目录 1.1 图解 1.1.1 Java基础知识点 1.1.2 Java基础语法的相关内容 1.2 关键字 1.3 标识符 1.3.1 标识符概念 1.3 ...
- 学习java之基础语法(三)
学习java之基础语法(三) java运算符 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运 ...
- 学习java之基础语法(一)
学习java之基础语法(一) 基本语法 编写 Java 程序时,应注意以下几点: 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的. 类名:对于所有的类来说 ...
- JAVA入门基础及流程控制
JAVA入门基础及流程控制 数据类型 位 存储单位 eg:0001 0011 八位 字节 byte 处理数据单位 一字节等于八位 eg:1b=0011 0001 类变量: static int num ...
随机推荐
- VisualCom软件仿真平台V1.0发布(附安装包下载链接)
自我们借助VisualCom(暂定名称,后续可能会变更)软件平台撰写技术文章以来,有不少粉丝发私信询问该软件哪里来的,以及哪里有安装包,这里回复一下:VisualCom软件平台是由本微信公众号组织开发 ...
- Unity3D学习笔记1——绘制一个三角形
目录 1. 绪论 2. 概述 3. 详论 3.1. 准备 3.2. 实现 3.3. 解析 3.3.1. 场景树对象 3.3.2. 绘制方法 4. 结果 1. 绪论 最近想学习一下Unity3d,无奈发 ...
- SpringBoot实战:10分钟快速搞定环境
什么是 springboot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. 该框架使用了特定的方式来进行配置,从而使开发人 ...
- Docker笔记--ubuntu安装docker
Docker笔记--ubuntu安装docker 1.更换国内软件源,推荐中国科技大学的源,稳定速度快(可选) sudo cp /etc/apt/sources.list /etc/apt/sourc ...
- C、C++、python、Java、php、C#六种编程语言大PK 哪个好学习?
作为程序员吃饭的工具,编程语言之间也形成了某种鄙视链,各大论坛里弥漫着剑拔弩张的气氛,众口难调.也难怪有很多初学者会有疑惑,为什么会有这么多编程语言,我到底应该学什么语言? 其实各种语言都各有千秋.接 ...
- 8、ITSM基本概念(1)
ITSM即是信息技术服务管理: 8.1.什么是服务: 8.2.RACI模型: 谁负责(R =n Resposible),即负责执行任务的角色,他/她具体负责操控项目.解决问题. 谁批准(A = Acc ...
- 如何使用「mkvtoolnix」和「GoldWave」仅保留视频中左、右声道的其中一个声道?
为什么要这样做? 我手上有一部电视剧的视频文件(.rmvb),每个视频文件都是"国/粤双语"的,与其他双语视频的两种语言的音频保存在两个音轨上不同,我这里的视频文件的双语是分别保存 ...
- python导入模块--案例
1 导入模块 1.1 问题 本案例要求先编写一个star模块,主要要求如下: 建立工作目录 ~/bin/ 创建模块文件 ~/bin/star.py 模块中创建pstar函数,实现打印50个星号的功能 ...
- ThreadLocal底层原理学习
1. 是什么? 首先ThreadLocal类是一个线程数据绑定类, 有点类似于HashMap<Thread, 你的数据> (但实际上并非如此), 它所有线程共享, 但读取其中数据时又只能是 ...
- MySql:Linux下安装MySQL-5.7.12.tar.gz
一 官网下载 mysql-5.7.12-linux-glibc2.5-x86_64.tar.gz 目前最新为5.7.16,可以直接下载mysql-5.7.16-linux-glibc2.5-x86_ ...