文章列表
Java复习笔记15—多线程注意问题(1)
- 博客分类:
- Java复习
Java中的多线程共享同一个成员变量,拥有不同的局部变量。
public class ThreadTest {
public static void main(String[] args) {
Runnable r = new Skyritx();
Thread thread1 = new Thread(r);
Thread thread2 = new Thread(r);
thread1.start();
thread2.start();
}
}
class Skyritx implements Runna ...
Java复习笔记14—集合相关
- 博客分类:
- Java复习
集合中的元素不能重复。(即不能重复对同一地址的引用)
集合中存储的是对象的引用(地址)。
Hashset的内部机制:也使用到了equals方法(所以经常需要重写)
1.当向集合(set)中添加对象是,首先计算该对象的hashcode值,当该hashcode值所在位置无对象时,直接添加。
2.否则,则进行equals方法比较,如果返回true,说明就是同一个对象,不再添加该对象;如果返回false,继续散列添加该对象。
此处,如果没有重写equals方法,那么就是判断内存地址,只有重写了equals方法,才能判断内容是否相同。
同时,当重写了equals ...
Java复习笔记13—常见问题(1)
- 博客分类:
- Java复习
最近在代码开发过程中,总结了一下需要注意的几条规则:
1.对于try,catch块中应将较小异常放在较大异常前面。
public class Test {
double mul(double a,double b)
{
try{
return a/b;
}
catch(ArithmeticException ex){
return 0;
}
catch(Exception ex){
return 0;
}
finally{
}
}
}
如上所示,较小的异常应该catch在前面。 ...
Java复习笔记12—多线程相关
- 博客分类:
- Java复习
先给出一个问题引入:
请编写一个多线程程序,实现两个线程,其中一个线程实现对某个成员变量每次加1操作,另外一个线程则实现对某个成员变量每次减一操作。同时,保证成员变量的值不大于1,不小于0。该成员变量的初始值为0。
要实现这个问题,显然我们需要使用多线程进行约束操作。
package Code;
public class Sample {
private int number;
public synchronized void increase()
{
if(number != 0)
{
try {
w ...
Java复习笔记11—单态模式
- 博客分类:
- Java复习
JAVA中的单态(Singleton)模式指:一个类只能并且有且只能生成一个对象。
因此,单态类中的构造方法必然是private。
同时注意静态的方法必然返回静态变量。
package com.code;
public class Test {
public static void main(String[] args) {
}
}
class SingleTon
{
private static SingleTon singleton;
private SingleTon()
{
}
public static ...
Java复习笔记10—字符数组
- 博客分类:
- Java复习
在前面几次中,我们已经介绍了Object中的equals方法是与==相等的,String重写equals方法,所以才会比较字符串的内容。
那么对于字符数组,我们应该如何比较其内容是否相同呢?
package com.code;
public class Test {
public static void main(String[] args) {
char[] ch1 = new char[2];
char[] ch2 = new char[2];
ch1[0]='a';
ch1[1]='b';
ch2[0]='a';
ch2[ ...
Java复习笔记9—多态相关
- 博客分类:
- Java复习
JAVA的三个最基本特征:继承、封装和多态,今天着重分析下多态(Polymorphism)。
对于多态,我们用以下一句话理解足矣:
父类或者接口类型的引用指向子类或者实现该接口的类的对象。
接口里面只有方法声明,没有具体实现。
package com.code;
public class PolymorphismTest {
public static void main(String[] args)
{
Parent p = new Child();
p.eat();
}
}
class Parent
{
void eat( ...
在JAVA中,使用泛型(Generics)是相当方便的。这里提供泛型的两个实现例子:
package com.code;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class GenericsTest {
// public void method1(List<Object> list)
// {
//
// }
//
// public void method2()
// {
// method1(new ...
Java复习笔记7-—Exception相关
- 博客分类:
- Java复习
Java中的异常大致分为两类:
1.Checked Exception :一定能够检测出来的异常,因此一定要需要处理。处理的方式有两种:继续往外抛,知道抛到JVM,这是一种消极的方法;另外是使用try catch.
2.Unchecked Exception :又叫做runtime exception,这一类型的异常在运行时才能发现,平常检测不出来。对于这一类型的异常,可以不作任何处理。
Error和Exception都是继承于Throwable。
解决方法1:继续向外抛,直到抛到JVM(JAVA 虚拟机);
import java.io.IOException;
...
Java复习笔记6-—final相关
- 博客分类:
- Java复习
对于final类型的成员变量的初始化方式:
1.声明变量时直接赋值。
2.在构造方法中完成赋值。(所有的构造方法中都有有相应赋值)
public class FinalTest {
public static void main(String[] args) {
}
}
class Test
{
public final int x;
public Test()
{
x = 5;
}
public Test(int xx)
{
x = 10;
}
}
1.对于final类型的原生数据类型来说,值一旦确定不能 ...
我们可以使用反射Reflection修改私有成员变量的内容。
import java.lang.reflect.Field;
public class ReflectionTest {
public static void main(String[] args) throws Exception{
Test test = new Test();
System.out.println("Frist X:" + test.GetX());
Class<?> clazz = Test.class;
Field fie ...
Java复习笔记4-—重写和重载
- 博客分类:
- Java复习
关于Java中的方法重写(override,overwrite),以及重载(overload)
方法重写要求除了方法体外,其余基本保持一致:
1.相同的方法名称、返回类型、参数列表。
2.子类访问级别大于或等于父类访问级别。
3.子类中方法抛出的异常范围不能大于父类。
public class OverrideTest {
public static void main(String[] args) {
Parent parent = new Parent();
Child child = new Child();
parent.Get(1, 1); ...
对于类中的代码成分,静态的部分优于构造方法执行。(并且是从上往下执行)
子类一律优先寻找父类不带参数的构造方法。
如果一定要调用,须显示调用父类带参数的构造方法。super.
public class StaticTest {
public static void main(String[] args) {
new Child();
}
}
class Parent
{
public Parent()
{
System.out.println("Parent Constructor");
}
...
Java复习笔记2-—参数传递相关
- 博客分类:
- Java复习
Java中数据分为两种类型:原生数据类型和引用类型。
对于两种数据类型我们需要明确的一点是: pass by value
即无论对于原生数据类型还是引用类型都是传递value,只是原生数据类型传递的value是值,而引用类型传递的是地址。
public class PassTest {
public void method1(int a)
{
a = 100;
}
public void method2(Point point)
{
point.x = 100;
point.y = 100;
}
public static void ...
1. String相关区分存储位置:① JAVA堆栈中:new出来的新对象一定存储于JAVA堆栈中② String池中:常量形式存储于String常量池中。注意:New出来的内容相同的内容String存储于JAVA堆中的不同位置,是两个不同对象;而常量形式构造的相同内容的String存储于JAVA常量池中的相同位置,是一个对象。
public class StringTest {
public static void main(String[] args) {
String str1 = new String("abc");
String str2 = ...