Java程序设计

一、第一章

1.新建一个项目

2.新建一个包

命名规则:反转域名命名法

3.新建一个类

4.代码编写

5.编译运行

注意:

一个项目有若干个包组成;
一个包有若干个类组成;(类分为:自定义类、系统提供类)
一个类由若干个方法组成;(仅有一个主方法)
一个方法有若干个语句组成;

6.输入语句

Scanner scanner=new Scanner(System.in);

7.Unicode字符集
8.字面值

字符的字面值:‘a’
字符串的字面值:“abc”
整形的字面值:5

9.变量

  • 局部变量需初始化赋值后才能使用;
  • 实例变量可与局部变量同名;
  • 局部变量中不可出现同名变量;
  • 在这里插入图片描述

  • final 数据类型 变量名 =初值

10.数组在这里插入图片描述
在这里插入图片描述

(1).输出100以内的随机数
int[][] a=new int[3][4];
int [][]b;
for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
a[i][j]=(int) (Math.random()*100);
}
}
b=a;

    	for(int i=0;i<a.length;i++){
    		for(int j=0;j<a[i].length;j++){
    			System.out.print(a[i][j]+" ");
    		}
    		System.out.println(" ");
    	}
//(2)
     char [][] s={
				    {'白','日','依','山','尽'},
				    {'黄','河','入','海','流'},
				    {'欲','穷','千','里','目'},
				    {'更','上','一','层','楼'}
	  };
		 
		 for(int i=0;i<4;i++){
			 for(int j=0;j<5;j++){
				 System.out.print(s[i][j]); 
			 }
			 System.out.println(" "); 
		 }
		 
		 System.out.println(" "); 
		 
		 for(int i=0;i<5;i++){
			 for(int j=3;j>=0;j--){
				 System.out.print(s[j][i]); 
			 }
			 System.out.println(" "); 
		 }
		 
	}

/*黄河入海流 
欲穷千里目 
更上一层楼 
 
更欲黄白 
上穷河日 
一千入依 
层里海山 
楼目流尽 */

11.String 字符串

String s=“abc”; 字符串引用类型等价于String s=new String (“abc”); String 类的引用

注:java数据类型两大类:八个基本数据类型,其余都是引用类型

方法是实现某种功能的代码集合
public static void get(){
.
}

二、第二章·类与对象

1.相关概念

:描述一组具有相同属性和行为的对象。
对象:分为两个特征:状态(state)和行为(behavior)。
对象为类的模板形式
状态:描述其所具有的属性,由变量实现,定义在类中没有被static修饰的变量称为成员变量实例变量
行为:描述相同事物特征发生的动作,由方法实现,定义在类中没有被static修饰的方法称为成员方法实例方法

2.面向对象思路

  • 一个问题中,涉及到哪些类,抽象出类。
  • 根据类的属性和行为,设计每个类——用变量描述属性,用方法描述行为——一个类里只有两样东西:变量定义方法定义
  • 用类生成对象。
  • 用对象调用类的方法实现程序功能。
  • 在这里插入图片描述

3.构造方法

  • 特殊的方法——方法名和类名一致,没有返回值。
  • 作用是生成对象,初始化对象。
  • 构造方法可以有多个,构成重载,目的是生成多样化的对象。
  • 类结构中还包含 构造代码块、静态代码块、内部类
    在这里插入图片描述
    4.对象生成的过程

Student s1=new Student( );
step1: 加载类——把Student类加载到内存,类变量、类方法进入内存
2.定义s1变量
3.new开辟空间,放入实例变量,并赋默认值
4.Student(),调用构造方法
5.赋值,右边赋值给左边,即空间首地址赋值给s1
6.s1叫做引用,空间叫做被引用对象,一般,简化说s1对象
7.当对象调用实例方法时,才会为实例方法分配入口(进入内存)
8.类变量和类方法通过类调用
9.实例方法通过对象调用
10.实例变量通过对象调用——但是,不这样做一般,所有实例变量一律私有化(private),然后提供set、get方法——封装性
在这里插入图片描述

