JAVA学习之第二周记

类与对象

1.对象是具体的事物,类是对对象的抽象。
2.类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
3.类适用于描述一同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同属性和方法

 

内存分析---栈,堆,方法区(静态区) 

 

 

构造方法重载

 构造器也叫做构造方法用于对象的初始化。

要点:

1.通过new关键字调用
2.构造器,虽然有返回值,但是不能定义返回值类型,不能再构造其中使用润跳远返回某个值
3.如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数,如果已定义则编译器不会自动添加构造
4.构造器的方法必须和类名一致

垃圾回收机制
垃圾回收过程
1.发现无用对象,
2.回收无用对象占用的内存空间。

 对象的三种状态,年轻代,年老代,持久代

 

 

 垃圾回收过程:
1、新创建的对象,绝大多数都会存储在Eden中,
2、当Eden满了(达到一定比例)不能创建新对象,则触发垃圾回收(GC),将无用对象清理掉,然后剩余对象复制到某个Survivor中,如S1,同时清空Eden区
3、当Eden区再次满了,会将S1中的不能清空的对象存到另外一个Survivor中,如S2,同时将Eden区中的不能清空的对象,也复制到S1中,保证Eden和S1,均披清空。
4、重复多次(默认15次)Survivor中没有被清理的对象,则会复制到老年代Old(Tenured)区中,
5、当Old区满了,则会触发一个一次完整地垃圾回收(FullGC),之前新生代的垃圾回收称为(minorGC)

JVM调优和Full GC
在对JVM调优的过程中,很大一部分工作就是对于Full GC的调节。有如下原因可能导致FullGC:
1.年老代(Tenured)被写满
2.持久代(Perm)被写满
3.System.gc()被显式调用(程序建议GC启动,不是调用GC)
4.上一次GC之后Heap的各域分配策略动态变化
(4)开发中容易造成内存泄露的操作
创建大量无用对象;静态集合类的使用;各种连接对象(IO流对象、数据库连接对象、网络连接对象);未关闭监听器的使用。

this的本质

this的本质就是 创建好的对象的地址”!由于在构造方法调用前,对象已经创建,因此,在构造方法中也可以使用this代表“当前对象”。

this最常的用法:
1.在程序中产生二义性之处,应使用this来指明当前对象;普通方法中,this总是指向调用该方法的对象。构造方法中,this总是指向正要初始化的对象。
2.使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。
3.this不能用于static方法中。
static关键字

 static修饰的成员变量和方法,从属于类。普通变量和方法从属于对象的。

静态初始化块
用于类的初始化操作!在静态初始化块中不能直接访问非static成员。
静态初始化块执行顺序(学完继承再看这里):
1.上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到我们的类的静态初始化块为止。
2.构造方法执行顺序和上面顺序一样

package cn.sxt.lian;
public class User3{
int id; //id
String name;//账户名
String pwd ;//密码

static String company;//公司名称
static {
        System.out.println("执行类的初始化工作”);
        company ="北京尚学堂”;
    printCompany();
 public static void printCompany() {
  System.out.println(company);
 }
 public static void main(String[] args) {
    User3 u3 = new User3();
 }
}

java中参数值传递机制

Java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”。也就是说,我们得到的是“原参数的复印件,而不是原件”。因此,复印件改变不会影响原件。引用类型是指“对象的地址”

JAVA包机制

包机制是JAVA中管理类的重要手段,开发中,我们会遇到大量同名的类,通过包我们很容易对解决类重名的问题,也可以实现对类的有效管理报,对于累,相当于文件夹,对于文件的作用。

我们通过package实现对类的管理,package的使用有两个要点:
1.通常是类的第一句非注释性语句。
2.包名:域名倒着写即可,再加上模块名,便于内部管理类。

注意事项:
1,写项目时都要加包,不要使用默认包。
2,com.gao和com.gao.car,这两个包没有包含关系,是两个完全独立的包。只是逻辑上看起来后者是前者的一部分。


 

JKD中的主要包

import导入类 

 如果我们要使用其他包的类,需要使用import导入,从而可以在本类中直接通过类名来调用,否则就需要书写类的完整包名和类名。import后,便于编写代码,提高可维护性。
注意要点:
1.Java会默认导入java.lang包下所有的类,因此这些类我们可以直接使用。
2.如果导入两个同名的类,只能用包名+类名来显示调用相关类:

静态导入

 

关于小游戏的蠢蠢欲动

一,创建游戏主窗口

package cn.sxt.game;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;

public class MyGameFrame extends JFrame{
	/**
	 * 初始化窗口
	 */
	public void launchFrame() {
		
		this.setTitle("启航储备成员_小试");
		this.setVisible(true);
		this.setSize(500,500);
		this.setLocation(300,300);
		
		this.addWindowListener(new WindowAdapter(){
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
				
			}
		});
		
	}

	public static void main(String[] args) {
		MyGameFrame f= new MyGameFrame();
		f.launchFrame();
	}
}

得到效果图

二,图形绘制,文本绘制,颜色改变

利用paint可以得到画笔,可以画出各种几何图形,如直线(g.drawLine)矩形( g.drawRect)椭圆(g.drawOval)还有满矩形框(g.fillRect)。

public void paint(Graphics g) {//自动被调用,g相当于画笔
		g.drawLine(100,100,300,300);
		g.drawRect(100,100,300,300);
		g.drawOval(100,100,300,300);
		g.fillRect(100, 100, 40, 40, );
	}
	

颜色利用g.setColor改变

根据老师所讲,应该得到

 

而我却得到一个黑幕,如下【留问++】

 字体用g.setFont实现。

三,线程内部类实现动画

添加背景和小飞机

内部类帮助我们使用外部类的属性

 小飞机移动的实现

 游戏体父类的实现

 

 定义键盘监听内部类

选择keyPressed和 keyReleased

得到下列代码

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尚膳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值