当前位置: 首页 > news >正文

JavaSE

Java学习

数据类型

  1. 基本类型
    1)数值类型(byte 1字节,short 2字节,int 4字节,long 8字节,float 4字节,double 8字节,char 2字节)

    //java.lang.Byte  
    //java.lang.Short  
    //java.lang.Integer  
    //java.lang.Long  
    //java.lang.Float  
    //java.lang.Double
    //java.lang.Character
    public class StudyTest {public static void main(String[] args) {System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);System.out.println("包装类:java.lang.Byte");System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);}
    }
    

    2)布尔类型(true,false 占1位)

  2. 引用类型(统一 4字节)
    1)类
    2)接口
    3)数组

类型转换

低  ------------------------------------>  高
byte,short,char—> int —> long—> float —> double
  1. 自动类型转换(隐式转换):容量小的数据类型可以自动转换为容量大的数据类型
  2. 强制类型转换(显式转换):在有可能丢失信息的情况下进行的转换 格式:(数据类型)变量

变量命名规范

  1. 所有变量、方法、类名:见名知意
  2. 类成员变量:首字母小写和驼峰原则 : monthSalary
  3. 局部变量:首字母小写和驼峰原则
  4. 常量:大写字母和下划线:MAX_VALUE
  5. 类名:首字母大写和驼峰原则: Man, GoodMan
  6. 方法名:首字母小写和驼峰原则: run(), runRun()

运算符

位运算符,右移一位相当于除2取商,左移一位相当于乘2

【常见面试题:int a=2*8怎样运算效率最快?】

public static void main(String[] args) {   System.out.println(2 << 3);
}

流程控制

交互Scanner

Scanner scanner = new Scanner(System.in);
//凡是属于IO流的类如果不关闭会一直占用资源.要养成好习惯用完就关掉
scanner.close();

顺序结构

选择结构

if...else if...else
switch...case

循环语句

while
do...while		//循环体至少执行一次
for(注重增强for循环)

break && continue

break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代

方法

方法定义

修饰符 返回值类型 方法名(参数类型 参数名){   ...   方法体   ...   return 返回值;
}

Java中只有值传递!

方法重载

1.方法名必须相同
2.参数列表必须不同(个数不同,或类型不同,参数排列顺序不同)

可变参数

