java_简单学习笔记
java_study笔记
前言:
所有笔记均总结自狂神的java基础视频
https://www.bilibili.com/video/BV12J41137hu?p=1
idea小技巧
- psvm+回车直接给一个main方法
- ctrl+d复制当前行到下一行
- sout+回车直接输出
- 输入的时候 new Scanner(System.in); 然后alt+回车
- 100.for 直接生成一个for循环
- 数组名.for自动生成一个for-each循环
- alt+insert生成构造器 同样也可以生成get/set方法
- ctrl+alt+t自动设置嵌套
java三大版本
- javaSE:标准版(桌面程序,控制台开发.....)
- javaME:嵌入式开发
- javaEE:企业版
JDK,JRE,JVM
JDK包含了JRE 开发时使用
JRE是java运行时的环境 包含了java的虚拟机
JVM是java的虚拟机
java内存分析
基础语法
变量分类:
java是强语言类型
java的数据类型分为两大类:
- 基本类型
- 引用类型
注意一下float+f long+l就行了
变量的类型
- 类静态变量,写在类内方法外
static int a=0;
- 实例变量,写在类内方法外
int a=0;
- 局部变量,写在方法内
int a=0;
- 常量,可以是类的,可以是局部,也可以是实例
final int a=0;
基本运算符
- 算术运算符:
+,-,*,/,%,++,--
- 赋值运算符
=
- 关系运算符
>,<,<=,>=,==,!=,instanceof
- 逻辑运算符
&&,||,!
- 位运算符
&,|,^,~,>>,<<,>>>
- 条件运算符
?:
- 扩展赋值运算符
+=,-=,*=,/=
- 很多运算会使用工具类 比如Math等等
包机制
定义一个包用的是package
导入一个包用的是Import
//import base.*;
- 包的本质就是一个文件夹 或者是一个命名空间,一般用公司域名倒置用作包名
- 有时候当我们需要用到某些包里面的方法的时候,要导入包
java Doc
- javadoc命令是用来生成自己api文档的
- 加在类上就是类注释 加在方法里面就是方法的注释
@author 作者名
@version 版本号
@since 指明需要最早使用的jdk版本
@param 参数名
@return 返回值情况
@throws 异常抛出情况
使用方法:
javadoc -encoding UTF-8 -charset UTF-8 Doc.java
java流程控制
用户交互Scanner
- java.utilScanner java5的新特性,可以通过Scanner类来获取用户的输入
- 基本语法
Scanner s=new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要 使用hasNext()与hasNextLine()判断是否还有输入的数据
sanner用完之后要关闭
scanner.close()
- next()和nextLine()的区别就是 一个不能读空白分割 一个可以读取整行,以换行符为结束符
if选择结构
if(){
}
else if{
}
else{
}
switch多选择结构
switch(expression){
case value1:
break;
case value2:
break;
default:
}
- switch 语句中的变量类型可以是:
- byte、short、int、char
- 从java se7开始switch可以支持String 同时case标签必须为字符串常量或字面量
- 注意break的使用 否则会出现case穿透现象
循环
- while
while(){}
- do while
- 即使不能进入循环也能至少执行一次
do{
}while()
- for
- for 支持迭代的最有效的结构
for(;;){
}
- 增强for循环
for(int x:number){
sout(numbers[i])
}
跳出循环
break
- 终止循环,强制退出循环
continue----------
- 终止某次循环
方法
System.out.println()
- 格式
public 返回值 名字(形式参数){
}
public static 返回值 名字(形式参数){
}
- 如果是静态方法可以直接在其他的方法中被调用 是属于类的 即类中的就可以随便用 用.
值传递和引用传递
- 重载就是在一个类中有相同的名称但是参数不同
- 方法名称必须相同,参数列表必须不同 满足两个条件即可
命令行传参
- 依靠命令行参数传递给main
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("arg["+i+"]:"+args[i]);
}
}
在加载一个类的时候要到包的路径 包.类才能引用
可变参数
- 可以传递很多个值 也叫做不定向参数
用法:
- 指定类型后面加一个...省略号
- 一个方法中只能指定一个可变参数,他必须是方法的最后一个参数,任何普通的参数必须在它之前声明
public static void main(String[] args) {
demo02 de=new demo02();
de.test(1,2,3,4,5);
}
public void test(int ...i){
System.out.println(i[0]);
}
此时传递的参数可以是多个同一类型的参数 也可以是数组,因为本质上可变参数就是一个数组
new int[]{1,2,3,4,5}
数组
数组的声明和创建
- 数组长度是固定的,一旦声明不可改变
- array.length 获得数组的长度
声明方式:
类型[] 变量名; //首选
或者
类型 变量名[];
数组的创建:
int[] nums;
nums=new int[10];
数组的三种初始化
- 静态初始化
int[] a={1,2,3};
Man[] mans={new Man(1,1),new man(2,2)}
- 动态初始化
int[] b=new int[10];
b[0]=10;
- 默认初始化
数组也是一种引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化
数组的使用
- for-each循环
for (int arrau : arraus) {
System.out.println(arrau);
}
多维数组
- 本质上就是数组的嵌套 就是数组里面有数组
Arrays类
- java.util.Arrays
- Arrays.toString(a) 打印出数组a
稀疏数组
对于有的数组利用率比较低的就可以使用稀疏数组
本质还是一个二维数组
面向对象
public class pat{
public String name;
public int age;
public void say(){
sout("交了一声");
}
}
- 类=属性+方法
- 本质:以类的方式组织代码,以对象的组织封装数据
- 三大特性:继承 封装 多态
静态方法的调用
- 类名.方法名
非静态方法的调用:
- new一个对象 然后对象.方法名
static的区别 就是static是和类一起创建的 而非静态的是和对象一起加载的 所以静态与非静态之间无法相互调用 静态可以直接掉静态 非静态可以直接掉非静态
值传递和引用传递
e.g:传对象就是传引用 传数就是传值
对象与类的关系
- 类是一种抽象的数据类型,他是对某一类事物整体描述/定义,但是不能代表某一个具体的事物
- 对象是抽象概念的具体实例
类的构造函数
一个类即使什么都不写 也会有默认的东西 那是因为存在构造方法
构造器可以用于初始化一些属性,默认是无参构造
如果定义了有参构造 就必须显式定义有参构造
构造器特性:1.和类名相同 2.没有返回值
构造器作用:1.new 本质在于调用构造方法 2.初始化对象的值
注意点:1.定义有参构造之后,如果向使用无参构造,显示的定义一个无参的构造
封装
核心:set/get
- 该露的露 该藏的藏,提高安全性,隐藏代码实现细节
- 程序设计追求:高内聚,低耦合
- 核心就是 即对于私有的属性 我们要提供public的方法来进行调用
继承
- extends的意思是"扩展",子类是父类的的扩展
- 继承的本质是对一批类的抽象,从而实现对现实世界更好的建模
- java中只有单继承没有多继承
- 子类继承了父类 就拥有了父类的全部方法 私有的无法继承、
- java中所有的类 直接或者间接继承object类
- 默认会调用父类的无参构造 相当于一个super()
super
- 和this差不多 不过是调用父类的一些方法和属性(私有除外)
super注意点:
1.super调用父类的构造方法,必须在构造方法的第一个
2.super必须只能出现在子类的方法或者构造方法中
3.super和this不能同时调用构造方法
vs this:
代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的应用
前提:
this:没有继承也可以使用
super:只能在继承条件下才可以使用
构造方法:
this():本类的构造
super():父类的构造
方法重写
对象能执行那些方法主要看左边 和右边的关系不大
重写都是方法的重写
静态方法和非静态方法不一样
重写的关键就是 public和static
重写:需要有继承关系,子类重写父类的方法!
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大
4.抛出的异常:范围 可以被缩小 但是不能被扩大
重写,子类的方法和父类一致 方法体不同
为什么要重写:
1.父类的功能,子类不一定需要或者不一定满足
多态
- instanceof 判断一个实例是否属于某个类
- 子类对象转父类对象可以直接转
- 父类对象转子类对象需要强制类型转换
- 方便方法的调用 减少重复的代码
注意事项:
1.多态是方法的多态
2.父类和子类,有联系 类型转换异常 classcastException
3.存在条件: 继承关系 方法需要重写 父类引用指向子类对象!
Father f1=new Son();
无法多态的:
1.static 方法,属于类,他不属于实例
2.final 常量;
3.private方法
多态是什么:
即同一方法可以根据发送对象的不通而采用不同的行为方式
static关键字
用法:
package base.lei;
public class student {
private static String name;
private int age;
public static void main(String[] args) {
student s1=new student();
System.out.println(s1.age);
System.out.println(s1.name);
System.out.println(student.name);
System.out.println(name);
}
}
静态代码快:
static{
}
匿名代码快:
{
}
静态导入包
import static java.lang.Math.random
抽象类
public abstract void Action{
public abstract void dosomething(){
}
}
- abstract用在方法上边是只有方法的名字,没有方法的实现,他的子类必须重写父类的方法 除非子类也是abstract
- 抽象类不能new 只能通过子类来约束
- 抽象方法必须在抽象类中 抽象类可以实现普通方法
接口-interface
- 只有规范!自己无法写方法~专业的约束 约束和实现分离 接口就是规范 定义的就是一组规则
- 接口中的所有定义都是抽象的 public abstract
- 接口中所有定义的属性都是静态常量 public static final
implements
实现了接口的类,就需要重写接口,可以用java实现多继承
public interface userimp implements user{
alt+回车
}
作用:
1.约束
2.定义一些方法,让不同的人实现
3.public abstract
4.public static final
5.接口不能被是实例化~,接口中没有构造方法~
6.implements可以实现多个接口
7.必须要重写接口中的方法
内部类
- 在一个类里面再写一个类就是内部类
- 内部类可以获得外部类的方法以及私有属性私有方法!!!
- 一个java类中可以有多个class类 但是只能有一个public class
- 直接new就是匿名对象
异常机制
Exception
需要掌握的三种异常:
- 检查性异常:最具代表的检查异常就是用户错误或者问题引起的异常,这是程序员无法预见的 例如要打开一个不存在的文件,异常发生且编译时不能被忽略
- 运行时异常:运行时异常是可能被程序员忽略的异常
- 错误ERROR:错误不是异常,而是脱离程序员控制的问题,错误在代码中通常被忽略。例如 栈溢出时一个错误就发生了,他们在编译也检查不到
异常分为 error和exception
- error都是虚拟机的事 exception是用户的事
java处理异常的关键字
try,catch,finally,throw,throws
try{}catch{}是必要的 可以不要finally,一般用来做善后工作
catch可以多个
打印栈信息
e.printStackTrace(System.err);
throw
- 主动抛出异常
一般在方法中使用
throws
- 假设方法中处理不了异常 那么把方法网上抛
一般配合try catch然后解决
自定义异常
- 自定义异常用来处理一些小问题
- 只需要继承继承Expection类就行
java_简单学习笔记的更多相关文章
- Log4j简单学习笔记
log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...
- Linux——帮助命令简单学习笔记
Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...
- OI数学 简单学习笔记
基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...
- <<C++标准程序库>>中的STL简单学习笔记
0. 内容为个人学习笔记, 仅供参考, 如有错漏, 欢迎指正! 1. STL中的所有组件都是由模板构成的, 所以其元素可以是任意型别的. 组件有: - 容器: 管理某类对象的集合. 不同的容器有各自的 ...
- Mongoose简单学习笔记
1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对 Entity : 由Mo ...
- Linux——bash应用技巧简单学习笔记
本人是看的lamp兄弟连的视频,学习的知识做一下简单,如有错误尽情拍砖. 命令补齐 命令补齐允许用户输入文件名起始的若干个字 母后,按<Tab>键补齐文件名. 命令历史 命令历史允许用户浏 ...
- Oracle简单学习笔记
创建用户 CREATE USER username identified by password;//这是最简单的用户创建SQL语句. CREATE USER username identified ...
- Linux——软件包简单学习笔记
Linux中的是那种软件包: (这里学习是基于redHat的Cent-OS) 1: 二进制软件包管理(RPM.YUM) 2:源代码包安装 3: 脚本安装(Shell或Java脚本) 一: 二进制软件 ...
- Linux——vim/vi 简单学习笔记
Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立.编辑.显示文本文件.Vim/Vi 没有菜单,只有命令. 早前也用过Vim变过C++/C的代码, ...
随机推荐
- 学习zabbix(二)
超大规模门户网站集群架构: 运维30%的时间都在监控,监控要多维度: 监控(单机监控(系统监控).网络监控.应用监控.分布式监控): 业务监控(业务指标-->流量分析-->舆论监控): 流 ...
- 知网上的硕士和博士论文怎么下载pdf格式
文献管理使用的EndNote,阅读习惯使用Drawboard,在下载硕士和博士论文时在知网上只能下载caj格式,于是就想找一种能下载pdf的方式. 知乎中有篇文章介绍的如何下载pdf的方法,很管用也很 ...
- 微信小程序从注册到上线系列
为了帮助同学们了解注册及上线的整个流程,所以在开发之外,我专门制作了这个从注册到上线流程:本专辑不涉及任何跟开发有关的事情,开发专辑请看:实战开发宝典 以下为具体内容: 从注册到上线系列<一&g ...
- webSocket原理探索
本文概述 Web Sockets的目标是在一个单独的持久连接上提供全双工.双向通信.在Javascript创建了Web Socket之后,会有一个HTTP请求发送到浏览器以发起连接.在取得服务器响应后 ...
- Java/C++实现备忘录模式--撤销操作
改进课堂上的"用户信息操作撤销"实例,使得系统可以实现多次撤销(可以使用HashMap.ArrayList等集合数据结构实现). 类图: Java代码: import java.u ...
- java中Error和Exception用法上有什么区别,Error是怎么回事?
顺便提一句, 和Exception 相对应的,还有Error,Error(错误)表示系统级的错误和程序不必处理的异常,是JRE(java运行环境)的内部错误或者硬件问题,比如,另外 某一处地方的bug ...
- 关于websocket 的原理与应用
WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算) http协议和websocket协议的关系如图 We ...
- JAVASE If 单选择、双选择及镶嵌笔记
//单选package com.huang.boke.flowPath;import java.util.Scanner;public class test02 { public static voi ...
- JavaWeb学习day6-Response初学
web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpSevletRequest对象,代表响应的一个HttpSevletResponse 如果要获取客户端请求过来的数据, ...
- HTTP和HTTPS有什么不同
网站的URL会分为两部分:通信协议和域名地址. 域名地址都很好理解,不同的域名地址表示网站中不同的页面,而通信协议,简单来说就是浏览器和服务器之间沟通的语言.网站中的通信协议一般就是HTTP协议和HT ...