{Java The Good Parts}

2024-06-15 08:48
文章标签 java good parts

本文主要是介绍{Java The Good Parts},希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Chap 1 Introduction

When talking about a program language, think about what you are using them for.

What is Java good for???

1. When I am working on a project that is either so large or complex or on a short schedule that I need to be working with other coders, Java is useful.

It allows us to break the work to smaller, independent pieces, and helps us to explain our own parts, which also aid in multiperson effort.


2. When the codes need to run on multiple platforms, Java is useful. 

Write once, run anywhere. For most part, Java bytecodes will run the same on the JVM no matter what platform. This portable binary format is an advantage if codes are going to run on multiple machines.


3. When the codes are going to be used for a long time, Java is useful. 

Java is best used on systems that are designed before they're written.


4. When codes need to be realiable, Java is useful. 

Java made design decisions that are meant to make codes more realiable.


5. When time flies, Java grows rapidly.

But there is a small part that is good and we should know.

Most changes happened in the library, with a smaller set of changes occurring in the language and very little change occurring in the VM.

We will have more views about why these parts are useful, when to use them and when to avoid other solutions.



Chap 2 The Type System

It's a paradigmatic example of what makes the language what it is - a pragmatic combination of features that provide an excellent tool for software engineers building large, complex systems.

The basis:

 Class, Method, Extend, Inherit, Override, Interface, Abstract class and Object-Oriented concepts.


Why Class, Abstract class and interface?

Interface is a user interface to programmers, and it's a way of expressing what different implementationshave in common.

The compiler can find those cases where a programmer changes the signature of a method or makes a typo in the name of the method.

Interfaces can clarify the overall design of the system.


If you cannot describe the meaning of your interface without referring to methods of some other interface, then you should split it.

The seperation between interface and class allows us to do our semantic design seperately from our class design.


Inside and Out

How the method is implemented should never be assumed by the method that receives the object, because they can always change.

Interfaces are used to define sets of interrelated operations that taken together form a unit of meaning in an application.

Classes define a set of related data, and to associate that data with the code that is used to manuplate that data.


Beware

Java interfaces do not create a seperate namespace, and there is no way to disambiguate the same methods.

All in all, the type system lets the compiler tell you when things are out of whack, and helps build units that can be shared, extended and explained.



Chap3 Exceptions

Using exceptions correctly, your code can be easier to read, more realiable, and easier to maintain.


The basics

The basic class of Throwable extends the Serializable interface, and should declare a serialVersionUID.

Any exception that is thrown by a method must be declared as part of the signature of that method.

Throwing Exception is a bad idea!


The Why

When bad things happen, we need to react by cleaning up and aborting the operation.

The exception mechanism allows a program to separate the mainline code and the error-handling code.

If you want to ignore exceptions, you have to do so explicitly. 


How it Works

If an exception occurs, do some clean-up works, so write some exception handlers.

The RuntimeException can be thrown at any time and does not need to be declared as part of the signature of a method.

Don't declare a new RuntimeException.

He believes that the use of RuntimeException is a bad thing. And recommand us to write our own exceptions.


Chap 4 Packages

The package feature along with the notion of importing from other package allow large-scale software to be developed independently.


The Basics

Create a namespace, to help distinguish the same names in different packages.

Once some class with a name is loaded, any class with the same name will use the loaded implementation.

Using domain name or java, javax, email address.

Don't put codes in default package.

Avoid importing all *.


Packages and Access Control

Private, protected, package, public.


Chap 5 Garbage Collection

So far, we know Java define a type (class or interface), define and handle an exception (and tell others when to expect), create a package that both defines a separate namespace and interacts with the protection mechanisms to give you a layer of abstraction.


The basics

Runtime system keeps track of when an object will no longer be used and automatically frees up the memory space taken up by those objects.

It's difficult to keep track of when and how to clean up the memory used by objects.


GC and references:

You can not access reference itself, you cannot do arithmetic with a reference, all you can do is to access fields or methods of the object.

GC needs the system to know the difference between references and other forms of data, pointers are like integers.

GC depend on the observation that most objects are short-lived and it keeps new object and old object heeps, so can save time by not collect old objects too regularly.

GC helps to write program without memory leak and more secure.

Memory leak because you leave a reference hanging around in some other object when the reference is no longer needed.

The places that a reference might be stored are potential area for memory leak.



Chap 6 JVM

JVM changes the way we have to think about buillding large systems and made the job much easier.

JVM presents an abstraction of both the hardware and OS to the programmer.

JVM was always meant to be a development and runtime platform for new code, written in Java language.

Each source file will generate at least a single bytecode file. JVM then load the file, and interpret and run the bytecodes.


JVM enhanced security, this layer has a lot of checks on the code, and isolates the code further from other code running on the physical machine. It verifies all the code run in the JVM before loading the code.


At first, JVM wants to make sure fewer bugs in embedded systems.


JVM has a portability. But we need to use abstractions provided by the JVM.


Chap 7 Javadoc

We write document comments to be read by Javadoc and be turned into HTML files.

Encourage uses to rely on the documented features and not on implementation details.

A good rule of system development is to write the Javadoc for the interfaces first, and then use that documentation as a form of specification for any classes that implement the interface.


Chap 8 Collections

Java frees coders from this level of building. 

Set doesn't guarantee the order of elements stored in it when do iteration.

When need to access the whole collection, return a copy is a good idea.

The idea behind Generics: we can have variables in some declarations that vary over types rather than instances of types.

1. the casting of objects still exist, and the compiler will help us.

2. type safety for parameterized types can only be ensured over a compilation unit.

Collections are useful, and generics is for type safety, UnsupportedOperationException is for simplicity.


Chap 9 Remote Method Invocation and Object Serialization

Breaking a system apart have advantages: independence of failure, security through isolation of parts, and the ability to change parts without interrupting the overall system.

RMI and serialization are good parts.

RemoteException have nothing to do with the way a program is written, but with the environment in which the program is run. A more comman reason is a class-loading failure on the part of the registry.

The object serialization system converts a java object into a linear string of bits that can be sent over the wire and converts a well-formed stream of bits into an object.

More accurately, it will convert a graph of objects, rooted in some particular object, into such a stream.



Chap 10 Concurrency

Take advantages over multi-cores.

Always pay attention to thread safety, whether the library you use or the codes you write are thread-safety.

The atomic data items are very useful when you need to implement a multithreaded counter or need to make some comparison in a routine that might have multiple threads running through it. 



Chap 11 The Developer Ecology

IDE

JUnit (Assert, expected, it makes writing great tests easier and assemble into suites, and run)

FindBugs (static analysis tool, it looks binary output of source code and operates on Java bytecodes, finding the likely bug patterns in that presentation, it's a final check and we can see the source codes and inner thoughts)

Other tools (Checkstyle: automate the checking of stylistic features of your code, can help team style.)

You can save a lot of time and energy by finding existed libraries and codes to help you.


这篇关于{Java The Good Parts}的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062977

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定