//在指定参数类型后加一个省略号(...)
//一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。
public static void printMax( double... numbers) {   if (numbers.length == 0) {       System.out.println("No argument passed");       return;   }

递归

递归就是:A方法调用A方法!就是自己调用自己,因此我们在设计递归算法时,一定要指明什么时候自
己不调用自己。否则,就是个死循环!

数组

数组的基本特点:

  1. 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  2. 元素必须是相同类型,不允许出现混合类型。
  3. 数组中的元素可以是任何数据类型,包括基本类型和引用类型。

Java内存:

  1. 堆:存放new的对象和数组
  2. 栈:存放基本变量类型,引用对象的变量
  3. 方法区:包含了所有的class和static变量

三种初始化

//静态初始化(定义数组的同时分配空间和赋值)
int[] a={1,2,3};
//动态初始化(定义数组并分配空间)
int[] b=new int[2];
//默认初始化

数组下标合法区间:[0,length-1],ArrayIndexOutOfBoundsException : 数组下标越界异常!

Arrays类

数组的工具类java.util.Arrays
具有以下常用功能:给数组赋值:通过 fill 方法。对数组排序:通过 sort 方法,按升序。比较数组:通过 equals 方法比较数组中元素值是否相等。查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。

面向对象

OOP详解

1.面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据。
2.面向对象的思维模式说白了就是分类思维模式。

break和return的区别:

return 语句的作用
(1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行。
(2) return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。
(3) return后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回调用函数处。
break 语句的作用
(1)break在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转向循环语句下面的语句。
(2)当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体

!!!静态方法不能调用非静态方法

构造器

特点:
1.必须和类的名字相同
2.必须没有返回类型,也不能写void
作用:
1. 使用new创建对象的时候必须使用类的构造器
2. 构造器中的代码执行后,可以给对象中的属性初始化赋值
注意:默认存在无参构造,当定义了有参构造之后,要使用无参构造必须显示定义
快捷键: Alt+Insert

创建对象内存分析

image-20210306151849012

封装、继承、多态

高内聚:类的内部数据操作细节自己完成,不允许外部干涉;、
低耦合:仅暴露少量的方法给外部使用。

//封装的步骤
1.使用private 修饰需要封装的成员变量。
2.提供一个公开的方法设置或者访问私有的属性(get和set方法)。
快捷键:Alt+Insert
//继承的步骤
继承:一个子类(派生类),一个父类(基类)。子类继承父类,使用关键字extends来表示
public class student extends Person{
}
查看继承关系快捷键:Ctrl+Hjava中的每一个类都是"直接" 或者 "间接"的继承了Object类。
子类继承父类之后,在子类中可以使用this来表示访问或调用子类中的属性或方法,使用super就表示访问或调用父类中的属性和方法。
不管是显式还是隐式的父类的构造器,super语句一定要出现在子类构造器中第一行代码。重写的语法(静态方法不能重写)
1. 方法名必须相同。
2. 参数列表必须相同。
3. 访问控制修饰符可以被扩大,但是不能被缩小: public protected default private。
4. 抛出异常类型的范围可以被缩小,但是不能被扩大 ClassNotFoundException ---> Exception。
5. 返回类型可以相同,也可以不同,如果不同的话,子类重写后的方法返回类型必须是父类方法返回类型的子类型。
//多态的步骤
1. 有继承关系。
2. 子类重写父类方法。
3. 父类引用指向子类对象。

static修饰符

    {System.out.println("匿名代码块");}static {System.out.println("静态代码块");}public Person(){System.out.println("构造器");}
//执行顺序:静态代码块-匿名代码块-构造器(静态代码块只执行一次,匿名代码块和构造器在每次创建对象的时候都执行)
【Student类之前没有进行类加载】
1. 类加载,同时初始化类中静态的属性
2. 执行静态代码块
3. 分配内存空间,同时初始化非静态的属性(赋默认值,0/false/null)
4. 调用Student的父类构造器
5. 对Student中的属性进行显示赋值(如果有的话)
6. 执行匿名代码块
7. 执行构造器
8. 返回内存地址

abstract修饰符

public abstract class Action{   public abstract void doSomething();
}
抽象类,不能使用new关键字来创建对象,它是用来让子类继承的。
抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的

接口

接口的作用:1.约束,只有规范2.定义一些方法,让不同的人实现(子类必须重写方法)3.声明类的关键字是class,声明接口的关键字是interface4.接口不能实例话,没有构造方法5.implements可以实现多个接口6.接口中的变量都是静态常量public interface Action{   public abstract void run();   //默认就是public abstract修饰的   void test();
}  

内部类

1. 成员内部类(在A类中创建了B类)
2. 静态内部类(使用static修饰的内部类)
3. 局部内部类(在方法内部声明的类)
4. 匿名内部类new Object().method()创建的对象不需要保存到变量中

异常

image-20251010113459338

异常的超类:java.lang.Throwable

Error:由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。
Exception:它表示用户程序可能捕捉的异常情况或者说是程序可以处理的异常。
StackOverflowError:当栈深度超过虚拟机分配给线程的栈大小时就会出现此error
OutOfMemoryError:JVM不再有继续执行操作所需的内存资源
ArithmeticException:算术异常
MissingResourceException:丢失资源
ClassNotFoundException:找不到类
NullPointerException:空指针异常
IllegalArgumentException:向方法传递了一个不合法或不正确的参数
ArrayIndexOutOfBoundsException:数组下标越界
UnkownTypeException:未知类型异常

java异常处理本质:抛出异常和捕获异常

//抛出异常
if(stu == null){   throw new NullPointerException();
}
//捕获异常
异常处理器 快捷键:Ctrl+Alt+Ttry -- 用于监听catch -- 用于捕获异常finally -- finally语句块总是会被执行throw -- 用于抛出异常throws -- 用在方法签名中,用于声明该方法可能抛出的异常

IO流

输入输出流分类

  1. 按数据流的方向不同可以分为输入流和输出流(输入流和输出流都是站在程序的角度上)
  2. 按照处理数据单位不同可以分为字节流(8位)和字符流(2字节)
  3. 按照功能不同可以分为节点流和处理流
输入流:InputStream(字节流),Reader(字符流)
输出流:OutPutStream(字节流),Writer(字符流)
节点流:可以从一个特定的数据源节点读取数据(文件、内存)
处理流:连接在已存在的流上,通过对数据的处理为程序提供更强大的读写功能

节点流类型

image-20210314155719757

处理流类型

image-20210314155820026

InputStream(输入流)

//读一个字节,处理一个字节。如果返回-1就说明已经到了输入流的末尾
int read() throws IOException
//读取一系列字节并存储到一个数组buffer
//返回实际读取的字节数,如果读取前已到输入流的末尾,则返回-1
int read(byte[] buffer) throws IOException
//读取length个字节,并存储到一个字节数组buffer
//返回实际读取的字节数,如果读取前以到输入流的末尾返回-1.
int read(byte[] buffer,int offset,int length) throws IOException
//关闭流释放内存资源
void close() throws IOException

IO流需要注重使用try/catch

OutputStream(输出流)

//向输出流中写入一个字节数据,该字节数据为参数b的低8位
void write(int b) throws IOException
//将一个字节类型的数组中的数据写入输出流
void write(byte[] b) throws IOException
//将一个字节类型的数组中的从指定位置(off)开始的len个字节写入到输出流
void write(byte[] b,int off,int len) throws IOException
//关闭流释放内存资源
void close() throws IOException

Reader和Writer

FileReader和FileWriter都是字符流,是以一个字符为单位进行输入和输出的,可针对中文字符在Java里面占两个字节

网络编程

网络编程的目的:直接或间接地通过网络协议与其他计算机实现数据交换,进行通讯。

网络通信协议:

  1. OSI 参考模型(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)

  2. TCP/IP 参考模型(应用层、传输层、网络层、数据链路层)

网络编程的两个要素:

  1. 提供IP和端口号
  2. 提供网络通信协议

IP

//InetAddress类,代表IP,代码中需要使用try/catch捕获异常
InetAddress byName2 = InetAddress.getByName("www.baidu.com");    //获得IP地址

端口号

//TCP 和 UDP 各有 65535个端口,单个协议下端口不能冲突。
//端口号与IP地址的组合,得出一个网络套接字:Socket,所以说一些网络编程也被称为Socket编程。
new InetSocketAddress("127.0.0.1",8080);
socketAddress.getHostName()			
socketAddress.getAddress()			//返回地址
socketAddress.getPort()				//返回端口

网络通信协议

TCP/IP协议簇:

  1. 传输层:

    用户传输协议TCP:三次握手,四次挥手,建立连接,稳定(打电话)

    用户数据报协议UDP:将数据,源,目的封装成数据包,不需要建立连接,不可靠(发短信)

  2. 网络层:IP

GUI编程

Swing和AWT 是java开发GUI常用的技术。AWT依赖于本地系统平台,当把AWT组件开发的应用程序移植到其他平台上运行时,不能保证其外观风格;Swing开发的Java应用程序移植到其他平台上时,界面外观不改变。

AWT

使用AWT所涉及的类一般在Java.AWT包及其子包中。
Container(容器)和 Component(组件)是AWT中的两个核心类。

image-20210307102951063

Frame

frame.setBackground(Color.blue);	//设置窗体的背景颜色
frame.setVisible(true);				//设置窗体是否可见
frame.setSize(400,400);				//设置窗体的初始大小
frame.setLocation(200,200);			//设置窗体出现时的位置
frame.setBounds(x,y,w,h)			//设置窗体位置和大小
frame.setResizable(false);			//设置窗体能否被改变大小
frame.setLayout();					//添加参数,设置布局
frame.addWindowListener				//添加窗体的监听事件
frame.pack();						//将窗口调整到最佳大小
frame()使用默认的BorderLayout类布局管理器初始化,也可指定布局管理器初始化

Panel

Panel()使用默认的FlowLayout类布局管理器初始化,也可指定布局管理器初始化

布局管理器

frame.setLayout(new FlowLayout(FlowLayout.LEFT));	//FlowLayout:从左到右,流式布局(默认居中)
frame.add(buttonEast,BorderLayout.EAST);			//BorderLayout:东西南北中(默认中部)
frame.setLayout(new GridLayout(3,2));				//GridLayout:表格布局

组件

(1).Button button1 = new Button("button1");	//创建按钮
(2).ScrollPane scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);//创建带滚动条的容器
(3).Label label = new Label("Hello JAVA");//创建一个标签

事件监听

//一个类要想成为监听类,那么必须实现ActionListener接口
class MyActionListener implements ActionListener{//重写ActionListener接口里面的actionPerformed(ActionEvent e)方法   @Override   public void actionPerformed(ActionEvent e) {       System.out.println("A Button has been Pressed");   }
}   

输入框TextField监听

//在文本框中敲回车,TextField对象会触发Action事件
//获取文本框输入的内容
TextField tf=(TextField)e.getSource();
tf.getText()

Graphics类

//在main()方法里面并没有显示调用paint(Graphics g)方法,因为在创建Frame窗体时会自动隐式调用

鼠标事件适配器


windows事件

this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}
});