5.类方法(静态方法)

静态方法只能调用静态方法与静态变量在这里插入图片描述

6.数据类型分类在这里插入图片描述
7.类与类库

因为系统类非常多,开发者也不同,所以造成了很多类重名
为了重名问题,设计了包的概念,把重名的类放入不同的包,所以不同包的同名的类相符不受影响
import关键字导入包
import java.util.Scanner;
import java.util.*;
java.lang这个包是默认导入的,System类属于这个包,所以用它时不用导入
在这里插入图片描述

8.访问修饰符
在这里插入图片描述
9.

  • 一个文件中可以有多个类,但是只能有一个是public的。文件名必须和public的类名一致,如果都没有public,文件名可以和任何一个类名一致
  • 一个类的修饰符,可以用public和默认,不可用private和protected,只有内部类可以用这两个
  • 每个类编译之后,都会生成一个class字节码文件
    -在这里插入图片描述
    在这里插入图片描述

10.继承

-子类是父类功能的扩展
-子类是父类的代码复用
在这里插入图片描述
在这里插入图片描述

11.抽象类及其子类

  • 包含一些共有的属性和行为与子类都有但具体实现不同的方法(称为抽象方法) 所组成的类,称为抽象类。
  • 父类抽象的方法必须要求所继承它的子类来实现
  • 抽象父类是一个管理者,负责统一管理子类。
  • 若当所有的子类已经部署完毕后,发现某属性遗漏,可直接通过在其抽象父类中添加后,所有子类都会被继承。
  • 抽象类的特点: 抽象类和抽象方法必须用abstract修饰、抽象类不能被实例化、抽象类中有构造方法用于子类实例化使用、如果一个类继承了抽象类,那个继承它的子类要么是抽象类,要么实现所有抽象方法。

12.多态

必要条件:1.有继承关系 2.子类覆盖父类的方法 3.父类指向子类

在这里插入图片描述

**上转型:**
Weapon[] weapons={new Tank("坦克",100),new Plane("飞机",500),new QianTing("潜水艇",1000,6000)};
		for(int i=0;i<weapons.length;i++)
		{
			weapons[i].attack();
			weapons[i].move();
		}

**向下转型:**
if(weapons[0] instanceof Tank){
			Tank tank=(Tank) weapons[0];
			tank.attack(60);
		}
  • 常见问题汇总

1.抽象类必须要有抽象方法吗?
不需要,抽象类不一定非要有抽象方法。
2.普通类和抽象类有哪些区别?
普通类不能包含抽象方法,抽象类可以包含抽象方法。
抽象类不能直接实例化,普通类可以直接实例化。

13.接口

  • 地位与类同级
  • 为了弥补单继问题,支持多重实现
  • 接口中的变量都为常量,方法都为抽象方法
  • 接口是提供某种服务或者功能的,一个类实现了这个接口,就代表具备了某种功能或者服务(如:一个人拿到了证书就具备了某种能力;银行开通某种服务等 )。
  • 一个类实现了某个接口就表示具备有这个接口所描述的方法,若不实现则可定义为抽象类;
  • 接口与实现接口的类没有直接关系,但父类与子类是有关系的,必须为同类;

14.

	//一、
   btnNewButton.addMouseListener(new listener());