键盘响应事件

//使用getKeyCode()方法获取按键的虚拟码,类名.静态常量名
public void keyPressed(KeyEvent e) {int keycode = e.getKeyCode();if(keycode==KeyEvent.VK_UP){System.out.println("你按下了上键");}
}

Swing

JFrame(窗体)

JFrame jf = new JFrame(title);
//在开发中通过继承java.swing.JFrame类创建一个窗体,通过this关键字调用其方法。
//在JFrame对象创建后,需要调用getContentPane()方法将窗体转换为容器,然后在容器中添加组件或设置布局管理器
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
常用的窗体关闭方式有四种:
“DO_NOTHING_ON_CLOSE”:当窗口关闭时,不做任何处理;
“DISPOSE_ON_CLOSE”:当窗口关闭时,隐藏并dispose这个窗口;
“HIDE_ON_CLOSE”:当窗口关闭时,隐藏这个窗口;
“EXIT_ON_CLOSE”:当窗口关闭时,退出程序;

JDialog(弹窗)

//弹窗默认有关闭事件,可以不写
class MyDialog1 extends JDialog{public MyDialog1() {}
}

标签

JLabel jl = new JLabel();
//获取图片地址
URL resource = ImageIconDemo.class.getResource("tx.jpg");

面板

Swing中常用面板有JPanel面板(普通面板)和JScrollPane面板(带滚动条的面板)

//如果需要在JScrollPane面板中放置多个组件,需将这多个组件放置在JPanel面板上,然后将JPanel面板作为一个整体组件添加在JScrollPane面板上

按钮

1.普通按钮(JButton)					JButton jb = new JButton();
2.单选按钮(JRadioButton)			ButtonGroup group = new ButtonGroup();JRadioButton jr1 = new JRadioButton("JRadioButton1");group.add(jr1);
//单选按钮是一个圆形图标,在其旁放置一些说明性文字。当用户选中某个单选按钮后,按钮组中其它按钮将被自动取消,这时就需要按钮组(ButtonGroup)来放置按钮,按钮组中的按钮只能选择一个。
3.复选框(JCheckBox)				JCheckBox jrb  = new JCheckBox("abc");
//复选框是一个方块图标,外加一段描述性文字。每一个复选框都提供“选中”与“不选中”两种状态

列表

1.下拉列表(JComboBox)				JComboBox jComboBox = new JComboBox();jComboBox.addItem("正在热映");
2.列表框(JList)			String[] name={"1","2","3"};					//静态设置Vector name = new Vector();	name.add("1");	//动态设置JList jList = new JList(name);
//列表框只是在窗体上占据固定的大小,如果要使列表框具有滚动效果,可以将列表框放入滚动面板中。