>  class listener  implements MouseListener{

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub	
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	
}`
//二、
btnNewButton.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
		});//生成匿名内部类
//三、
btnNewButton.addMouseListener(new MouseAdapter() {//生成匿名对象
			@Override
			public void mouseClicked(MouseEvent e) {
				JOptionPane.showMessageDialog(null, "bbbbb", "a", HEIGHT);
			}
		});

15.IO输入输出流
>

1、数据流
硬盘和内存之间 ,10数据像流水一样来回流动
站在程序角度看 ,从内存到硬盘叫做输出 , 反之输入
2、字节流 1个字节
把数据流八位一分割 , 就形成了字节流 ,以字节为单位对文件进行读写叫做字节
FileInputStream 和FileOutputStream 以字节单位读写
BufferedInputStream 和 BufferedOutputStream 带缓冲区的读写
DateInputStream 和DateOutputStream 以数据类型为单位读写
ObjectInputStream 和 ObjectOutputStream 以对象为单位读写
3、字符流 1-3个自己 文本文件
把数据流按照字符编码格式分割 , 形成了字符流
字符编码: ACSii编码—— 8位,一个字节
unicode编码 ——统一码 2个字节 utf-8
gb2312—— 汉字编码 2个字节
编码 就是把计算机不认识的字符 ,比如字母 、数字 、汉字等用二进制表示
解码 上述编码的反过程
FileReader和 FileWriter 读写字符流文件的 会自动解码编码

16集合框架与泛型
在这里插入图片描述
在这里插入图片描述

1、集合
数组的作用是什么? 存储一组数据 int[] a = new int[5] 引用
数组缺点:必须事先指定数组大小 对象
很多情况是无法事先指定大小的——子弹的数量是无法事先指定的
集合: 存储一组数据,存储的是对象(不能存储基本数据类型) 存储的是对象的引用

2、种类
set集合 里面存放的对象是无序不重复
list集合 有序可重复
map集合 存放的是键值对

3、集合的用法
A 生成集合对象
B 往集合容器中添加对象add方法
C 需要时才能够集合容器中取出对象
Iterator it = set.iterator(); iterator叫做迭代器,专门负责从集合中取数据
List LinkedList 是用链表实现的 数据结构链表和数组的区别 list.get(1)
ArrayList 使用数组实现的 线性表和链表
Set HashSet 没有顺序
TreeSet 有顺序
这四个类都是集合容器,都可以存放对象,用法也基本相同都是collection的实现类
区别:先分出是list和set,在细分

A list集合有get方法 set没有
B java.util.ConcurrentModificationException
删除集合中的元素(对象),有两个方法:collection和iterator中都有remove方法
这两个方法都可以,但是注意,用了迭代器后,就不能再用collection的
C 集合只能存放对象的引用,如果存放基本数据类型,将会启动自动装箱,存放基本类型的包装类
java中都是类和对象,只有八个基本数据类型除外
int Integer 八种基本类型和对应的类可以实现自动转换,自动装箱、拆箱
double Double
D 集合可以存储不同类型,但是,一般不能这么做,一个集合只存储一类对象
泛型约束
ArrayList list = new ArrayList();
定义集合时一般都要加上泛型约束,控制一个集合只能存放一类对象

集合是一个容器,用来存放对象的引用——引用和对象的关系
第一,生成集合对象,设置好泛型
第二,用add方法添加对象
第三,用迭代器遍历集合

在这里插入图片描述

  • 对自己定义的对象使用集合时如HashSet,要在类中覆盖Object类中的三个方法;

Map的使用时,可以用其keySet()方法生成其键对应的Set集合,用其可进行遍历;

17.线程
在这里插入图片描述

  • 实现Runnable接口的线程类不能直接使用Thread类的start方法,必须把它包装成Thread类才可以,比如:
    Thread t =new Thread(new MyRunnable());
    t.start();
    而继承Thread类的线程类可以直接调用start方法。

t.start()会导致run()方法被调用,run()方法中的内容称为线程体,它就是这个线程需要执行的工作。
start()来启动线程,实现了真正意义上的启动线程,此时会出现异步执行的效果,即在线程的创建和启动中所述的随机性。
而如果使用run()来启动线程,就不是异步执行了,而是同步执行,不会达到使用线程的意义
————————————————
版权声明:本文为CSDN博主「smileTimLi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35275233/article/details/87896475

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值