文本组件

1.文本框JTextField jt = new JTextField("aaa"); jt.setText("");
2.密码框JPasswordField jp = new JPasswordField();jp.setEchoChar('#');        // 设置回显符号
3.文本域JTextArea tArea = new JTextArea(20, 50);tArea.setText("欢迎来到西部开源学Java");

注解和反射

什么是注解

注解可以对程序做出解释,也可以被其他程序读取。格式:"@注释名",还可以添加一些参数值

内置注解

@Override			定义在java.lang.Override中,重写超类中的一个方法
@Deprecated			定义在java.lang.Deprecated中,表示不鼓励程序员使用这样的元素
@SuppressWarnings	定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息(镇压警告,需要传参)

元注解

//元注解的作用就是负责注解其他注解
@Target:用于描述注解的使用范围
@Retention:用于描述注解的生命周期 (SOURCE < CLASS < RUNTIME)
@Documented:说明该注解将被包含在javadoc中
@Inherited:说明子类可以继承父类中的注解

自定义注解

//使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口
// 格式:参数类型 参数名称();
String value();

反射

http://www.hskmm.com/?act=detail&tid=28233

相关文章:

  • CF2064E Mycraft Sand Sort
  • Servlet笔记
  • 第一个博客
  • k8s 主节点重启后 从节点 get 异常 - 教程
  • 多维索引技术优化数据湖查询性能
  • Umi-OCR_文字识别工具 免安装使用教程(附下载安装包)!永久免费,开源离线OCR识别软件下载
  • 【汇总】OPPO r9m 分区名、分区功能
  • 04_线程池实现
  • #D251010D. 未命名 10 (unnamed)
  • 【JAVA】从入门到放弃-01-HelloWorld - 指南
  • 离线应用程序
  • 2025表面瑕疵检测厂家TOP5推荐:表面瑕疵检测,薄膜瑕疵检测,瑕疵检测设备,瑕疵在线检测,铝箔瑕疵在线检测,外观瑕疵检测机,薄膜瑕疵检测仪,陶瓷膜瑕疵检测各种类型检测,精准高效的质量守护
  • 表格识别:不仅能识别文字,更能理解表格的结构和逻辑关系,实现输出可编辑、可分析的结构化数据
  • 同步FIFO
  • P13274 [NOI2025] 三目运算符
  • Microsoft Office不小心卸载或重装系统后,如何重新安装 ... - sherlock
  • HTTPS 抓包乱码怎么办?原因剖析、排查步骤与实战工具对策(HTTPS 抓包乱码、gzipbrotli、TLS 解密、iOS 抓包) - 实践
  • 使用JaCoCo进行代码覆盖率分析
  • 计算机视觉专家入选德国国家科学院
  • 2025 年工程管理软件/软件系统/软件App/软件平台/工程管理软件和验房系统公司/企业推荐榜:数字化转型下的实用选型指南
  • 【Java学习】【Java基础】--第1篇:入门Java和对面向对象的理解
  • solutions
  • 技术面:Spring (事务传播机制、事务失效的原因、BeanFactory和FactoryBean的关系)
  • 安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接
  • 04-最简单的字符设备驱动
  • 完整教程:手机可视化方案(针对浓度识别)
  • AI元人文系列文章:决策范式与无为而治
  • SAP导入证书
  • Kubernetes存储卷:保障有状态应用的数据持久化
  • MySQL的查询操作语法要点